workspace_test.rs 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. #![allow(clippy::all)]
  2. use crate::util::helper::{BackendViewTest, *};
  3. use flowy_collaboration::{
  4. client_document::{ClientDocument, PlainDoc},
  5. entities::{
  6. document_info::{CreateDocParams, DocumentId},
  7. revision::{md5, RepeatedRevision, Revision},
  8. },
  9. };
  10. use flowy_folder_data_model::entities::{
  11. app::{AppId, UpdateAppParams},
  12. trash::{RepeatedTrashId, TrashId, TrashType},
  13. view::{RepeatedViewId, UpdateViewParams, ViewId},
  14. workspace::{CreateWorkspaceParams, UpdateWorkspaceParams, WorkspaceId},
  15. };
  16. #[actix_rt::test]
  17. async fn workspace_create() {
  18. let test = BackendWorkspaceTest::new().await;
  19. tracing::info!("{:?}", test.workspace);
  20. }
  21. #[actix_rt::test]
  22. async fn workspace_read() {
  23. let test = BackendWorkspaceTest::new().await;
  24. let read_params = WorkspaceId::new(Some(test.workspace.id.clone()));
  25. let repeated_workspace = test.server.read_workspaces(read_params).await;
  26. tracing::info!("{:?}", repeated_workspace);
  27. }
  28. #[actix_rt::test]
  29. async fn workspace_read_with_belongs() {
  30. let test = BackendWorkspaceTest::new().await;
  31. let _ = test.create_app().await;
  32. let _ = test.create_app().await;
  33. let _ = test.create_app().await;
  34. let read_params = WorkspaceId::new(Some(test.workspace.id.clone()));
  35. let workspaces = test.server.read_workspaces(read_params).await;
  36. let workspace = workspaces.items.first().unwrap();
  37. assert_eq!(workspace.apps.len(), 3);
  38. }
  39. #[actix_rt::test]
  40. async fn workspace_update() {
  41. let test = BackendWorkspaceTest::new().await;
  42. let new_name = "rename workspace name";
  43. let new_desc = "rename workspace description";
  44. let update_params = UpdateWorkspaceParams {
  45. id: test.workspace.id.clone(),
  46. name: Some(new_name.to_string()),
  47. desc: Some(new_desc.to_string()),
  48. };
  49. test.server.update_workspace(update_params).await;
  50. let read_params = WorkspaceId::new(Some(test.workspace.id.clone()));
  51. let repeated_workspace = test.server.read_workspaces(read_params).await;
  52. let workspace = repeated_workspace.first().unwrap();
  53. assert_eq!(workspace.name, new_name);
  54. assert_eq!(workspace.desc, new_desc);
  55. }
  56. #[actix_rt::test]
  57. async fn workspace_delete() {
  58. let test = BackendWorkspaceTest::new().await;
  59. let delete_params = WorkspaceId {
  60. workspace_id: Some(test.workspace.id.clone()),
  61. };
  62. let _ = test.server.delete_workspace(delete_params).await;
  63. let read_params = WorkspaceId::new(Some(test.workspace.id.clone()));
  64. let repeated_workspace = test.server.read_workspaces(read_params).await;
  65. assert_eq!(repeated_workspace.len(), 0);
  66. }
  67. #[actix_rt::test]
  68. async fn app_create() {
  69. let test = BackendAppTest::new().await;
  70. tracing::info!("{:?}", test.app);
  71. }
  72. #[actix_rt::test]
  73. async fn app_read() {
  74. let test = BackendAppTest::new().await;
  75. let read_params = AppId::new(&test.app.id);
  76. assert_eq!(test.server.read_app(read_params).await.is_some(), true);
  77. }
  78. #[actix_rt::test]
  79. async fn app_read_with_belongs() {
  80. let test = BackendAppTest::new().await;
  81. let _ = create_test_view(&test.server, &test.app.id).await;
  82. let _ = create_test_view(&test.server, &test.app.id).await;
  83. let read_params = AppId::new(&test.app.id);
  84. let app = test.server.read_app(read_params).await.unwrap();
  85. assert_eq!(app.belongings.len(), 2);
  86. }
  87. #[actix_rt::test]
  88. async fn app_read_with_belongs_in_trash() {
  89. let test = BackendAppTest::new().await;
  90. let _ = create_test_view(&test.server, &test.app.id).await;
  91. let view = create_test_view(&test.server, &test.app.id).await;
  92. test.server.create_view_trash(&view.id).await;
  93. let read_params = AppId::new(&test.app.id);
  94. let app = test.server.read_app(read_params).await.unwrap();
  95. assert_eq!(app.belongings.len(), 1);
  96. }
  97. #[actix_rt::test]
  98. async fn app_update() {
  99. let test = BackendAppTest::new().await;
  100. let new_name = "flowy";
  101. let update_params = UpdateAppParams::new(&test.app.id).name(new_name);
  102. test.server.update_app(update_params).await;
  103. let read_params = AppId::new(&test.app.id);
  104. let app = test.server.read_app(read_params).await.unwrap();
  105. assert_eq!(&app.name, new_name);
  106. }
  107. #[actix_rt::test]
  108. async fn app_delete() {
  109. let test = BackendAppTest::new().await;
  110. let delete_params = AppId {
  111. app_id: test.app.id.clone(),
  112. };
  113. test.server.delete_app(delete_params).await;
  114. let read_params = AppId::new(&test.app.id);
  115. assert_eq!(test.server.read_app(read_params).await.is_none(), true);
  116. }
  117. #[actix_rt::test]
  118. async fn view_create() {
  119. let test = BackendViewTest::new().await;
  120. tracing::info!("{:?}", test.view);
  121. }
  122. #[actix_rt::test]
  123. async fn view_update() {
  124. let test = BackendViewTest::new().await;
  125. let new_name = "name view name";
  126. // update
  127. let update_params = UpdateViewParams::new(&test.view.id).name(new_name);
  128. test.server.update_view(update_params).await;
  129. // read
  130. let read_params: ViewId = test.view.id.clone().into();
  131. let view = test.server.read_view(read_params).await.unwrap();
  132. assert_eq!(&view.name, new_name);
  133. }
  134. #[actix_rt::test]
  135. async fn view_delete() {
  136. let test = BackendViewTest::new().await;
  137. test.server.create_view_trash(&test.view.id).await;
  138. let trash_ids = test
  139. .server
  140. .read_trash()
  141. .await
  142. .items
  143. .into_iter()
  144. .map(|item| item.id)
  145. .collect::<Vec<String>>();
  146. // read
  147. let read_params: ViewId = test.view.id.clone().into();
  148. // the view can't read from the server. it should be in the trash
  149. assert_eq!(test.server.read_view(read_params).await.is_none(), true);
  150. assert_eq!(trash_ids.contains(&test.view.id), true);
  151. }
  152. #[actix_rt::test]
  153. async fn trash_delete() {
  154. let test = BackendViewTest::new().await;
  155. test.server.create_view_trash(&test.view.id).await;
  156. let identifier = TrashId {
  157. id: test.view.id.clone(),
  158. ty: TrashType::View,
  159. };
  160. test.server.delete_view_trash(vec![identifier].into()).await;
  161. assert_eq!(test.server.read_trash().await.is_empty(), true);
  162. }
  163. #[actix_rt::test]
  164. async fn trash_delete_all() {
  165. let test = BackendViewTest::new().await;
  166. test.server.create_view_trash(&test.view.id).await;
  167. test.server.delete_view_trash(RepeatedTrashId::all()).await;
  168. assert_eq!(test.server.read_trash().await.is_empty(), true);
  169. }
  170. #[actix_rt::test]
  171. async fn workspace_list_read() {
  172. let mut server = spawn_user_server().await;
  173. let token = server.register_user().await.token;
  174. server.user_token = Some(token);
  175. for i in 0..3 {
  176. let params = CreateWorkspaceParams {
  177. name: format!("{} workspace", i),
  178. desc: format!("This is my {} workspace", i),
  179. };
  180. let _ = server.create_workspace(params).await;
  181. }
  182. let read_params = WorkspaceId::new(None);
  183. let workspaces = server.read_workspaces(read_params).await;
  184. assert_eq!(workspaces.len(), 3);
  185. }
  186. #[actix_rt::test]
  187. async fn doc_read() {
  188. let test = BackendViewTest::new().await;
  189. let params = DocumentId {
  190. doc_id: test.view.id.clone(),
  191. };
  192. let doc = test.server.read_doc(params).await;
  193. assert_eq!(doc.is_some(), true);
  194. }
  195. #[actix_rt::test]
  196. async fn doc_create() {
  197. let mut revisions: Vec<Revision> = vec![];
  198. let server = TestUserServer::new().await;
  199. let doc_id = uuid::Uuid::new_v4().to_string();
  200. let user_id = "a".to_owned();
  201. let mut document = ClientDocument::new::<PlainDoc>();
  202. let mut offset = 0;
  203. for i in 0..5 {
  204. let content = i.to_string();
  205. let delta = document.insert(offset, content.clone()).unwrap();
  206. offset += content.len();
  207. let bytes = delta.to_bytes();
  208. let md5 = md5(&bytes);
  209. let revision = if i == 0 {
  210. Revision::new(&doc_id, i, i, bytes, &user_id, md5)
  211. } else {
  212. Revision::new(&doc_id, i - 1, i, bytes, &user_id, md5)
  213. };
  214. revisions.push(revision);
  215. }
  216. let params = CreateDocParams {
  217. id: doc_id.clone(),
  218. revisions: RepeatedRevision::new(revisions),
  219. };
  220. server.create_doc(params).await;
  221. let doc = server.read_doc(DocumentId { doc_id }).await;
  222. assert_eq!(doc.unwrap().text, document.to_json());
  223. }
  224. #[actix_rt::test]
  225. async fn doc_delete() {
  226. let test = BackendViewTest::new().await;
  227. let delete_params = RepeatedViewId {
  228. items: vec![test.view.id.clone()],
  229. };
  230. test.server.delete_view(delete_params).await;
  231. let params = DocumentId {
  232. doc_id: test.view.id.clone(),
  233. };
  234. let doc = test.server.read_doc(params).await;
  235. assert_eq!(doc.is_none(), true);
  236. }