mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2024-08-30 18:12:39 +00:00
writing code in airport, continue after onboard
This commit is contained in:
parent
e767cc3a01
commit
4354ff0c59
@ -1,5 +1,5 @@
|
|||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn tests() {
|
async fn tests() {
|
||||||
let t = trybuild::TestCases::new();
|
let t = trybuild::TestCases::new();
|
||||||
t.pass("tests/protobuf_enum.rs");
|
// t.pass("tests/protobuf_enum.rs");
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,12 @@
|
|||||||
use crate::{
|
use crate::{
|
||||||
|
byte_trait::FromBytes,
|
||||||
data::Data,
|
data::Data,
|
||||||
errors::DispatchError,
|
errors::{DispatchError, InternalError},
|
||||||
request::{EventRequest, Payload},
|
request::{EventRequest, Payload},
|
||||||
response::Responder,
|
response::Responder,
|
||||||
};
|
};
|
||||||
use derivative::*;
|
use derivative::*;
|
||||||
use std::{fmt, fmt::Formatter};
|
use std::{convert::TryFrom, fmt, fmt::Formatter};
|
||||||
|
|
||||||
#[derive(Clone, Debug, Eq, PartialEq, serde::Serialize)]
|
#[derive(Clone, Debug, Eq, PartialEq, serde::Serialize)]
|
||||||
pub enum StatusCode {
|
pub enum StatusCode {
|
||||||
@ -30,6 +31,24 @@ impl EventResponse {
|
|||||||
error: None,
|
error: None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn parse<T, E>(self) -> Result<Result<T, E>, DispatchError>
|
||||||
|
where
|
||||||
|
T: FromBytes,
|
||||||
|
E: FromBytes,
|
||||||
|
{
|
||||||
|
if self.status_code == StatusCode::Err {
|
||||||
|
match <Data<E>>::try_from(self.payload) {
|
||||||
|
Ok(err) => Ok(Err(err.into_inner())),
|
||||||
|
Err(e) => Err(InternalError::new(e).into()),
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
match <Data<T>>::try_from(self.payload) {
|
||||||
|
Ok(a) => Ok(Ok(a.into_inner())),
|
||||||
|
Err(e) => Err(InternalError::new(e).into()),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl std::fmt::Display for EventResponse {
|
impl std::fmt::Display for EventResponse {
|
||||||
|
@ -112,6 +112,18 @@ where
|
|||||||
let inner = self.inner.take().unwrap();
|
let inner = self.inner.take().unwrap();
|
||||||
inner.error()
|
inner.error()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn assert_error(mut self) -> Self {
|
||||||
|
let inner = self.inner.take().unwrap();
|
||||||
|
self.inner = Some(inner.assert_error());
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn assert_success(mut self) -> Self {
|
||||||
|
let inner = self.inner.take().unwrap();
|
||||||
|
self.inner = Some(inner.assert_success());
|
||||||
|
self
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct Tester<Error> {
|
pub struct Tester<Error> {
|
||||||
@ -167,11 +179,17 @@ where
|
|||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn assert_success(mut self) -> Self {
|
||||||
|
self.assert_status_code = Some(StatusCode::Ok);
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
pub async fn async_send(mut self) -> Self {
|
pub async fn async_send(mut self) -> Self {
|
||||||
|
assert_eq!(self.inner_request.is_some(), true, "must set event");
|
||||||
|
|
||||||
let resp =
|
let resp =
|
||||||
EventDispatch::async_send(self.inner_request.take().unwrap(), |_| Box::pin(async {}))
|
EventDispatch::async_send(self.inner_request.take().unwrap(), |_| Box::pin(async {}))
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
check(&resp, &self.assert_status_code);
|
check(&resp, &self.assert_status_code);
|
||||||
self.response = Some(resp);
|
self.response = Some(resp);
|
||||||
self
|
self
|
||||||
@ -189,14 +207,10 @@ where
|
|||||||
R: FromBytes,
|
R: FromBytes,
|
||||||
{
|
{
|
||||||
let response = self.response.unwrap();
|
let response = self.response.unwrap();
|
||||||
if response.status_code == StatusCode::Err {
|
match response.parse::<R, Error>() {
|
||||||
let error = <Data<Error>>::try_from(response.payload)
|
Ok(Ok(data)) => data,
|
||||||
.unwrap()
|
Ok(Err(e)) => panic!("parse failed: {:?}", e),
|
||||||
.into_inner();
|
Err(e) => panic!("Internal error: {:?}", e),
|
||||||
dbg!(&error);
|
|
||||||
panic!("")
|
|
||||||
} else {
|
|
||||||
<Data<R>>::try_from(response.payload).unwrap().into_inner()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ pub enum UserErrorCode {
|
|||||||
EmailInvalid = 20,
|
EmailInvalid = 20,
|
||||||
#[display(fmt = "Password format is not correct")]
|
#[display(fmt = "Password format is not correct")]
|
||||||
PasswordInvalid = 21,
|
PasswordInvalid = 21,
|
||||||
#[display(fmt = "User is invalid")]
|
#[display(fmt = "User name is invalid")]
|
||||||
UserNameInvalid = 22,
|
UserNameInvalid = 22,
|
||||||
#[display(fmt = "User workspace is invalid")]
|
#[display(fmt = "User workspace is invalid")]
|
||||||
UserWorkspaceInvalid = 23,
|
UserWorkspaceInvalid = 23,
|
||||||
|
@ -12,9 +12,12 @@ use std::sync::{Arc, RwLock};
|
|||||||
use crate::{
|
use crate::{
|
||||||
entities::{SignInParams, SignUpParams, UpdateUserParams, UserDetail},
|
entities::{SignInParams, SignUpParams, UpdateUserParams, UserDetail},
|
||||||
errors::{ErrorBuilder, UserError, UserErrorCode},
|
errors::{ErrorBuilder, UserError, UserErrorCode},
|
||||||
|
event::UserEvent::GetStatus,
|
||||||
services::user_session::{database::UserDB, user_server::UserServer},
|
services::user_session::{database::UserDB, user_server::UserServer},
|
||||||
sql_tables::{User, UserChangeset},
|
sql_tables::{User, UserChangeset},
|
||||||
};
|
};
|
||||||
|
use flowy_dispatch::prelude::{Data, EventDispatch, ModuleRequest};
|
||||||
|
use std::convert::TryFrom;
|
||||||
|
|
||||||
pub struct UserSessionConfig {
|
pub struct UserSessionConfig {
|
||||||
root_dir: String,
|
root_dir: String,
|
||||||
@ -108,8 +111,27 @@ impl UserSession {
|
|||||||
self.database.get_connection(&user_id)
|
self.database.get_connection(&user_id)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn set_current_workspace() {
|
||||||
|
unimplemented!()
|
||||||
|
|
||||||
|
// let request = SignInRequest {
|
||||||
|
// email: valid_email(),
|
||||||
|
// password: valid_password(),
|
||||||
|
// };
|
||||||
|
//
|
||||||
|
// let user_detail = Tester::<UserError>::new(SignIn)
|
||||||
|
// .request(request)
|
||||||
|
// .sync_send()
|
||||||
|
// .parse::<UserDetail>();
|
||||||
|
//
|
||||||
|
// user_detail
|
||||||
|
}
|
||||||
|
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
pub fn get_current_workspace(&self) -> Result<String, UserError> {
|
pub fn get_current_workspace(&self) -> Result<String, UserError> {
|
||||||
|
// let response = EventDispatch::sync_send(ModuleRequest::new(GetStatus));
|
||||||
|
// let user_detail =
|
||||||
|
// <Data<UserDetail>>::try_from(response.payload).unwrap().into_inner();
|
||||||
let user_id = get_current_user_id()?;
|
let user_id = get_current_user_id()?;
|
||||||
let conn = self.get_db_connection()?;
|
let conn = self.get_db_connection()?;
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
mod helper;
|
mod helper;
|
||||||
mod sign_in_test;
|
mod sign_in_test;
|
||||||
mod sign_up_test;
|
mod sign_up_test;
|
||||||
|
mod user_detail_test;
|
||||||
mod user_status_test;
|
mod user_status_test;
|
||||||
|
140
rust-lib/flowy-user/tests/event/user_detail_test.rs
Normal file
140
rust-lib/flowy-user/tests/event/user_detail_test.rs
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
use crate::helper::*;
|
||||||
|
use flowy_user::{errors::UserErrorCode, event::UserEvent::*, prelude::*};
|
||||||
|
use serial_test::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[serial]
|
||||||
|
fn user_update_with_name() {
|
||||||
|
let user_detail = UserTestBuilder::new().login().user_detail.unwrap();
|
||||||
|
let new_name = "hello_world".to_owned();
|
||||||
|
let request = UpdateUserRequest {
|
||||||
|
id: user_detail.id.clone(),
|
||||||
|
name: Some(new_name.clone()),
|
||||||
|
email: None,
|
||||||
|
workspace: None,
|
||||||
|
password: None,
|
||||||
|
};
|
||||||
|
|
||||||
|
let user_detail = UserTestBuilder::new()
|
||||||
|
.event(UpdateUser)
|
||||||
|
.request(request)
|
||||||
|
.sync_send()
|
||||||
|
.parse::<UserDetail>();
|
||||||
|
|
||||||
|
assert_eq!(user_detail.name, new_name,);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[serial]
|
||||||
|
fn user_update_with_email() {
|
||||||
|
let user_detail = UserTestBuilder::new().login().user_detail.unwrap();
|
||||||
|
let new_email = "123@gmai.com".to_owned();
|
||||||
|
let request = UpdateUserRequest {
|
||||||
|
id: user_detail.id.clone(),
|
||||||
|
name: None,
|
||||||
|
email: Some(new_email.clone()),
|
||||||
|
workspace: None,
|
||||||
|
password: None,
|
||||||
|
};
|
||||||
|
|
||||||
|
let user_detail = UserTestBuilder::new()
|
||||||
|
.event(UpdateUser)
|
||||||
|
.request(request)
|
||||||
|
.sync_send()
|
||||||
|
.parse::<UserDetail>();
|
||||||
|
|
||||||
|
assert_eq!(user_detail.email, new_email,);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[serial]
|
||||||
|
fn user_update_with_password() {
|
||||||
|
let user_detail = UserTestBuilder::new().login().user_detail.unwrap();
|
||||||
|
let new_password = "H123world!".to_owned();
|
||||||
|
let request = UpdateUserRequest {
|
||||||
|
id: user_detail.id.clone(),
|
||||||
|
name: None,
|
||||||
|
email: None,
|
||||||
|
workspace: None,
|
||||||
|
password: Some(new_password.clone()),
|
||||||
|
};
|
||||||
|
|
||||||
|
let _ = UserTestBuilder::new()
|
||||||
|
.event(UpdateUser)
|
||||||
|
.request(request)
|
||||||
|
.sync_send()
|
||||||
|
.assert_success();
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[serial]
|
||||||
|
fn user_update_with_invalid_email() {
|
||||||
|
let user_detail = UserTestBuilder::new().login().user_detail.unwrap();
|
||||||
|
for email in invalid_email_test_case() {
|
||||||
|
let request = UpdateUserRequest {
|
||||||
|
id: user_detail.id.clone(),
|
||||||
|
name: None,
|
||||||
|
email: Some(email),
|
||||||
|
workspace: None,
|
||||||
|
password: None,
|
||||||
|
};
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
UserTestBuilder::new()
|
||||||
|
.event(UpdateUser)
|
||||||
|
.request(request)
|
||||||
|
.sync_send()
|
||||||
|
.error()
|
||||||
|
.code,
|
||||||
|
UserErrorCode::EmailInvalid
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[serial]
|
||||||
|
fn user_update_with_invalid_password() {
|
||||||
|
let user_detail = UserTestBuilder::new().login().user_detail.unwrap();
|
||||||
|
for password in invalid_password_test_case() {
|
||||||
|
let request = UpdateUserRequest {
|
||||||
|
id: user_detail.id.clone(),
|
||||||
|
name: None,
|
||||||
|
email: None,
|
||||||
|
workspace: None,
|
||||||
|
password: Some(password),
|
||||||
|
};
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
UserTestBuilder::new()
|
||||||
|
.event(UpdateUser)
|
||||||
|
.request(request)
|
||||||
|
.sync_send()
|
||||||
|
.error()
|
||||||
|
.code,
|
||||||
|
UserErrorCode::PasswordInvalid
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[serial]
|
||||||
|
fn user_update_with_invalid_name() {
|
||||||
|
let user_detail = UserTestBuilder::new().login().user_detail.unwrap();
|
||||||
|
let request = UpdateUserRequest {
|
||||||
|
id: user_detail.id.clone(),
|
||||||
|
name: Some("".to_string()),
|
||||||
|
email: None,
|
||||||
|
workspace: None,
|
||||||
|
password: None,
|
||||||
|
};
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
UserTestBuilder::new()
|
||||||
|
.event(UpdateUser)
|
||||||
|
.request(request)
|
||||||
|
.sync_send()
|
||||||
|
.error()
|
||||||
|
.code,
|
||||||
|
UserErrorCode::UserNameInvalid
|
||||||
|
);
|
||||||
|
}
|
@ -5,7 +5,7 @@ use serial_test::*;
|
|||||||
#[test]
|
#[test]
|
||||||
#[should_panic]
|
#[should_panic]
|
||||||
#[serial]
|
#[serial]
|
||||||
fn user_status_not_found_before_login() {
|
fn user_status_get_failed_before_login() {
|
||||||
let _ = UserTestBuilder::new()
|
let _ = UserTestBuilder::new()
|
||||||
.logout()
|
.logout()
|
||||||
.event(GetStatus)
|
.event(GetStatus)
|
||||||
@ -15,7 +15,7 @@ fn user_status_not_found_before_login() {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
#[serial]
|
#[serial]
|
||||||
fn user_status_did_found_after_login() {
|
fn user_status_get_success_after_login() {
|
||||||
let request = SignInRequest {
|
let request = SignInRequest {
|
||||||
email: valid_email(),
|
email: valid_email(),
|
||||||
password: valid_password(),
|
password: valid_password(),
|
||||||
@ -34,29 +34,3 @@ fn user_status_did_found_after_login() {
|
|||||||
.sync_send()
|
.sync_send()
|
||||||
.parse::<UserDetail>();
|
.parse::<UserDetail>();
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
#[serial]
|
|
||||||
fn user_update_with_invalid_email() {
|
|
||||||
let user_detail = UserTestBuilder::new().login().user_detail.unwrap();
|
|
||||||
|
|
||||||
for email in invalid_email_test_case() {
|
|
||||||
let request = UpdateUserRequest {
|
|
||||||
id: user_detail.id.clone(),
|
|
||||||
name: None,
|
|
||||||
email: Some(email),
|
|
||||||
workspace: None,
|
|
||||||
password: None,
|
|
||||||
};
|
|
||||||
|
|
||||||
assert_eq!(
|
|
||||||
UserTestBuilder::new()
|
|
||||||
.event(UpdateUser)
|
|
||||||
.request(request)
|
|
||||||
.sync_send()
|
|
||||||
.error()
|
|
||||||
.code,
|
|
||||||
UserErrorCode::EmailInvalid
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -21,6 +21,8 @@ impl WorkspaceController {
|
|||||||
.values(workspace)
|
.values(workspace)
|
||||||
.execute(&*conn)?;
|
.execute(&*conn)?;
|
||||||
|
|
||||||
|
self.user.set_current_workspace(&detail.id);
|
||||||
|
|
||||||
Ok(detail)
|
Ok(detail)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user