helper.rs 6.0 KB

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