helper.rs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. use bytes::Bytes;
  2. use flowy_dispatch::prelude::{EventDispatch, ModuleRequest, ToBytes};
  3. use flowy_infra::{kv::KV, uuid};
  4. use flowy_user::{
  5. entities::{SignInRequest, SignUpRequest, UserProfile},
  6. errors::UserError,
  7. event::UserEvent::{SignIn, SignOut, SignUp},
  8. };
  9. use flowy_workspace::{
  10. entities::workspace::{CreateWorkspaceRequest, QueryWorkspaceRequest, Workspace},
  11. errors::WorkspaceError,
  12. event::WorkspaceEvent::{CreateWorkspace, OpenWorkspace},
  13. };
  14. use std::{fs, path::PathBuf, sync::Arc};
  15. pub fn root_dir() -> String {
  16. // https://doc.rust-lang.org/cargo/reference/environment-variables.html
  17. let manifest_dir = std::env::var("CARGO_MANIFEST_DIR").unwrap_or("./".to_owned());
  18. let mut path_buf = fs::canonicalize(&PathBuf::from(&manifest_dir)).unwrap();
  19. path_buf.pop(); // rust-lib
  20. path_buf.push("flowy-test");
  21. path_buf.push("temp");
  22. path_buf.push("flowy");
  23. let root_dir = path_buf.to_str().unwrap().to_string();
  24. if !std::path::Path::new(&root_dir).exists() {
  25. std::fs::create_dir_all(&root_dir).unwrap();
  26. }
  27. root_dir
  28. }
  29. pub fn random_email() -> String { format!("{}@appflowy.io", uuid()) }
  30. pub fn login_email() -> String { "[email protected]".to_string() }
  31. pub fn login_password() -> String { "HelloWorld!123".to_string() }
  32. const DEFAULT_WORKSPACE_NAME: &'static str = "My workspace";
  33. const DEFAULT_WORKSPACE_DESC: &'static str = "This is your first workspace";
  34. const DEFAULT_WORKSPACE: &'static str = "Default_Workspace";
  35. #[allow(dead_code)]
  36. pub(crate) fn create_default_workspace_if_need(dispatch: Arc<EventDispatch>, user_id: &str) -> Result<(), UserError> {
  37. let key = format!("{}{}", user_id, DEFAULT_WORKSPACE);
  38. if KV::get_bool(&key).unwrap_or(false) {
  39. return Err(UserError::internal());
  40. }
  41. KV::set_bool(&key, true);
  42. let payload: Bytes = CreateWorkspaceRequest {
  43. name: DEFAULT_WORKSPACE_NAME.to_string(),
  44. desc: DEFAULT_WORKSPACE_DESC.to_string(),
  45. }
  46. .into_bytes()
  47. .unwrap();
  48. let request = ModuleRequest::new(CreateWorkspace).payload(payload);
  49. let result = EventDispatch::sync_send(dispatch.clone(), request)
  50. .parse::<Workspace, WorkspaceError>()
  51. .map_err(|e| UserError::internal().context(e))?;
  52. let workspace = result.map_err(|e| UserError::internal().context(e))?;
  53. let query: Bytes = QueryWorkspaceRequest {
  54. workspace_id: Some(workspace.id.clone()),
  55. }
  56. .into_bytes()
  57. .unwrap();
  58. let request = ModuleRequest::new(OpenWorkspace).payload(query);
  59. let _result = EventDispatch::sync_send(dispatch.clone(), request)
  60. .parse::<Workspace, WorkspaceError>()
  61. .unwrap()
  62. .unwrap();
  63. Ok(())
  64. }
  65. pub struct SignUpContext {
  66. pub user_profile: UserProfile,
  67. pub password: String,
  68. }
  69. pub fn sign_up(dispatch: Arc<EventDispatch>) -> SignUpContext {
  70. let password = login_password();
  71. let payload = SignUpRequest {
  72. email: random_email(),
  73. name: "app flowy".to_string(),
  74. password: password.clone(),
  75. }
  76. .into_bytes()
  77. .unwrap();
  78. let request = ModuleRequest::new(SignUp).payload(payload);
  79. let user_profile = EventDispatch::sync_send(dispatch.clone(), request)
  80. .parse::<UserProfile, UserError>()
  81. .unwrap()
  82. .unwrap();
  83. SignUpContext { user_profile, password }
  84. }
  85. pub async fn async_sign_up(dispatch: Arc<EventDispatch>) -> SignUpContext {
  86. let password = login_password();
  87. let payload = SignUpRequest {
  88. email: random_email(),
  89. name: "app flowy".to_string(),
  90. password: password.clone(),
  91. }
  92. .into_bytes()
  93. .unwrap();
  94. let request = ModuleRequest::new(SignUp).payload(payload);
  95. let user_profile = EventDispatch::async_send(dispatch.clone(), request)
  96. .await
  97. .parse::<UserProfile, UserError>()
  98. .unwrap()
  99. .unwrap();
  100. // let _ = create_default_workspace_if_need(dispatch.clone(), &user_profile.id);
  101. SignUpContext { user_profile, password }
  102. }
  103. #[allow(dead_code)]
  104. fn sign_in(dispatch: Arc<EventDispatch>) -> UserProfile {
  105. let payload = SignInRequest {
  106. email: login_email(),
  107. password: login_password(),
  108. name: "rust".to_owned(),
  109. }
  110. .into_bytes()
  111. .unwrap();
  112. let request = ModuleRequest::new(SignIn).payload(payload);
  113. let user_profile = EventDispatch::sync_send(dispatch, request)
  114. .parse::<UserProfile, UserError>()
  115. .unwrap()
  116. .unwrap();
  117. user_profile
  118. }
  119. #[allow(dead_code)]
  120. fn logout(dispatch: Arc<EventDispatch>) { let _ = EventDispatch::sync_send(dispatch, ModuleRequest::new(SignOut)); }