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 {