diff --git a/rust-lib/flowy-sdk/src/lib.rs b/rust-lib/flowy-sdk/src/lib.rs index c1f2366bae..db7265177e 100644 --- a/rust-lib/flowy-sdk/src/lib.rs +++ b/rust-lib/flowy-sdk/src/lib.rs @@ -1,10 +1,7 @@ mod flowy_server; pub mod module; -use crate::{ - flowy_server::{ArcFlowyServer, MockFlowyServer}, - user_server::MockUserServer, -}; +use crate::flowy_server::{ArcFlowyServer, MockFlowyServer}; use flowy_dispatch::prelude::*; use module::build_modules; pub use module::*; @@ -32,7 +29,7 @@ impl FlowySDK { FlowySDK::init_log(&self.root); tracing::info!("🔥 Root path: {}", self.root); - flowy_infra::kv::KVStore::init(path); + flowy_infra::kv::KVStore::init(&self.root); FlowySDK::init_modules(&self.root, self.server); } diff --git a/rust-lib/flowy-sdk/src/module.rs b/rust-lib/flowy-sdk/src/module.rs index 60551a2bbd..ea427381ed 100644 --- a/rust-lib/flowy-sdk/src/module.rs +++ b/rust-lib/flowy-sdk/src/module.rs @@ -1,7 +1,7 @@ use flowy_dispatch::prelude::Module; use flowy_user::prelude::*; -use crate::{flowy_server::ArcFlowyServer, user_server::MockUserServer}; +use crate::flowy_server::{ArcFlowyServer, MockFlowyServer}; use flowy_database::DBConnection; use flowy_user::errors::UserError; use flowy_workspace::prelude::*; @@ -15,7 +15,7 @@ pub fn build_modules(config: ModuleConfig, server: ArcFlowyServer) -> Vec String { root_dir } -pub trait TesterConfig { - fn auto_sign_in() -> bool { false } +pub struct TestBuilder { + login: Option, + inner: Option>, + pub user_detail: Option, } -pub struct EventTester { +impl TestBuilder +where + Error: FromBytes + Debug, +{ + pub fn new() -> Self { + TestBuilder:: { + login: None, + inner: None, + user_detail: None, + } + } + + pub fn login(mut self) -> Self { + let user_detail = new_user_after_login(); + self.user_detail = Some(user_detail); + self + } + + pub fn logout(self) -> Self { + init_sdk(); + let _ = EventDispatch::sync_send(ModuleRequest::new(SignOut)); + self + } + + pub fn event(mut self, event: E) -> Self + where + E: Eq + Hash + Debug + Clone + Display, + { + self.inner = Some(Tester::::new(event)); + self + } + + pub fn request

(mut self, request: P) -> Self + where + P: ToBytes, + { + let mut inner = self.inner.unwrap(); + self.inner = Some(inner.request(request)); + self + } + + pub fn sync_send(mut self) -> Self { + let inner = self.inner.take().unwrap(); + self.inner = Some(inner.sync_send()); + self + } + + pub fn parse(mut self) -> R + where + R: FromBytes, + { + let inner = self.inner.take().unwrap(); + inner.parse::() + } + + pub fn error(mut self) -> Error { + let inner = self.inner.take().unwrap(); + inner.error() + } +} + +pub struct Tester { inner_request: Option, assert_status_code: Option, response: Option, err_phantom: PhantomData, + user_detail: Option, } -impl EventTester +impl Tester where Error: FromBytes + Debug, { @@ -73,6 +142,7 @@ where assert_status_code: None, response: None, err_phantom: PhantomData, + user_detail: None, } } @@ -97,7 +167,6 @@ where self } - #[allow(dead_code)] pub async fn async_send(mut self) -> Self { let resp = EventDispatch::async_send(self.inner_request.take().unwrap(), |_| Box::pin(async {})) @@ -148,3 +217,23 @@ fn check(response: &EventResponse, status_code: &Option) { assert_eq!(&response.status_code, status_code) } } + +fn new_user_after_login() -> UserDetail { + init_sdk(); + let _ = EventDispatch::sync_send(ModuleRequest::new(SignOut)); + let request = SignInRequest { + email: valid_email(), + password: valid_password(), + }; + + let user_detail = Tester::::new(SignIn) + .request(request) + .sync_send() + .parse::(); + + user_detail +} + +pub(crate) fn valid_email() -> String { "annie@appflowy.io".to_string() } + +pub(crate) fn valid_password() -> String { "HelloWorld!123".to_string() } diff --git a/rust-lib/flowy-user/src/services/user_session/builder.rs b/rust-lib/flowy-user/src/services/user_session/builder.rs index 462e7a57a5..345ba3cd7a 100644 --- a/rust-lib/flowy-user/src/services/user_session/builder.rs +++ b/rust-lib/flowy-user/src/services/user_session/builder.rs @@ -1,4 +1,5 @@ use crate::services::user_session::{user_server::UserServer, UserSession, UserSessionConfig}; +use std::sync::Arc; pub struct UserSessionBuilder { config: Option, @@ -12,7 +13,7 @@ impl UserSessionBuilder { self } - pub fn build(mut self, server: S) -> UserSession + pub fn build(mut self, server: Arc) -> UserSession where S: 'static + UserServer + Send + Sync, { diff --git a/rust-lib/flowy-user/src/services/user_session/user_session.rs b/rust-lib/flowy-user/src/services/user_session/user_session.rs index 871fbb79ea..6bfb862a12 100644 --- a/rust-lib/flowy-user/src/services/user_session/user_session.rs +++ b/rust-lib/flowy-user/src/services/user_session/user_session.rs @@ -7,7 +7,7 @@ use flowy_database::{ }; use flowy_infra::kv::KVStore; use lazy_static::lazy_static; -use std::sync::RwLock; +use std::sync::{Arc, RwLock}; use crate::{ entities::{SignInParams, SignUpParams, UpdateUserParams, UserDetail}, @@ -31,11 +31,11 @@ impl UserSessionConfig { pub struct UserSession { database: UserDB, config: UserSessionConfig, - server: Box, + server: Arc, } impl UserSession { - pub fn new(config: UserSessionConfig, server: R) -> Self + pub fn new(config: UserSessionConfig, server: Arc) -> Self where R: 'static + UserServer + Send + Sync, { @@ -43,7 +43,7 @@ impl UserSession { Self { database: db, config, - server: Box::new(server), + server, } } diff --git a/rust-lib/flowy-user/tests/event/helper.rs b/rust-lib/flowy-user/tests/event/helper.rs index 12bc74614a..0fea574637 100644 --- a/rust-lib/flowy-user/tests/event/helper.rs +++ b/rust-lib/flowy-user/tests/event/helper.rs @@ -1,7 +1,7 @@ -use flowy_test::{EventTester, TesterConfig}; +use flowy_test::{TestBuilder, Tester}; use flowy_user::errors::UserError; -pub type UserEventTester = EventTester; +pub type UserTestBuilder = TestBuilder; pub(crate) fn invalid_email_test_case() -> Vec { // https://gist.github.com/cjaoude/fd9910626629b53c4d25 diff --git a/rust-lib/flowy-user/tests/event/sign_in_test.rs b/rust-lib/flowy-user/tests/event/sign_in_test.rs index f5219964fe..67817f874c 100644 --- a/rust-lib/flowy-user/tests/event/sign_in_test.rs +++ b/rust-lib/flowy-user/tests/event/sign_in_test.rs @@ -6,13 +6,14 @@ use serial_test::*; #[test] #[serial] fn sign_in_success() { - let _ = UserEventTester::new(SignOut).sync_send(); let request = SignInRequest { email: valid_email(), password: valid_password(), }; - let response = UserEventTester::new(SignIn) + let response = UserTestBuilder::new() + .logout() + .event(SignIn) .request(request) .sync_send() .parse::(); @@ -28,7 +29,8 @@ fn sign_in_with_invalid_email() { }; assert_eq!( - UserEventTester::new(SignIn) + UserTestBuilder::new() + .event(SignIn) .request(request) .sync_send() .error() @@ -47,7 +49,8 @@ fn sign_in_with_invalid_password() { }; assert_eq!( - UserEventTester::new(SignIn) + UserTestBuilder::new() + .event(SignIn) .request(request) .sync_send() .error() diff --git a/rust-lib/flowy-user/tests/event/sign_up_test.rs b/rust-lib/flowy-user/tests/event/sign_up_test.rs index bf6f2bc3b1..e08b5dd061 100644 --- a/rust-lib/flowy-user/tests/event/sign_up_test.rs +++ b/rust-lib/flowy-user/tests/event/sign_up_test.rs @@ -6,14 +6,17 @@ use serial_test::*; #[test] #[serial] fn sign_up_success() { - let _ = UserEventTester::new(SignOut).sync_send(); + let _ = UserTestBuilder::new().event(SignOut).sync_send(); let request = SignUpRequest { email: valid_email(), name: valid_name(), password: valid_password(), }; - let _response = UserEventTester::new(SignUp).request(request).sync_send(); + let _response = UserTestBuilder::new() + .event(SignUp) + .request(request) + .sync_send(); // .parse::(); // dbg!(&response); } @@ -28,7 +31,8 @@ fn sign_up_with_invalid_email() { }; assert_eq!( - UserEventTester::new(SignUp) + UserTestBuilder::new() + .event(SignUp) .request(request) .sync_send() .error() @@ -47,7 +51,8 @@ fn sign_up_with_invalid_password() { }; assert_eq!( - UserEventTester::new(SignUp) + UserTestBuilder::new() + .event(SignUp) .request(request) .sync_send() .error() diff --git a/rust-lib/flowy-user/tests/event/user_status_test.rs b/rust-lib/flowy-user/tests/event/user_status_test.rs index 73e3b2581c..b327a1cfa8 100644 --- a/rust-lib/flowy-user/tests/event/user_status_test.rs +++ b/rust-lib/flowy-user/tests/event/user_status_test.rs @@ -1,5 +1,4 @@ use crate::helper::*; - use flowy_user::{errors::UserErrorCode, event::UserEvent::*, prelude::*}; use serial_test::*; @@ -7,8 +6,9 @@ use serial_test::*; #[should_panic] #[serial] fn user_status_not_found_before_login() { - let _ = UserEventTester::new(SignOut).sync_send(); - let _ = UserEventTester::new(GetStatus) + let _ = UserTestBuilder::new() + .logout() + .event(GetStatus) .sync_send() .parse::(); } @@ -16,19 +16,21 @@ fn user_status_not_found_before_login() { #[test] #[serial] fn user_status_did_found_after_login() { - let _ = UserEventTester::new(SignOut).sync_send(); let request = SignInRequest { email: valid_email(), password: valid_password(), }; - let response = UserEventTester::new(SignIn) + let response = UserTestBuilder::new() + .logout() + .event(SignIn) .request(request) .sync_send() .parse::(); dbg!(&response); - let _ = UserEventTester::new(GetStatus) + let _ = UserTestBuilder::new() + .event(GetStatus) .sync_send() .parse::(); } @@ -36,20 +38,7 @@ fn user_status_did_found_after_login() { #[test] #[serial] fn user_update_with_invalid_email() { - let _ = UserEventTester::new(SignOut).sync_send(); - let request = SignInRequest { - email: valid_email(), - password: valid_password(), - }; - - let _ = UserEventTester::new(SignIn) - .request(request) - .sync_send() - .parse::(); - - let user_detail = UserEventTester::new(GetStatus) - .sync_send() - .parse::(); + let user_detail = UserTestBuilder::new().login().user_detail.unwrap(); for email in invalid_email_test_case() { let request = UpdateUserRequest { @@ -61,7 +50,8 @@ fn user_update_with_invalid_email() { }; assert_eq!( - UserEventTester::new(UpdateUser) + UserTestBuilder::new() + .event(UpdateUser) .request(request) .sync_send() .error() diff --git a/rust-lib/flowy-workspace/tests/event/helper.rs b/rust-lib/flowy-workspace/tests/event/helper.rs index 584b8e1f55..58ad37b28d 100644 --- a/rust-lib/flowy-workspace/tests/event/helper.rs +++ b/rust-lib/flowy-workspace/tests/event/helper.rs @@ -1,7 +1,7 @@ -use flowy_test::EventTester; +use flowy_test::TestBuilder; use flowy_workspace::errors::WorkspaceError; -pub type WorkspaceEventTester = EventTester; +pub type WorkspaceTestBuilder = TestBuilder; pub(crate) fn invalid_workspace_name_test_case() -> Vec { vec!["", "1234".repeat(100).as_str()] diff --git a/rust-lib/flowy-workspace/tests/event/workspace_test.rs b/rust-lib/flowy-workspace/tests/event/workspace_test.rs index de13ad0aac..8c00414098 100644 --- a/rust-lib/flowy-workspace/tests/event/workspace_test.rs +++ b/rust-lib/flowy-workspace/tests/event/workspace_test.rs @@ -12,7 +12,8 @@ fn workspace_create_success() { desc: "".to_owned(), }; - let response = WorkspaceEventTester::new(CreateWorkspace) + let response = WorkspaceTestBuilder::new() + .event(CreateWorkspace) .request(request) .sync_send() .parse::(); @@ -28,7 +29,8 @@ fn workspace_create_with_invalid_name_test() { }; assert_eq!( - WorkspaceEventTester::new(CreateWorkspace) + WorkspaceTestBuilder::new() + .event(CreateWorkspace) .request(request) .sync_send() .error()