workspace.rs 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. use crate::prelude::*;
  2. use flowy_document::entities::doc::Doc;
  3. use flowy_workspace::{
  4. entities::{app::*, view::*, workspace::*},
  5. event::WorkspaceEvent::*,
  6. };
  7. pub struct WorkspaceTest {
  8. pub sdk: FlowyTestSDK,
  9. pub workspace: Workspace,
  10. }
  11. impl WorkspaceTest {
  12. pub async fn new() -> Self {
  13. let test = FlowyTest::setup();
  14. let _ = test.init_user().await;
  15. let workspace = create_workspace(&test.sdk, "Workspace", "").await;
  16. open_workspace(&test.sdk, &workspace.id).await;
  17. Self {
  18. sdk: test.sdk,
  19. workspace,
  20. }
  21. }
  22. }
  23. pub struct AppTest {
  24. pub sdk: FlowyTestSDK,
  25. pub workspace: Workspace,
  26. pub app: App,
  27. }
  28. impl AppTest {
  29. pub async fn new() -> Self {
  30. let test = FlowyTest::setup();
  31. let _ = test.init_user().await;
  32. let workspace = create_workspace(&test.sdk, "Workspace", "").await;
  33. open_workspace(&test.sdk, &workspace.id).await;
  34. let app = create_app(&test.sdk, "App", "AppFlowy Github Project", &workspace.id).await;
  35. Self {
  36. sdk: test.sdk,
  37. workspace,
  38. app,
  39. }
  40. }
  41. pub async fn move_app_to_trash(&self) {
  42. let request = UpdateAppRequest {
  43. app_id: self.app.id.clone(),
  44. name: None,
  45. desc: None,
  46. color_style: None,
  47. is_trash: Some(true),
  48. };
  49. update_app(&self.sdk, request).await;
  50. }
  51. }
  52. pub struct ViewTest {
  53. pub sdk: FlowyTestSDK,
  54. pub workspace: Workspace,
  55. pub app: App,
  56. pub view: View,
  57. }
  58. impl ViewTest {
  59. pub async fn new(test: &FlowyTest) -> Self {
  60. let workspace = create_workspace(&test.sdk, "Workspace", "").await;
  61. open_workspace(&test.sdk, &workspace.id).await;
  62. let app = create_app(&test.sdk, "App", "AppFlowy Github Project", &workspace.id).await;
  63. let view = create_view(&test.sdk, &app.id).await;
  64. Self {
  65. sdk: test.sdk.clone(),
  66. workspace,
  67. app,
  68. view,
  69. }
  70. }
  71. pub async fn move_view_to_trash(&self) {
  72. let request = UpdateViewRequest {
  73. view_id: self.view.id.clone(),
  74. name: None,
  75. desc: None,
  76. thumbnail: None,
  77. is_trash: Some(true),
  78. };
  79. update_view(&self.sdk, request).await;
  80. }
  81. }
  82. pub fn invalid_workspace_name_test_case() -> Vec<String> {
  83. vec!["", "1234".repeat(100).as_str()]
  84. .iter()
  85. .map(|s| s.to_string())
  86. .collect::<Vec<_>>()
  87. }
  88. pub async fn create_workspace(sdk: &FlowyTestSDK, name: &str, desc: &str) -> Workspace {
  89. let request = CreateWorkspaceRequest {
  90. name: name.to_owned(),
  91. desc: desc.to_owned(),
  92. };
  93. let workspace = FlowyWorkspaceTest::new(sdk.clone())
  94. .event(CreateWorkspace)
  95. .request(request)
  96. .async_send()
  97. .await
  98. .parse::<Workspace>();
  99. workspace
  100. }
  101. async fn open_workspace(sdk: &FlowyTestSDK, workspace_id: &str) {
  102. let request = QueryWorkspaceRequest {
  103. workspace_id: Some(workspace_id.to_owned()),
  104. };
  105. let _ = FlowyWorkspaceTest::new(sdk.clone())
  106. .event(OpenWorkspace)
  107. .request(request)
  108. .async_send()
  109. .await;
  110. }
  111. pub fn read_workspace(sdk: &FlowyTestSDK, request: QueryWorkspaceRequest) -> Option<Workspace> {
  112. let mut repeated_workspace = FlowyWorkspaceTest::new(sdk.clone())
  113. .event(ReadWorkspaces)
  114. .request(request.clone())
  115. .sync_send()
  116. .parse::<RepeatedWorkspace>();
  117. let mut workspaces;
  118. if let Some(workspace_id) = &request.workspace_id {
  119. workspaces = repeated_workspace
  120. .take_items()
  121. .into_iter()
  122. .filter(|workspace| &workspace.id == workspace_id)
  123. .collect::<Vec<Workspace>>();
  124. debug_assert_eq!(workspaces.len(), 1);
  125. } else {
  126. workspaces = repeated_workspace.items;
  127. }
  128. workspaces.drain(..1).collect::<Vec<Workspace>>().pop()
  129. }
  130. pub async fn create_app(sdk: &FlowyTestSDK, name: &str, desc: &str, workspace_id: &str) -> App {
  131. let create_app_request = CreateAppRequest {
  132. workspace_id: workspace_id.to_owned(),
  133. name: name.to_string(),
  134. desc: desc.to_string(),
  135. color_style: Default::default(),
  136. };
  137. let app = FlowyWorkspaceTest::new(sdk.clone())
  138. .event(CreateApp)
  139. .request(create_app_request)
  140. .async_send()
  141. .await
  142. .parse::<App>();
  143. app
  144. }
  145. pub fn delete_app(sdk: &FlowyTestSDK, app_id: &str) {
  146. let delete_app_request = DeleteAppRequest {
  147. app_id: app_id.to_string(),
  148. };
  149. FlowyWorkspaceTest::new(sdk.clone())
  150. .event(DeleteApp)
  151. .request(delete_app_request)
  152. .sync_send();
  153. }
  154. pub async fn update_app(sdk: &FlowyTestSDK, request: UpdateAppRequest) {
  155. FlowyWorkspaceTest::new(sdk.clone())
  156. .event(UpdateApp)
  157. .request(request)
  158. .async_send()
  159. .await;
  160. }
  161. pub fn read_app(sdk: &FlowyTestSDK, request: QueryAppRequest) -> App {
  162. let app = FlowyWorkspaceTest::new(sdk.clone())
  163. .event(ReadApp)
  164. .request(request)
  165. .sync_send()
  166. .parse::<App>();
  167. app
  168. }
  169. pub async fn create_view_with_request(sdk: &FlowyTestSDK, request: CreateViewRequest) -> View {
  170. let view = FlowyWorkspaceTest::new(sdk.clone())
  171. .event(CreateView)
  172. .request(request)
  173. .async_send()
  174. .await
  175. .parse::<View>();
  176. view
  177. }
  178. pub async fn create_view(sdk: &FlowyTestSDK, app_id: &str) -> View {
  179. let request = CreateViewRequest {
  180. belong_to_id: app_id.to_string(),
  181. name: "View A".to_string(),
  182. desc: "".to_string(),
  183. thumbnail: Some("http://1.png".to_string()),
  184. view_type: ViewType::Doc,
  185. };
  186. create_view_with_request(sdk, request).await
  187. }
  188. pub async fn update_view(sdk: &FlowyTestSDK, request: UpdateViewRequest) {
  189. FlowyWorkspaceTest::new(sdk.clone())
  190. .event(UpdateView)
  191. .request(request)
  192. .async_send()
  193. .await;
  194. }
  195. pub async fn read_view(sdk: &FlowyTestSDK, request: QueryViewRequest) -> View {
  196. FlowyWorkspaceTest::new(sdk.clone())
  197. .event(ReadView)
  198. .request(request)
  199. .async_send()
  200. .await
  201. .parse::<View>()
  202. }
  203. pub async fn open_view(sdk: &FlowyTestSDK, request: OpenViewRequest) -> Doc {
  204. FlowyWorkspaceTest::new(sdk.clone())
  205. .event(OpenView)
  206. .request(request)
  207. .async_send()
  208. .await
  209. .parse::<Doc>()
  210. }