folder_test.rs 8.1 KB

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