diff --git a/src/lib.rs b/src/lib.rs index b8c1d63..76ec6d4 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -14,6 +14,7 @@ use message::{ action::{Action, MsgAction}, wrapper::{Addition, CalcValue, Calculation, Message, Operand, Query}, }; +pub use mtterror::MTTError; use name::{Name, NameType}; use queue::{ data_director::{Include, Path, RegMsg, Register}, @@ -104,48 +105,11 @@ impl MoreThanText { output } - pub fn get_document(&self) -> String { - "something".to_string() - } -} - -#[cfg(test)] -mod mtts { - use super::*; - - #[test] - fn are_session_ids_unique() { - let mut mtt = MoreThanText::new(); - let count = 10; - let mut result: Vec = Vec::new(); - for _ in 0..count { - let id = mtt.validate_session(None); - assert!(!result.contains(&id), "found {} in {:?}", id, result); - result.push(id); + pub fn get_document(&self, name: &str, id: &str) -> Result { + if name == "page" { + Ok("something".to_string()) + } else { + Err(MTTError::DocumentNotFound(name.to_string())) } } - - #[test] - fn bad_session_id_returns_new_id() { - let mut mtt = MoreThanText::new(); - let id1 = mtt.validate_session(Some("stuff".to_string())); - let id2 = mtt.validate_session(Some("stuff".to_string())); - assert_ne!(id1, id2); - } - - #[test] - fn creates_new_session_if_bad_or_expired() { - let mut mtt = MoreThanText::new(); - let id1 = mtt.validate_session(Some(Uuid::nil().to_string())); - let id2 = mtt.validate_session(Some(Uuid::nil().to_string())); - assert_ne!(id1, id2); - } - - #[test] - fn returns_same_session_id_when_valid() { - let mut mtt = MoreThanText::new(); - let id = mtt.validate_session(None); - let result = mtt.validate_session(Some(id.to_string())); - assert_eq!(result, id); - } } diff --git a/src/main.rs b/src/main.rs index e2bc65e..32a0e40 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,7 +8,7 @@ use axum::{ use clap::Parser; //use morethantext::{ActionType, ErrorType, MoreThanText}; //use morethantext::{MoreThanText, MsgAction, Query}; -use morethantext::MoreThanText; +use morethantext::{MTTError, MoreThanText}; use std::{collections::HashMap, convert::Infallible}; use tokio::{spawn, sync::mpsc::channel}; use tower_cookies::{Cookie, CookieManagerLayer, Cookies}; @@ -91,38 +91,30 @@ async fn mtt_conn( _body: String, ) -> impl IntoResponse { let (tx, mut rx) = channel(1); - /* - let _action = match method { - //Method::GET => MsgAction::Query(Query::new()), - //Method::GET => ActionType::Get, - //Method::POST => ActionType::Add, - //Method::PATCH => ActionType::Update, - _ => unreachable!("reouter should prevent this"), - }; - */ - let _doc = match path.get("document") { - Some(result) => result.clone(), - None => "root".to_string(), - }; spawn(async move { - //tx.send(state.get_document(sess_id.0, action, doc, body)) - tx.send(state.get_document()).await.unwrap(); + match method { + Method::GET => match path.get("document") { + Some(doc) => tx.send(state.get_document(doc, "home")).await.unwrap(), + None => tx.send(state.get_document("page", "home")).await.unwrap(), + }, + _ => unreachable!("reouter should prevent this"), + } }); let reply = rx.recv().await.unwrap(); - /* - let status = match reply.get_error() { - Some(err) => match err { - ErrorType::DocumentAlreadyExists => StatusCode::CONFLICT, - ErrorType::DocumentInvalidRequest => StatusCode::BAD_REQUEST, - ErrorType::DocumentNotFound => StatusCode::NOT_FOUND, - // _ => StatusCode::INTERNAL_SERVER_ERROR, - }, - None => StatusCode::OK, - }; - (status, reply.get_document()) - */ - let status = StatusCode::OK; - (status, reply) + let mut result = "".to_string(); + let mut status = StatusCode::OK; + match reply { + Ok(data) => { + result = data.clone(); + } + Err(err) => { + status = match err { + MTTError::DocumentNotFound(_) => StatusCode::NOT_FOUND, + _ => StatusCode::INTERNAL_SERVER_ERROR, + }; + } + } + (status, result) } #[cfg(test)] @@ -195,7 +187,6 @@ mod servers { } #[tokio::test] - #[ignore] async fn receive_file_not_found() { let uri = "/something"; let app = create_app(MoreThanText::new()).await; diff --git a/tests/lib_document_test.rs b/tests/lib_document_test.rs new file mode 100644 index 0000000..bc24e51 --- /dev/null +++ b/tests/lib_document_test.rs @@ -0,0 +1,23 @@ +use morethantext::{MTTError, MoreThanText}; + +#[test] +fn get_home_page() { + let mtt = MoreThanText::new(); + match mtt.get_document("page", "home") { + Ok(_) => {} + Err(err) => assert!(false, "got error {:?}", err), + } +} + +#[test] +fn errors_on_missing_page() { + let mtt = MoreThanText::new(); + let doc_name = "missing"; + match mtt.get_document(doc_name, "home") { + Ok(data) => assert!(false, "got '{}', should have been not found error", data), + Err(err) => match err { + MTTError::DocumentNotFound(result) => assert_eq!(result, doc_name), + _ => unreachable!("got {:?}, should have been not found", err), + }, + } +} diff --git a/tests/lib_session_test.rs b/tests/lib_session_test.rs new file mode 100644 index 0000000..5f1192b --- /dev/null +++ b/tests/lib_session_test.rs @@ -0,0 +1,38 @@ +use morethantext::MoreThanText; +use uuid::Uuid; + +#[test] +fn are_session_ids_unique() { + let mut mtt = MoreThanText::new(); + let count = 10; + let mut result: Vec = Vec::new(); + for _ in 0..count { + let id = mtt.validate_session(None); + assert!(!result.contains(&id), "found {} in {:?}", id, result); + result.push(id); + } +} + +#[test] +fn bad_session_id_returns_new_id() { + let mut mtt = MoreThanText::new(); + let id1 = mtt.validate_session(Some("stuff".to_string())); + let id2 = mtt.validate_session(Some("stuff".to_string())); + assert_ne!(id1, id2); +} + +#[test] +fn creates_new_session_if_bad_or_expired() { + let mut mtt = MoreThanText::new(); + let id1 = mtt.validate_session(Some(Uuid::nil().to_string())); + let id2 = mtt.validate_session(Some(Uuid::nil().to_string())); + assert_ne!(id1, id2); +} + +#[test] +fn returns_same_session_id_when_valid() { + let mut mtt = MoreThanText::new(); + let id = mtt.validate_session(None); + let result = mtt.validate_session(Some(id.to_string())); + assert_eq!(result, id); +}