diff --git a/src/main.rs b/src/main.rs index 24cc811e90b3f15d5ff146bb8b20b91310617237..5af326782882b039d5fadcb93e23bb2d0518fd74 100644 --- a/src/main.rs +++ b/src/main.rs @@ -60,6 +60,13 @@ mod tests { use rocket::uri; use super::*; + fn build_response<'r>(operation: Operation) -> (Status, OperationResult) { + let client = Client::tracked(launch()).expect("valid rocket instance"); + let req = client.post(uri!(super::index)).json(&operation); + let response = req.dispatch(); + (response.status(), response.into_json::<OperationResult>().unwrap()) + } + #[test] fn index() { let client = Client::tracked(launch()).expect("valid rocket instance"); @@ -71,13 +78,20 @@ mod tests { #[test] fn plus() { - let client = Client::tracked(launch()).expect("valid rocket instance"); - let operation = Operation::Plus(3, 8); - let req = client.post(uri!(super::index)).json(&operation); - let response = req.dispatch(); - assert_eq!(response.status(), Status::Ok); + let (status, response) = build_response(Operation::Plus(3, 8)); + assert_eq!(status, Status::Ok); let expected = OperationResult::new("3 + 8", 11); - assert_eq!(response.into_json::<OperationResult>().unwrap(), expected); + assert_eq!(response, expected); + } + + #[test] + fn moins() { + let (status, response) = build_response(Operation::Moins(10, 20)); + assert_eq!(status, Status::Ok); + + let expected = OperationResult::new("10 - 20", -10); + assert_eq!(response, expected); } + } diff --git a/src/operations.rs b/src/operations.rs index 45644e7ced43f8ed212726b097154415d992cd50..e6ee1f0595052bb6448163fda133ced520d50bab 100644 --- a/src/operations.rs +++ b/src/operations.rs @@ -7,6 +7,7 @@ use serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize, Copy, Clone, Debug)] pub enum Operation { Plus(i32,i32), + Moins(i32,i32), } #[derive(Deserialize, Serialize, PartialEq, Debug)] @@ -31,7 +32,11 @@ impl From<&Operation> for OperationResult { Operation::Plus(op1, op2) => OperationResult { operation: format!("{op1} + {op2}"), resultat: op1 + op2, - } + }, + Operation::Moins(op1, op2) => OperationResult { + operation: format!("{op1} - {op2}"), + resultat: op1 - op2, + }, } } } @@ -55,5 +60,14 @@ mod tests { assert_eq!(result, expected); } + + #[test] + fn moins() { + let operation = Operation::Moins(4, 5); + let result = OperationResult::from(operation); + let expected = OperationResult::new("4 - 5", -1); + + assert_eq!(result, expected); + } }