From 0c84d679520754c07bdec0be65639f349cdad64f Mon Sep 17 00:00:00 2001 From: Sebastian Pravda Date: Wed, 26 Oct 2022 19:29:45 +0200 Subject: [PATCH 1/4] chore: add serde_json (for easier testing) remove mock test --- core/Cargo.toml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/core/Cargo.toml b/core/Cargo.toml index ad9a9b0..1927fee 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -5,6 +5,7 @@ edition = "2021" [dependencies] serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" portfolio-entity = { path = "../entity" } rand = "0.8.5" argon2 = "0.4.1" @@ -21,7 +22,4 @@ features = [ ] [dev-dependencies] -tokio = "1.21.2" - -[features] -mock = ["sea-orm/mock"] +tokio = "1.21.2" \ No newline at end of file From 1262b99781de85f6b112e1af22d27b05a6c31a82 Mon Sep 17 00:00:00 2001 From: Sebastian Pravda Date: Wed, 26 Oct 2022 19:30:35 +0200 Subject: [PATCH 2/4] feat: candidate service tests --- core/tests/candidate_test.rs | 48 ++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 core/tests/candidate_test.rs diff --git a/core/tests/candidate_test.rs b/core/tests/candidate_test.rs new file mode 100644 index 0000000..6bfeb24 --- /dev/null +++ b/core/tests/candidate_test.rs @@ -0,0 +1,48 @@ +use entity::candidate; +use portfolio_core::{services::candidate_service::{CandidateService}, Mutation, crypto, token::{self}}; +use sea_orm::{DbConn, Database, sea_query::TableCreateStatement, DbBackend, Schema, ConnectionTrait}; +use serde_json::json; + +#[cfg(test)] +async fn get_memory_sqlite_connection() -> DbConn { + let base_url = "sqlite::memory:"; + let db: DbConn = Database::connect(base_url).await.unwrap(); + + let schema = Schema::new(DbBackend::Sqlite); + let stmt: TableCreateStatement = schema.create_table_from_entity(candidate::Entity); + db.execute(db.get_database_backend().build(&stmt)).await.unwrap(); + db +} + +#[tokio::test] +async fn test_create_candidate() { + let db = get_memory_sqlite_connection().await; + + let form = serde_json::from_value(json!({ + "application": 5555555, + })).unwrap(); + + let candidate = Mutation::create_candidate(&db, form, &"Tajny_kod".to_string()).await.unwrap(); + + assert_eq!(candidate.application, 5555555); + assert_ne!(candidate.code, "Tajny_kod".to_string()); + assert!(crypto::verify_password("Tajny_kod", &*candidate.code).ok().unwrap()); +} + + +#[tokio::test] +async fn test_candidate_jwt() { + let db = &get_memory_sqlite_connection().await; + + let form = serde_json::from_value(json!({ + "application": 5555555, + })).unwrap(); + + let candidate = Mutation::create_candidate(&db, form, &"Tajny_kod".to_string()).await.unwrap(); + + let jwt = CandidateService::login(db, 5555555, "Tajny_kod".to_string()).await.ok().unwrap(); + + let claims = token::decode_candidate_token(jwt).ok().unwrap().claims; + + assert_eq!(claims.application_id, candidate.application); +} \ No newline at end of file From 37c418d8cd9abef8fbda0fc49964f408fa90b0f3 Mon Sep 17 00:00:00 2001 From: Sebastian Pravda Date: Fri, 28 Oct 2022 12:16:22 +0200 Subject: [PATCH 3/4] refactor: candidate tests location --- core/src/services/candidate_service.rs | 55 ++++++++++++++++++++++++++ core/tests/candidate_test.rs | 48 ---------------------- 2 files changed, 55 insertions(+), 48 deletions(-) delete mode 100644 core/tests/candidate_test.rs diff --git a/core/src/services/candidate_service.rs b/core/src/services/candidate_service.rs index 3ba2e8b..8d75457 100644 --- a/core/src/services/candidate_service.rs +++ b/core/src/services/candidate_service.rs @@ -41,3 +41,58 @@ impl CandidateService { Ok(candidate) } } + + + +#[cfg(test)] +mod tests { + use entity::candidate; + use sea_orm::{DbConn, Database, sea_query::TableCreateStatement, DbBackend, Schema, ConnectionTrait}; + use serde_json::json; + + use crate::{crypto, Mutation, services::candidate_service::CandidateService, token}; + + #[cfg(test)] + async fn get_memory_sqlite_connection() -> DbConn { + let base_url = "sqlite::memory:"; + let db: DbConn = Database::connect(base_url).await.unwrap(); + + let schema = Schema::new(DbBackend::Sqlite); + let stmt: TableCreateStatement = schema.create_table_from_entity(candidate::Entity); + db.execute(db.get_database_backend().build(&stmt)).await.unwrap(); + db + } + + #[tokio::test] + async fn test_create_candidate() { + let db = get_memory_sqlite_connection().await; + + let form = serde_json::from_value(json!({ + "application": 5555555, + })).unwrap(); + + let candidate = Mutation::create_candidate(&db, form, &"Tajny_kod".to_string()).await.unwrap(); + + assert_eq!(candidate.application, 5555555); + assert_ne!(candidate.code, "Tajny_kod".to_string()); + assert!(crypto::verify_password("Tajny_kod", &*candidate.code).ok().unwrap()); + } + + + #[tokio::test] + async fn test_candidate_jwt() { + let db = &get_memory_sqlite_connection().await; + + let form = serde_json::from_value(json!({ + "application": 5555555, + })).unwrap(); + + let candidate = Mutation::create_candidate(&db, form, &"Tajny_kod".to_string()).await.unwrap(); + + let jwt = CandidateService::login(db, 5555555, "Tajny_kod".to_string()).await.ok().unwrap(); + + let claims = token::decode_candidate_token(jwt).ok().unwrap().claims; + + assert_eq!(claims.application_id, candidate.application); + } +} \ No newline at end of file diff --git a/core/tests/candidate_test.rs b/core/tests/candidate_test.rs deleted file mode 100644 index 6bfeb24..0000000 --- a/core/tests/candidate_test.rs +++ /dev/null @@ -1,48 +0,0 @@ -use entity::candidate; -use portfolio_core::{services::candidate_service::{CandidateService}, Mutation, crypto, token::{self}}; -use sea_orm::{DbConn, Database, sea_query::TableCreateStatement, DbBackend, Schema, ConnectionTrait}; -use serde_json::json; - -#[cfg(test)] -async fn get_memory_sqlite_connection() -> DbConn { - let base_url = "sqlite::memory:"; - let db: DbConn = Database::connect(base_url).await.unwrap(); - - let schema = Schema::new(DbBackend::Sqlite); - let stmt: TableCreateStatement = schema.create_table_from_entity(candidate::Entity); - db.execute(db.get_database_backend().build(&stmt)).await.unwrap(); - db -} - -#[tokio::test] -async fn test_create_candidate() { - let db = get_memory_sqlite_connection().await; - - let form = serde_json::from_value(json!({ - "application": 5555555, - })).unwrap(); - - let candidate = Mutation::create_candidate(&db, form, &"Tajny_kod".to_string()).await.unwrap(); - - assert_eq!(candidate.application, 5555555); - assert_ne!(candidate.code, "Tajny_kod".to_string()); - assert!(crypto::verify_password("Tajny_kod", &*candidate.code).ok().unwrap()); -} - - -#[tokio::test] -async fn test_candidate_jwt() { - let db = &get_memory_sqlite_connection().await; - - let form = serde_json::from_value(json!({ - "application": 5555555, - })).unwrap(); - - let candidate = Mutation::create_candidate(&db, form, &"Tajny_kod".to_string()).await.unwrap(); - - let jwt = CandidateService::login(db, 5555555, "Tajny_kod".to_string()).await.ok().unwrap(); - - let claims = token::decode_candidate_token(jwt).ok().unwrap().claims; - - assert_eq!(claims.application_id, candidate.application); -} \ No newline at end of file From b82092e323190da220077ff304da83d3eeb713d3 Mon Sep 17 00:00:00 2001 From: Sebastian Pravda Date: Fri, 28 Oct 2022 12:39:02 +0200 Subject: [PATCH 4/4] feat: find_candidate_by_id_test --- core/src/query.rs | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/core/src/query.rs b/core/src/query.rs index 72aa09f..a4e4236 100644 --- a/core/src/query.rs +++ b/core/src/query.rs @@ -8,3 +8,43 @@ impl Query { Candidate::find_by_id(id).one(db).await } } + +#[cfg(test)] +mod tests { + use sea_orm::{DbConn, Set, ActiveModelTrait}; + use entity::candidate; + use sea_orm::{Schema, Database, DbBackend, sea_query::TableCreateStatement, ConnectionTrait}; + + use crate::Query; + + #[cfg(test)] + async fn get_memory_sqlite_connection() -> DbConn { + let base_url = "sqlite::memory:"; + let db: DbConn = Database::connect(base_url).await.unwrap(); + + let schema = Schema::new(DbBackend::Sqlite); + let stmt: TableCreateStatement = schema.create_table_from_entity(candidate::Entity); + db.execute(db.get_database_backend().build(&stmt)).await.unwrap(); + db + } + + #[tokio::test] + async fn test_find_candidate_by_id() { + let db = get_memory_sqlite_connection().await; + let candidate = candidate::ActiveModel { + application: Set(103158), + code: Set("test".to_string()), + public_key: Set("test".to_string()), + private_key: Set("test".to_string()), + created_at: Set(chrono::offset::Local::now().naive_local()), + updated_at: Set(chrono::offset::Local::now().naive_local()), + ..Default::default() + } + .insert(&db) + .await + .unwrap(); + + let candidate = Query::find_candidate_by_id(&db, candidate.application).await.unwrap(); + assert!(candidate.is_some()); + } +} \ No newline at end of file