folder_test.rs 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373
  1. use crate::script::{FolderScript::*, FolderTest};
  2. use collab_folder::core::ViewLayout;
  3. use flowy_folder2::entities::icon::{ViewIconPB, ViewIconTypePB};
  4. #[tokio::test]
  5. async fn read_all_workspace_test() {
  6. let mut test = FolderTest::new().await;
  7. test.run_scripts(vec![ReadAllWorkspaces]).await;
  8. assert!(!test.all_workspace.is_empty());
  9. }
  10. #[tokio::test]
  11. async fn create_workspace_test() {
  12. let mut test = FolderTest::new().await;
  13. let name = "My new workspace".to_owned();
  14. let desc = "Daily routines".to_owned();
  15. test
  16. .run_scripts(vec![CreateWorkspace {
  17. name: name.clone(),
  18. desc: desc.clone(),
  19. }])
  20. .await;
  21. let workspace = test.workspace.clone();
  22. assert_eq!(workspace.name, name);
  23. test
  24. .run_scripts(vec![
  25. ReadWorkspace(Some(workspace.id.clone())),
  26. AssertWorkspace(workspace),
  27. ])
  28. .await;
  29. }
  30. #[tokio::test]
  31. async fn get_workspace_test() {
  32. let mut test = FolderTest::new().await;
  33. let workspace = test.workspace.clone();
  34. test
  35. .run_scripts(vec![
  36. ReadWorkspace(Some(workspace.id.clone())),
  37. AssertWorkspace(workspace),
  38. ])
  39. .await;
  40. }
  41. #[tokio::test]
  42. async fn create_parent_view_test() {
  43. let mut test = FolderTest::new().await;
  44. test
  45. .run_scripts(vec![CreateParentView {
  46. name: "App".to_string(),
  47. desc: "App description".to_string(),
  48. }])
  49. .await;
  50. let app = test.parent_view.clone();
  51. test.run_scripts(vec![ReloadParentView(app.id)]).await;
  52. }
  53. #[tokio::test]
  54. #[should_panic]
  55. async fn delete_parent_view_test() {
  56. let mut test = FolderTest::new().await;
  57. let parent_view = test.parent_view.clone();
  58. test
  59. .run_scripts(vec![DeleteParentView, ReloadParentView(parent_view.id)])
  60. .await;
  61. }
  62. #[tokio::test]
  63. async fn delete_parent_view_then_restore() {
  64. let mut test = FolderTest::new().await;
  65. test
  66. .run_scripts(vec![ReloadParentView(test.parent_view.id.clone())])
  67. .await;
  68. let parent_view = test.parent_view.clone();
  69. test
  70. .run_scripts(vec![
  71. DeleteParentView,
  72. RestoreAppFromTrash,
  73. ReloadParentView(parent_view.id.clone()),
  74. AssertParentView(parent_view),
  75. ])
  76. .await;
  77. }
  78. #[tokio::test]
  79. async fn update_parent_view_test() {
  80. let mut test = FolderTest::new().await;
  81. let parent_view = test.parent_view.clone();
  82. let new_name = "😁 hell world".to_owned();
  83. assert_ne!(parent_view.name, new_name);
  84. test
  85. .run_scripts(vec![
  86. UpdateParentView {
  87. name: Some(new_name.clone()),
  88. desc: None,
  89. is_favorite: None,
  90. },
  91. ReloadParentView(parent_view.id),
  92. ])
  93. .await;
  94. assert_eq!(test.parent_view.name, new_name);
  95. }
  96. #[tokio::test]
  97. async fn app_create_with_view() {
  98. let mut test = FolderTest::new().await;
  99. let mut app = test.parent_view.clone();
  100. test
  101. .run_scripts(vec![
  102. CreateView {
  103. name: "View A".to_owned(),
  104. desc: "View A description".to_owned(),
  105. layout: ViewLayout::Document,
  106. },
  107. CreateView {
  108. name: "Grid".to_owned(),
  109. desc: "Grid description".to_owned(),
  110. layout: ViewLayout::Grid,
  111. },
  112. ReloadParentView(app.id),
  113. ])
  114. .await;
  115. app = test.parent_view.clone();
  116. assert_eq!(app.child_views.len(), 3);
  117. assert_eq!(app.child_views[1].name, "View A");
  118. assert_eq!(app.child_views[2].name, "Grid")
  119. }
  120. #[tokio::test]
  121. async fn view_update() {
  122. let mut test = FolderTest::new().await;
  123. let view = test.child_view.clone();
  124. let new_name = "😁 123".to_owned();
  125. assert_ne!(view.name, new_name);
  126. test
  127. .run_scripts(vec![
  128. UpdateView {
  129. name: Some(new_name.clone()),
  130. desc: None,
  131. is_favorite: None,
  132. },
  133. ReadView(view.id),
  134. ])
  135. .await;
  136. assert_eq!(test.child_view.name, new_name);
  137. }
  138. #[tokio::test]
  139. async fn view_icon_update_test() {
  140. let mut test = FolderTest::new().await;
  141. let view = test.child_view.clone();
  142. let new_icon = ViewIconPB {
  143. ty: ViewIconTypePB::Emoji,
  144. value: "👍".to_owned(),
  145. };
  146. assert!(view.icon.is_none());
  147. test
  148. .run_scripts(vec![
  149. UpdateViewIcon {
  150. icon: Some(new_icon.clone()),
  151. },
  152. ReadView(view.id.clone()),
  153. ])
  154. .await;
  155. assert_eq!(test.child_view.icon, Some(new_icon));
  156. test
  157. .run_scripts(vec![UpdateViewIcon { icon: None }, ReadView(view.id)])
  158. .await;
  159. assert_eq!(test.child_view.icon, None);
  160. }
  161. #[tokio::test]
  162. #[should_panic]
  163. async fn view_delete() {
  164. let mut test = FolderTest::new().await;
  165. let view = test.child_view.clone();
  166. test.run_scripts(vec![DeleteView, ReadView(view.id)]).await;
  167. }
  168. #[tokio::test]
  169. async fn view_delete_then_restore() {
  170. let mut test = FolderTest::new().await;
  171. let view = test.child_view.clone();
  172. test
  173. .run_scripts(vec![
  174. DeleteView,
  175. RestoreViewFromTrash,
  176. ReadView(view.id.clone()),
  177. AssertView(view),
  178. ])
  179. .await;
  180. }
  181. #[tokio::test]
  182. async fn view_delete_all() {
  183. let mut test = FolderTest::new().await;
  184. let parent_view = test.parent_view.clone();
  185. test
  186. .run_scripts(vec![
  187. CreateView {
  188. name: "View A".to_owned(),
  189. desc: "View A description".to_owned(),
  190. layout: ViewLayout::Document,
  191. },
  192. CreateView {
  193. name: "Grid".to_owned(),
  194. desc: "Grid description".to_owned(),
  195. layout: ViewLayout::Grid,
  196. },
  197. ReloadParentView(parent_view.id.clone()),
  198. ])
  199. .await;
  200. assert_eq!(
  201. test.parent_view.child_views.len(),
  202. 3,
  203. "num of belongings should be 3"
  204. );
  205. let view_ids = test
  206. .parent_view
  207. .child_views
  208. .iter()
  209. .map(|view| view.id.clone())
  210. .collect::<Vec<String>>();
  211. test
  212. .run_scripts(vec![
  213. DeleteViews(view_ids),
  214. ReloadParentView(parent_view.id),
  215. ReadTrash,
  216. ])
  217. .await;
  218. assert_eq!(test.parent_view.child_views.len(), 0);
  219. assert_eq!(test.trash.len(), 3);
  220. }
  221. #[tokio::test]
  222. async fn view_delete_all_permanent() {
  223. let mut test = FolderTest::new().await;
  224. let parent_view = test.parent_view.clone();
  225. test
  226. .run_scripts(vec![
  227. CreateView {
  228. name: "View A".to_owned(),
  229. desc: "View A description".to_owned(),
  230. layout: ViewLayout::Document,
  231. },
  232. ReloadParentView(parent_view.id.clone()),
  233. ])
  234. .await;
  235. let view_ids = test
  236. .parent_view
  237. .child_views
  238. .iter()
  239. .map(|view| view.id.clone())
  240. .collect::<Vec<String>>();
  241. test
  242. .run_scripts(vec![
  243. DeleteViews(view_ids),
  244. ReloadParentView(parent_view.id),
  245. DeleteAllTrash,
  246. ReadTrash,
  247. ])
  248. .await;
  249. assert_eq!(test.parent_view.child_views.len(), 0);
  250. assert_eq!(test.trash.len(), 0);
  251. }
  252. #[tokio::test]
  253. async fn toggle_favorites() {
  254. let mut test = FolderTest::new().await;
  255. let view = test.child_view.clone();
  256. test
  257. .run_scripts(vec![
  258. ReadView(view.id.clone()),
  259. ToggleFavorite,
  260. ReadFavorites,
  261. ReadView(view.id.clone()),
  262. ])
  263. .await;
  264. assert!(test.child_view.is_favorite);
  265. assert_ne!(test.favorites.len(), 0);
  266. assert_eq!(test.favorites[0].id, view.id);
  267. let view = test.child_view.clone();
  268. test
  269. .run_scripts(vec![
  270. ReadView(view.id.clone()),
  271. ToggleFavorite,
  272. ReadFavorites,
  273. ReadView(view.id.clone()),
  274. ])
  275. .await;
  276. assert!(!test.child_view.is_favorite);
  277. assert!(test.favorites.is_empty());
  278. }
  279. #[tokio::test]
  280. async fn delete_favorites() {
  281. let mut test = FolderTest::new().await;
  282. let view = test.child_view.clone();
  283. test
  284. .run_scripts(vec![
  285. ReadView(view.id.clone()),
  286. ToggleFavorite,
  287. ReadFavorites,
  288. ReadView(view.id.clone()),
  289. ])
  290. .await;
  291. assert!(test.child_view.is_favorite);
  292. assert_ne!(test.favorites.len(), 0);
  293. assert_eq!(test.favorites[0].id, view.id);
  294. test.run_scripts(vec![DeleteView, ReadFavorites]).await;
  295. assert_eq!(test.favorites.len(), 0);
  296. }
  297. #[tokio::test]
  298. async fn move_view_event_test() {
  299. let mut test = FolderTest::new().await;
  300. let parent_view = test.parent_view.clone();
  301. test
  302. .run_scripts(vec![
  303. CreateView {
  304. name: "View A".to_owned(),
  305. desc: "View A description".to_owned(),
  306. layout: ViewLayout::Document,
  307. },
  308. ReloadParentView(parent_view.id.clone()),
  309. ])
  310. .await;
  311. let view_ids = test
  312. .parent_view
  313. .child_views
  314. .iter()
  315. .map(|view| view.id.clone())
  316. .collect::<Vec<String>>();
  317. let move_view_id = view_ids[0].clone();
  318. let new_prev_view_id = view_ids[1].clone();
  319. let new_parent_view_id = parent_view.id.clone();
  320. test
  321. .run_scripts(vec![
  322. MoveView {
  323. view_id: move_view_id.clone(),
  324. new_parent_id: new_parent_view_id.clone(),
  325. prev_view_id: Some(new_prev_view_id.clone()),
  326. },
  327. ReloadParentView(parent_view.id.clone()),
  328. ])
  329. .await;
  330. let after_view_ids = test
  331. .parent_view
  332. .child_views
  333. .iter()
  334. .map(|view| view.id.clone())
  335. .collect::<Vec<String>>();
  336. assert_eq!(after_view_ids[0], view_ids[1]);
  337. assert_eq!(after_view_ids[1], view_ids[0]);
  338. }