folder_test.rs 8.8 KB

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