From fa1498bb671a71fd9ec514011ab13a4e55d0ee63 Mon Sep 17 00:00:00 2001 From: Philippe Loctaux Date: Sun, 5 Mar 2023 00:42:36 +0100 Subject: [PATCH] tests: testing getting default logo --- crates/ezidam/src/routes/root.rs | 24 ++++++++++++++++++++++++ crates/ezidam/src/tests.rs | 28 ++++++++++++++++++++++++++++ crates/settings/src/lib.rs | 2 +- 3 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 crates/ezidam/src/tests.rs diff --git a/crates/ezidam/src/routes/root.rs b/crates/ezidam/src/routes/root.rs index 5816699..a104971 100644 --- a/crates/ezidam/src/routes/root.rs +++ b/crates/ezidam/src/routes/root.rs @@ -15,6 +15,30 @@ async fn logo(mut db: Connection) -> Result { Ok(FileFromBytes::from(settings.business_logo())) } +#[cfg(test)] +mod test { + use crate::tests::*; + + #[test] + fn logo() { + // Setup http server + let client = setup_rocket_testing(); + + // Make request + let response = client.get(uri!(super::logo)).dispatch(); + assert_eq!(response.status(), Status::Ok); + + // Assert size of logo + let logo_length = response.into_bytes().expect("bytes containing logo").len(); + use settings::DEFAULT_BUSINESS_LOGO; + assert_eq!( + logo_length, + DEFAULT_BUSINESS_LOGO.len(), + "Invalid logo size in bytes, value was `{logo_length}`", + ); + } +} + #[get("/setup")] async fn setup() -> Page { Page::Setup() diff --git a/crates/ezidam/src/tests.rs b/crates/ezidam/src/tests.rs new file mode 100644 index 0000000..46a91f0 --- /dev/null +++ b/crates/ezidam/src/tests.rs @@ -0,0 +1,28 @@ +use crate::rocket_setup; +use rocket::local::blocking::Client; +use rocket::{Build, Rocket}; + +pub use rocket::http::Status; +pub use rocket::uri; + +fn rocket_with_memory_database() -> Rocket { + use rocket::figment::util::map; + use rocket::Config; + + // Custom config + // - rocket defaults + // - from `Rocket.toml` + // - from env variables + // - from code below + let options = map!["url" => ":memory:"]; + let config = Config::figment().merge(("databases", map!["ezidam" => &options])); + + let rocket_builder = rocket::custom(config); + + // Setup server + rocket_setup(rocket_builder) +} + +pub fn setup_rocket_testing() -> Client { + Client::tracked(rocket_with_memory_database()).expect("valid rocket instance") +} diff --git a/crates/settings/src/lib.rs b/crates/settings/src/lib.rs index ef95367..5c03aa4 100644 --- a/crates/settings/src/lib.rs +++ b/crates/settings/src/lib.rs @@ -21,7 +21,7 @@ pub struct Settings { } const DEFAULT_BUSINESS_NAME: &str = "ezidam"; -const DEFAULT_BUSINESS_LOGO: &[u8] = include_bytes!("../../../logo/ezidam.png"); +pub const DEFAULT_BUSINESS_LOGO: &[u8] = include_bytes!("../../../logo/ezidam.png"); impl From for Settings { fn from(db: DatabaseSettings) -> Self {