folder_test.rs 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. use crate::script::{invalid_workspace_name_test_case, FolderScript::*, FolderTest};
  2. use collab_folder::core::ViewLayout;
  3. use flowy_folder2::entities::CreateWorkspacePayloadPB;
  4. use flowy_test::{event_builder::*, FlowyCoreTest};
  5. #[tokio::test]
  6. async fn read_all_workspace_test() {
  7. let mut test = FolderTest::new().await;
  8. test.run_scripts(vec![ReadAllWorkspaces]).await;
  9. assert!(!test.all_workspace.is_empty());
  10. }
  11. #[tokio::test]
  12. async fn create_workspace_test() {
  13. let mut test = FolderTest::new().await;
  14. let name = "My new workspace".to_owned();
  15. let desc = "Daily routines".to_owned();
  16. test
  17. .run_scripts(vec![CreateWorkspace {
  18. name: name.clone(),
  19. desc: desc.clone(),
  20. }])
  21. .await;
  22. let workspace = test.workspace.clone();
  23. assert_eq!(workspace.name, name);
  24. test
  25. .run_scripts(vec![
  26. ReadWorkspace(Some(workspace.id.clone())),
  27. AssertWorkspace(workspace),
  28. ])
  29. .await;
  30. }
  31. #[tokio::test]
  32. async fn get_workspace_test() {
  33. let mut test = FolderTest::new().await;
  34. let workspace = test.workspace.clone();
  35. test
  36. .run_scripts(vec![
  37. ReadWorkspace(Some(workspace.id.clone())),
  38. AssertWorkspace(workspace),
  39. ])
  40. .await;
  41. }
  42. #[tokio::test]
  43. async fn create_parent_view_test() {
  44. let mut test = FolderTest::new().await;
  45. test
  46. .run_scripts(vec![CreateParentView {
  47. name: "App".to_string(),
  48. desc: "App description".to_string(),
  49. }])
  50. .await;
  51. let app = test.parent_view.clone();
  52. test.run_scripts(vec![ReloadParentView(app.id)]).await;
  53. }
  54. #[tokio::test]
  55. async fn create_parent_view_with_invalid_name() {
  56. for (name, code) in invalid_workspace_name_test_case() {
  57. let sdk = FlowyCoreTest::new();
  58. let request = CreateWorkspacePayloadPB {
  59. name,
  60. desc: "".to_owned(),
  61. };
  62. assert_eq!(
  63. EventBuilder::new(sdk)
  64. .event(flowy_folder2::event_map::FolderEvent::CreateWorkspace)
  65. .payload(request)
  66. .async_send()
  67. .await
  68. .error()
  69. .unwrap()
  70. .code,
  71. code.value()
  72. )
  73. }
  74. }
  75. #[tokio::test]
  76. #[should_panic]
  77. async fn delete_parent_view_test() {
  78. let mut test = FolderTest::new().await;
  79. let parent_view = test.parent_view.clone();
  80. test
  81. .run_scripts(vec![DeleteParentView, ReloadParentView(parent_view.id)])
  82. .await;
  83. }
  84. #[tokio::test]
  85. async fn delete_parent_view_then_restore() {
  86. let mut test = FolderTest::new().await;
  87. test
  88. .run_scripts(vec![ReloadParentView(test.parent_view.id.clone())])
  89. .await;
  90. let parent_view = test.parent_view.clone();
  91. test
  92. .run_scripts(vec![
  93. DeleteParentView,
  94. RestoreAppFromTrash,
  95. ReloadParentView(parent_view.id.clone()),
  96. AssertParentView(parent_view),
  97. ])
  98. .await;
  99. }
  100. #[tokio::test]
  101. async fn update_parent_view_test() {
  102. let mut test = FolderTest::new().await;
  103. let parent_view = test.parent_view.clone();
  104. let new_name = "😁 hell world".to_owned();
  105. assert_ne!(parent_view.name, new_name);
  106. test
  107. .run_scripts(vec![
  108. UpdateParentView {
  109. name: Some(new_name.clone()),
  110. desc: None,
  111. },
  112. ReloadParentView(parent_view.id),
  113. ])
  114. .await;
  115. assert_eq!(test.parent_view.name, new_name);
  116. }
  117. #[tokio::test]
  118. async fn app_create_with_view() {
  119. let mut test = FolderTest::new().await;
  120. let mut app = test.parent_view.clone();
  121. test
  122. .run_scripts(vec![
  123. CreateView {
  124. name: "View A".to_owned(),
  125. desc: "View A description".to_owned(),
  126. layout: ViewLayout::Document,
  127. },
  128. CreateView {
  129. name: "Grid".to_owned(),
  130. desc: "Grid description".to_owned(),
  131. layout: ViewLayout::Grid,
  132. },
  133. ReloadParentView(app.id),
  134. ])
  135. .await;
  136. app = test.parent_view.clone();
  137. assert_eq!(app.child_views.len(), 3);
  138. assert_eq!(app.child_views[1].name, "View A");
  139. assert_eq!(app.child_views[2].name, "Grid")
  140. }
  141. #[tokio::test]
  142. async fn view_update() {
  143. let mut test = FolderTest::new().await;
  144. let view = test.child_view.clone();
  145. let new_name = "😁 123".to_owned();
  146. assert_ne!(view.name, new_name);
  147. test
  148. .run_scripts(vec![
  149. UpdateView {
  150. name: Some(new_name.clone()),
  151. desc: None,
  152. },
  153. ReadView(view.id),
  154. ])
  155. .await;
  156. assert_eq!(test.child_view.name, new_name);
  157. }
  158. #[tokio::test]
  159. #[should_panic]
  160. async fn view_delete() {
  161. let mut test = FolderTest::new().await;
  162. let view = test.child_view.clone();
  163. test.run_scripts(vec![DeleteView, ReadView(view.id)]).await;
  164. }
  165. #[tokio::test]
  166. async fn view_delete_then_restore() {
  167. let mut test = FolderTest::new().await;
  168. let view = test.child_view.clone();
  169. test
  170. .run_scripts(vec![
  171. DeleteView,
  172. RestoreViewFromTrash,
  173. ReadView(view.id.clone()),
  174. AssertView(view),
  175. ])
  176. .await;
  177. }
  178. #[tokio::test]
  179. async fn view_delete_all() {
  180. let mut test = FolderTest::new().await;
  181. let parent_view = test.parent_view.clone();
  182. test
  183. .run_scripts(vec![
  184. CreateView {
  185. name: "View A".to_owned(),
  186. desc: "View A description".to_owned(),
  187. layout: ViewLayout::Document,
  188. },
  189. CreateView {
  190. name: "Grid".to_owned(),
  191. desc: "Grid description".to_owned(),
  192. layout: ViewLayout::Grid,
  193. },
  194. ReloadParentView(parent_view.id.clone()),
  195. ])
  196. .await;
  197. assert_eq!(
  198. test.parent_view.child_views.len(),
  199. 3,
  200. "num of belongings should be 3"
  201. );
  202. let view_ids = test
  203. .parent_view
  204. .child_views
  205. .iter()
  206. .map(|view| view.id.clone())
  207. .collect::<Vec<String>>();
  208. test
  209. .run_scripts(vec![
  210. DeleteViews(view_ids),
  211. ReloadParentView(parent_view.id),
  212. ReadTrash,
  213. ])
  214. .await;
  215. assert_eq!(test.parent_view.child_views.len(), 0);
  216. assert_eq!(test.trash.len(), 3);
  217. }
  218. #[tokio::test]
  219. async fn view_delete_all_permanent() {
  220. let mut test = FolderTest::new().await;
  221. let parent_view = test.parent_view.clone();
  222. test
  223. .run_scripts(vec![
  224. CreateView {
  225. name: "View A".to_owned(),
  226. desc: "View A description".to_owned(),
  227. layout: ViewLayout::Document,
  228. },
  229. ReloadParentView(parent_view.id.clone()),
  230. ])
  231. .await;
  232. let view_ids = test
  233. .parent_view
  234. .child_views
  235. .iter()
  236. .map(|view| view.id.clone())
  237. .collect::<Vec<String>>();
  238. test
  239. .run_scripts(vec![
  240. DeleteViews(view_ids),
  241. ReloadParentView(parent_view.id),
  242. DeleteAllTrash,
  243. ReadTrash,
  244. ])
  245. .await;
  246. assert_eq!(test.parent_view.child_views.len(), 0);
  247. assert_eq!(test.trash.len(), 0);
  248. }