From b781071b4e746a827b3fd70c8ca72287a9938629 Mon Sep 17 00:00:00 2001 From: Antoine Gersant Date: Mon, 12 Nov 2018 22:31:43 -0800 Subject: [PATCH] Got rid of raw json strings in unit tests --- src/api.rs | 8 +-- src/api_tests.rs | 164 +++++++++++++++++++++++++---------------------- 2 files changed, 90 insertions(+), 82 deletions(-) diff --git a/src/api.rs b/src/api.rs index 5390378..ddc0368 100644 --- a/src/api.rs +++ b/src/api.rs @@ -217,10 +217,10 @@ fn trigger_index( Ok(()) } -#[derive(Deserialize)] -struct AuthCredentials { - username: String, - password: String, +#[derive(Serialize, Deserialize)] +pub struct AuthCredentials { + pub username: String, + pub password: String, } #[derive(Serialize)] diff --git a/src/api_tests.rs b/src/api_tests.rs index da4e92b..839f4b1 100644 --- a/src/api_tests.rs +++ b/src/api_tests.rs @@ -69,27 +69,32 @@ fn get_test_environment(db_name: &str) -> TestEnvironment { } fn complete_initial_setup(client: &Client) { - let body = format!( - r#" - {{ "users": [{{ "name": "{}", "password": "{}", "admin": true }}] - , "mount_dirs": [{{ "name": "{}", "source": "{}" }}] - }}"#, - TEST_USERNAME, TEST_PASSWORD, TEST_MOUNT_NAME, TEST_MOUNT_SOURCE - ); - + let configuration = config::Config { + album_art_pattern: None, + prefix_url: None, + reindex_every_n_seconds: None, + ydns: None, + users: Some(vec![config::ConfigUser { + name: TEST_USERNAME.into(), + password: TEST_PASSWORD.into(), + admin: true, + }]), + mount_dirs: Some(vec![vfs::MountPoint { + name: TEST_MOUNT_NAME.into(), + source: TEST_MOUNT_SOURCE.into(), + }]), + }; + let body = serde_json::to_string(&configuration).unwrap(); let response = client.put("/api/settings").body(&body).dispatch(); assert_eq!(response.status(), Status::Ok); } fn do_auth(client: &Client) { - let body = format!( - r#" - {{ "username": "{}" - , "password": "{}" - }}"#, - TEST_USERNAME, TEST_PASSWORD - ); - + let credentials = api::AuthCredentials { + username: TEST_USERNAME.into(), + password: TEST_PASSWORD.into(), + }; + let body = serde_json::to_string(&credentials).unwrap(); let response = client.post("/api/auth").body(body).dispatch(); assert_eq!(response.status(), Status::Ok); } @@ -183,65 +188,62 @@ fn settings() { ); } - client - .put("/api/settings") - .body( - r#" - { "users": [ { "name": "test_user", "password": "test_password", "admin": true } - , { "name": "other_user", "password": "other_password", "admin": false } - ] - , "mount_dirs": [ { "name": "collection", "source": "test/collection" } - , { "name": "more_music", "source": "test/collection" } - ] - , "album_art_pattern": "my_pattern" - , "reindex_every_n_seconds": 3600 - , "prefix_url": "my_prefix" - , "ydns": { "host": "my_host", "username": "my_username", "password": "my_password" } - }"#, - ) - .dispatch(); + let mut configuration = config::Config { + album_art_pattern: Some("my_pattern".to_owned()), + reindex_every_n_seconds: Some(3600), + mount_dirs: Some(vec![ + vfs::MountPoint { + name: TEST_MOUNT_NAME.into(), + source: TEST_MOUNT_SOURCE.into(), + }, + vfs::MountPoint { + name: "more_music".into(), + source: "test/collection".into(), + }, + ]), + prefix_url: Some("my_prefix".to_owned()), + users: Some(vec![ + config::ConfigUser { + name: "test_user".into(), + password: "some_password".into(), + admin: true, + }, + config::ConfigUser { + name: "other_user".into(), + password: "some_other_password".into(), + admin: false, + }, + ]), + ydns: Some(ddns::DDNSConfig { + host: "my_host".into(), + username: "my_username".into(), + password: "my_password".into(), + }), + }; + + let body = serde_json::to_string(&configuration).unwrap(); + + configuration.users = Some(vec![ + config::ConfigUser { + name: "test_user".into(), + password: "".into(), + admin: true, + }, + config::ConfigUser { + name: "other_user".into(), + password: "".into(), + admin: false, + }, + ]); + + client.put("/api/settings").body(body).dispatch(); { let mut response = client.get("/api/settings").dispatch(); assert_eq!(response.status(), Status::Ok); let response_body = response.body_string().unwrap(); let response_json: config::Config = serde_json::from_str(&response_body).unwrap(); - - assert_eq!( - response_json, - config::Config { - album_art_pattern: Some("my_pattern".to_owned()), - reindex_every_n_seconds: Some(3600), - mount_dirs: Some(vec![ - vfs::MountPoint { - name: TEST_MOUNT_NAME.into(), - source: TEST_MOUNT_SOURCE.into() - }, - vfs::MountPoint { - name: "more_music".into(), - source: "test/collection".into() - } - ]), - prefix_url: Some("my_prefix".to_owned()), - users: Some(vec![ - config::ConfigUser { - name: "test_user".into(), - password: "".into(), - admin: true - }, - config::ConfigUser { - name: "other_user".into(), - password: "".into(), - admin: false - } - ]), - ydns: Some(ddns::DDNSConfig { - host: "my_host".into(), - username: "my_username".into(), - password: "my_password".into() - }), - } - ); + assert_eq!(response_json, configuration); } } @@ -289,29 +291,35 @@ fn auth() { complete_initial_setup(client); { + let credentials = api::AuthCredentials { + username: "garbage".into(), + password: "garbage".into(), + }; let response = client .post("/api/auth") - .body(r#"{"username": "garbage", "password": "garbage"}"#) + .body(serde_json::to_string(&credentials).unwrap()) .dispatch(); assert_eq!(response.status(), Status::Unauthorized); } { + let credentials = api::AuthCredentials { + username: TEST_USERNAME.into(), + password: "garbage".into(), + }; let response = client .post("/api/auth") - .body(format!( - r#"{{"username": "{}", "password": "garbage"}}"#, - TEST_USERNAME - )) + .body(serde_json::to_string(&credentials).unwrap()) .dispatch(); assert_eq!(response.status(), Status::Unauthorized); } { + let credentials = api::AuthCredentials { + username: TEST_USERNAME.into(), + password: TEST_PASSWORD.into(), + }; let response = client .post("/api/auth") - .body(format!( - r#"{{"username": "{}", "password": "{}"}}"#, - TEST_USERNAME, TEST_PASSWORD - )) + .body(serde_json::to_string(&credentials).unwrap()) .dispatch(); assert_eq!(response.status(), Status::Ok); assert_eq!(response.cookies()[0].name(), "session");