Move mock to own function

This commit is contained in:
Mateusz Słodkowicz 2024-03-22 12:49:09 +01:00
parent 4f6d474c53
commit 31ed4a0eaa
Signed by: materus
GPG Key ID: 28D140BCA60B4FD1
1 changed files with 90 additions and 88 deletions

View File

@ -28,40 +28,8 @@ struct Err {
#[serde(rename = "error-type")] #[serde(rename = "error-type")]
error_type: String, error_type: String,
} }
#[cfg(test)]
pub fn get_rates(code: &String) -> Result<Status, reqwest::Error> { fn mock_get_rates(code: &String) -> Result<Status, reqwest::Error> {
if !cfg!(test) {
let response = reqwest::blocking::get(format!(
"{}{}{}{}",
get_endpoint(),
get_api_key().expect("Error when getting api key from cache"),
"/latest/",
code.to_uppercase()
))?;
if response.status().is_success() {
let response: ConversionRates =
serde_json::from_str(&response.text()?).expect("Error when deserializng");
cache::add_rates(
response.time_next_update_unix,
&response.base_code,
&response.conversion_rates,
)
.expect("Error while caching response");
return Ok(Status::OK);
} else {
let err: Err =
serde_json::from_str(&response.text()?).expect("Error when deserializng");
if err.error_type == "invalid-key" {
return Ok(Status::INVALID);
} else if err.error_type == "quota-reached" {
return Ok(Status::LIMIT);
}
}
Ok(Status::ERROR)
}
// TEST
else {
let response: ConversionRates = match code.as_str() { let response: ConversionRates = match code.as_str() {
"PLN" => serde_json::from_str(include_str!(concat!( "PLN" => serde_json::from_str(include_str!(concat!(
".", ".",
@ -90,10 +58,61 @@ pub fn get_rates(code: &String) -> Result<Status, reqwest::Error> {
) )
.expect("Error while caching response"); .expect("Error while caching response");
Ok(Status::OK) Ok(Status::OK)
}
#[cfg(test)]
pub fn mock_get_currencies() -> Result<Status, reqwest::Error> {
let codes: CurrencyCodes = serde_json::from_str(include_str!(concat!(
".",
crate::main_separator!(),
"mock_data",
crate::main_separator!(),
"codes.json"
)))
.expect("Error when deserializng");
for code in codes.supported_codes {
cache::add_code(code).expect("Error when adding code to cache");
} }
return Ok(Status::OK);
}
pub fn get_rates(code: &String) -> Result<Status, reqwest::Error> {
if cfg!(test) {
#[cfg(test)]
return mock_get_rates(code);
}
let response = reqwest::blocking::get(format!(
"{}{}{}{}",
get_endpoint(),
get_api_key().expect("Error when getting api key from cache"),
"/latest/",
code.to_uppercase()
))?;
if response.status().is_success() {
let response: ConversionRates =
serde_json::from_str(&response.text()?).expect("Error when deserializng");
cache::add_rates(
response.time_next_update_unix,
&response.base_code,
&response.conversion_rates,
)
.expect("Error while caching response");
return Ok(Status::OK);
} else {
let err: Err = serde_json::from_str(&response.text()?).expect("Error when deserializng");
if err.error_type == "invalid-key" {
return Ok(Status::INVALID);
} else if err.error_type == "quota-reached" {
return Ok(Status::LIMIT);
}
}
Ok(Status::ERROR)
} }
pub fn get_currencies() -> Result<Status, reqwest::Error> { pub fn get_currencies() -> Result<Status, reqwest::Error> {
if !cfg!(test) { if cfg!(test) {
#[cfg(test)]
return mock_get_currencies();
}
let response = reqwest::blocking::get(format!( let response = reqwest::blocking::get(format!(
"{}{}{}", "{}{}{}",
get_endpoint(), get_endpoint(),
@ -108,8 +127,7 @@ pub fn get_currencies() -> Result<Status, reqwest::Error> {
} }
return Ok(Status::OK); return Ok(Status::OK);
} else { } else {
let err: Err = let err: Err = serde_json::from_str(&response.text()?).expect("Error when deserializng");
serde_json::from_str(&response.text()?).expect("Error when deserializng");
if err.error_type == "invalid-key" { if err.error_type == "invalid-key" {
return Ok(Status::INVALID); return Ok(Status::INVALID);
} else if err.error_type == "quota-reached" { } else if err.error_type == "quota-reached" {
@ -118,20 +136,4 @@ pub fn get_currencies() -> Result<Status, reqwest::Error> {
} }
Ok(Status::ERROR) Ok(Status::ERROR)
}
//TEST
else {
let codes: CurrencyCodes = serde_json::from_str(include_str!(concat!(
".",
crate::main_separator!(),
"mock_data",
crate::main_separator!(),
"codes.json"
)))
.expect("Error when deserializng");
for code in codes.supported_codes {
cache::add_code(code).expect("Error when adding code to cache");
}
return Ok(Status::OK);
}
} }