folder_test.rs 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  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::*, FlowySDKTest};
  5. #[tokio::test]
  6. async fn workspace_read_all() {
  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 workspace_create() {
  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 workspace_read() {
  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 workspace_create_with_apps() {
  44. let mut test = FolderTest::new().await;
  45. test
  46. .run_scripts(vec![CreateApp {
  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![RefreshRootView(app.id)]).await;
  53. }
  54. #[tokio::test]
  55. async fn workspace_create_with_invalid_name() {
  56. for (name, code) in invalid_workspace_name_test_case() {
  57. let sdk = FlowySDKTest::default();
  58. let request = CreateWorkspacePayloadPB {
  59. name,
  60. desc: "".to_owned(),
  61. };
  62. assert_eq!(
  63. Folder2EventBuilder::new(sdk)
  64. .event(flowy_folder2::event_map::FolderEvent::CreateWorkspace)
  65. .payload(request)
  66. .async_send()
  67. .await
  68. .error()
  69. .code,
  70. code.value()
  71. )
  72. }
  73. }
  74. #[tokio::test]
  75. #[should_panic]
  76. async fn app_delete() {
  77. let mut test = FolderTest::new().await;
  78. let app = test.parent_view.clone();
  79. test
  80. .run_scripts(vec![DeleteRootView, RefreshRootView(app.id)])
  81. .await;
  82. }
  83. #[tokio::test]
  84. async fn app_delete_then_restore() {
  85. let mut test = FolderTest::new().await;
  86. test
  87. .run_scripts(vec![RefreshRootView(test.parent_view.id.clone())])
  88. .await;
  89. let parent_view = test.parent_view.clone();
  90. test
  91. .run_scripts(vec![
  92. DeleteRootView,
  93. RestoreAppFromTrash,
  94. RefreshRootView(parent_view.id.clone()),
  95. AssertRootView(parent_view),
  96. ])
  97. .await;
  98. }
  99. #[tokio::test]
  100. async fn app_update() {
  101. let mut test = FolderTest::new().await;
  102. let app = test.parent_view.clone();
  103. let new_name = "😁 hell world".to_owned();
  104. assert_ne!(app.name, new_name);
  105. test
  106. .run_scripts(vec![
  107. UpdateRootView {
  108. name: Some(new_name.clone()),
  109. desc: None,
  110. },
  111. RefreshRootView(app.id),
  112. ])
  113. .await;
  114. assert_eq!(test.parent_view.name, new_name);
  115. }
  116. #[tokio::test]
  117. async fn app_create_with_view() {
  118. let mut test = FolderTest::new().await;
  119. let mut app = test.parent_view.clone();
  120. test
  121. .run_scripts(vec![
  122. CreateView {
  123. name: "View A".to_owned(),
  124. desc: "View A description".to_owned(),
  125. layout: ViewLayout::Document,
  126. },
  127. CreateView {
  128. name: "Grid".to_owned(),
  129. desc: "Grid description".to_owned(),
  130. layout: ViewLayout::Grid,
  131. },
  132. RefreshRootView(app.id),
  133. ])
  134. .await;
  135. app = test.parent_view.clone();
  136. assert_eq!(app.child_views.len(), 3);
  137. assert_eq!(app.child_views[1].name, "View A");
  138. assert_eq!(app.child_views[2].name, "Grid")
  139. }
  140. #[tokio::test]
  141. async fn view_update() {
  142. let mut test = FolderTest::new().await;
  143. let view = test.child_view.clone();
  144. let new_name = "😁 123".to_owned();
  145. assert_ne!(view.name, new_name);
  146. test
  147. .run_scripts(vec![
  148. UpdateView {
  149. name: Some(new_name.clone()),
  150. desc: None,
  151. },
  152. ReadView(view.id),
  153. ])
  154. .await;
  155. assert_eq!(test.child_view.name, new_name);
  156. }
  157. #[tokio::test]
  158. #[should_panic]
  159. async fn view_delete() {
  160. let mut test = FolderTest::new().await;
  161. let view = test.child_view.clone();
  162. test.run_scripts(vec![DeleteView, ReadView(view.id)]).await;
  163. }
  164. #[tokio::test]
  165. async fn view_delete_then_restore() {
  166. let mut test = FolderTest::new().await;
  167. let view = test.child_view.clone();
  168. test
  169. .run_scripts(vec![
  170. DeleteView,
  171. RestoreViewFromTrash,
  172. ReadView(view.id.clone()),
  173. AssertView(view),
  174. ])
  175. .await;
  176. }
  177. #[tokio::test]
  178. async fn view_delete_all() {
  179. let mut test = FolderTest::new().await;
  180. let parent_view = test.parent_view.clone();
  181. test
  182. .run_scripts(vec![
  183. CreateView {
  184. name: "View A".to_owned(),
  185. desc: "View A description".to_owned(),
  186. layout: ViewLayout::Document,
  187. },
  188. CreateView {
  189. name: "Grid".to_owned(),
  190. desc: "Grid description".to_owned(),
  191. layout: ViewLayout::Grid,
  192. },
  193. RefreshRootView(parent_view.id.clone()),
  194. ])
  195. .await;
  196. assert_eq!(
  197. test.parent_view.child_views.len(),
  198. 3,
  199. "num of belongings should be 3"
  200. );
  201. let view_ids = test
  202. .parent_view
  203. .child_views
  204. .iter()
  205. .map(|view| view.id.clone())
  206. .collect::<Vec<String>>();
  207. test
  208. .run_scripts(vec![
  209. DeleteViews(view_ids),
  210. RefreshRootView(parent_view.id),
  211. ReadTrash,
  212. ])
  213. .await;
  214. assert_eq!(test.parent_view.child_views.len(), 0);
  215. assert_eq!(test.trash.len(), 3);
  216. }
  217. #[tokio::test]
  218. async fn view_delete_all_permanent() {
  219. let mut test = FolderTest::new().await;
  220. let app = test.parent_view.clone();
  221. test
  222. .run_scripts(vec![
  223. CreateView {
  224. name: "View A".to_owned(),
  225. desc: "View A description".to_owned(),
  226. layout: ViewLayout::Document,
  227. },
  228. RefreshRootView(app.id.clone()),
  229. ])
  230. .await;
  231. let view_ids = test
  232. .parent_view
  233. .child_views
  234. .iter()
  235. .map(|view| view.id.clone())
  236. .collect::<Vec<String>>();
  237. test
  238. .run_scripts(vec![
  239. DeleteViews(view_ids),
  240. RefreshRootView(app.id),
  241. DeleteAllTrash,
  242. ReadTrash,
  243. ])
  244. .await;
  245. assert_eq!(test.parent_view.child_views.len(), 0);
  246. assert_eq!(test.trash.len(), 0);
  247. }