Skip to content
Snippets Groups Projects
Select Git revision
  • f74d8421d35f106008f81836ece228e1793efa7c
  • master default protected
  • 0.1
3 results

main.rs

Blame
  • main.rs 2.08 KiB
    use rocket::{get, launch, post, routes, serde::json::Json};
    
    const INDEX_TEXT: &str = r#"\
    Cette application permet d'executer des calculs simple. 
    
    Pour l'utiliser, il faut envoyer le calcul à effectuer sous la forme d'un objet json dans une requete POST sur '/'
    
    Le format à utiliser est un objet json qui a un attribu étant le nom
    de l'operation à effectuer, dont la valeur est un tableau d'opérande
    de taille 2
    
    Exemple:
    
    {
       "Plus": [3, 4]
    }
    
    L'application retourne un résultat au format json avec le résultat (nombre) et l'opération effectuée (chaîne)
    
    Exemple:
    
    {
       "operation": "3 + 4",
       "resultat": 7,
    }
    
    Pour envoyer une requête avec curl:
    
    curl -X POST http://monurl -H 'Content-Type: application/json' -d '{"Plus", [3, 4]}'
    "#;
    
    mod operations;
    use operations::{Operation, OperationResult};
    
    #[get("/")]
    fn index() -> &'static str {
        INDEX_TEXT
    }
    
    #[post("/", data = "<operation>")]
    fn do_calc(operation: Json<Operation>) -> Json<OperationResult> {
        OperationResult::from(operation.into_inner()).into()
    }
    
    #[get("/test")]
    fn test() -> Json<Operation> {
        let t  = Operation::Plus(1, 3);
        t.into()
    }
    
    #[launch]
    fn launch() -> _ {
        rocket::build().mount("/", routes![index, do_calc, test])
    }
    
    #[cfg(test)]
    mod tests {
        use rocket::local::blocking::Client;
        use rocket::http::Status;
        use rocket::uri;
        use super::*;
    
        #[test]
        fn index() {
            let client = Client::tracked(launch()).expect("valid rocket instance");
            let response = client.get(uri!(index)).dispatch();
            assert_eq!(response.status(), Status::Ok);
    
            assert_eq!(response.into_string().unwrap(), super::INDEX_TEXT);
        }
    
        #[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 expected = OperationResult::new("3 + 8", 11);
            assert_eq!(response.into_json::<OperationResult>().unwrap(), expected); 
        }
    }