| 
									
										
										
										
											2023-06-05 16:09:18 +08:00
										 |  |  | use crate::script::{FolderScript::*, FolderTest};
 | 
					
						
							| 
									
										
										
										
											2023-04-04 08:41:16 +08:00
										 |  |  | use collab_folder::core::ViewLayout;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #[tokio::test]
 | 
					
						
							| 
									
										
										
										
											2023-06-05 13:10:14 +08:00
										 |  |  | async fn read_all_workspace_test() {
 | 
					
						
							| 
									
										
										
										
											2023-04-04 08:41:16 +08:00
										 |  |  |   let mut test = FolderTest::new().await;
 | 
					
						
							|  |  |  |   test.run_scripts(vec![ReadAllWorkspaces]).await;
 | 
					
						
							|  |  |  |   assert!(!test.all_workspace.is_empty());
 | 
					
						
							|  |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #[tokio::test]
 | 
					
						
							| 
									
										
										
										
											2023-06-05 13:10:14 +08:00
										 |  |  | async fn create_workspace_test() {
 | 
					
						
							| 
									
										
										
										
											2023-04-04 08:41:16 +08:00
										 |  |  |   let mut test = FolderTest::new().await;
 | 
					
						
							|  |  |  |   let name = "My new workspace".to_owned();
 | 
					
						
							|  |  |  |   let desc = "Daily routines".to_owned();
 | 
					
						
							|  |  |  |   test
 | 
					
						
							|  |  |  |     .run_scripts(vec![CreateWorkspace {
 | 
					
						
							|  |  |  |       name: name.clone(),
 | 
					
						
							|  |  |  |       desc: desc.clone(),
 | 
					
						
							|  |  |  |     }])
 | 
					
						
							|  |  |  |     .await;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   let workspace = test.workspace.clone();
 | 
					
						
							|  |  |  |   assert_eq!(workspace.name, name);
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   test
 | 
					
						
							|  |  |  |     .run_scripts(vec![
 | 
					
						
							|  |  |  |       ReadWorkspace(Some(workspace.id.clone())),
 | 
					
						
							|  |  |  |       AssertWorkspace(workspace),
 | 
					
						
							|  |  |  |     ])
 | 
					
						
							|  |  |  |     .await;
 | 
					
						
							|  |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #[tokio::test]
 | 
					
						
							| 
									
										
										
										
											2023-06-05 13:10:14 +08:00
										 |  |  | async fn get_workspace_test() {
 | 
					
						
							| 
									
										
										
										
											2023-04-04 08:41:16 +08:00
										 |  |  |   let mut test = FolderTest::new().await;
 | 
					
						
							|  |  |  |   let workspace = test.workspace.clone();
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   test
 | 
					
						
							|  |  |  |     .run_scripts(vec![
 | 
					
						
							|  |  |  |       ReadWorkspace(Some(workspace.id.clone())),
 | 
					
						
							|  |  |  |       AssertWorkspace(workspace),
 | 
					
						
							|  |  |  |     ])
 | 
					
						
							|  |  |  |     .await;
 | 
					
						
							|  |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #[tokio::test]
 | 
					
						
							| 
									
										
										
										
											2023-06-05 13:10:14 +08:00
										 |  |  | async fn create_parent_view_test() {
 | 
					
						
							| 
									
										
										
										
											2023-04-04 08:41:16 +08:00
										 |  |  |   let mut test = FolderTest::new().await;
 | 
					
						
							|  |  |  |   test
 | 
					
						
							| 
									
										
										
										
											2023-06-05 13:10:14 +08:00
										 |  |  |     .run_scripts(vec![CreateParentView {
 | 
					
						
							| 
									
										
										
										
											2023-04-04 08:41:16 +08:00
										 |  |  |       name: "App".to_string(),
 | 
					
						
							|  |  |  |       desc: "App description".to_string(),
 | 
					
						
							|  |  |  |     }])
 | 
					
						
							|  |  |  |     .await;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   let app = test.parent_view.clone();
 | 
					
						
							| 
									
										
										
										
											2023-06-05 13:10:14 +08:00
										 |  |  |   test.run_scripts(vec![ReloadParentView(app.id)]).await;
 | 
					
						
							| 
									
										
										
										
											2023-04-04 08:41:16 +08:00
										 |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #[tokio::test]
 | 
					
						
							|  |  |  | #[should_panic]
 | 
					
						
							| 
									
										
										
										
											2023-06-05 13:10:14 +08:00
										 |  |  | async fn delete_parent_view_test() {
 | 
					
						
							| 
									
										
										
										
											2023-04-04 08:41:16 +08:00
										 |  |  |   let mut test = FolderTest::new().await;
 | 
					
						
							| 
									
										
										
										
											2023-06-05 13:10:14 +08:00
										 |  |  |   let parent_view = test.parent_view.clone();
 | 
					
						
							| 
									
										
										
										
											2023-04-04 08:41:16 +08:00
										 |  |  |   test
 | 
					
						
							| 
									
										
										
										
											2023-06-05 13:10:14 +08:00
										 |  |  |     .run_scripts(vec![DeleteParentView, ReloadParentView(parent_view.id)])
 | 
					
						
							| 
									
										
										
										
											2023-04-04 08:41:16 +08:00
										 |  |  |     .await;
 | 
					
						
							|  |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #[tokio::test]
 | 
					
						
							| 
									
										
										
										
											2023-06-05 13:10:14 +08:00
										 |  |  | async fn delete_parent_view_then_restore() {
 | 
					
						
							| 
									
										
										
										
											2023-04-04 08:41:16 +08:00
										 |  |  |   let mut test = FolderTest::new().await;
 | 
					
						
							|  |  |  |   test
 | 
					
						
							| 
									
										
										
										
											2023-06-05 13:10:14 +08:00
										 |  |  |     .run_scripts(vec![ReloadParentView(test.parent_view.id.clone())])
 | 
					
						
							| 
									
										
										
										
											2023-04-04 08:41:16 +08:00
										 |  |  |     .await;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   let parent_view = test.parent_view.clone();
 | 
					
						
							|  |  |  |   test
 | 
					
						
							|  |  |  |     .run_scripts(vec![
 | 
					
						
							| 
									
										
										
										
											2023-06-05 13:10:14 +08:00
										 |  |  |       DeleteParentView,
 | 
					
						
							| 
									
										
										
										
											2023-04-04 08:41:16 +08:00
										 |  |  |       RestoreAppFromTrash,
 | 
					
						
							| 
									
										
										
										
											2023-06-05 13:10:14 +08:00
										 |  |  |       ReloadParentView(parent_view.id.clone()),
 | 
					
						
							|  |  |  |       AssertParentView(parent_view),
 | 
					
						
							| 
									
										
										
										
											2023-04-04 08:41:16 +08:00
										 |  |  |     ])
 | 
					
						
							|  |  |  |     .await;
 | 
					
						
							|  |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #[tokio::test]
 | 
					
						
							| 
									
										
										
										
											2023-06-05 13:10:14 +08:00
										 |  |  | async fn update_parent_view_test() {
 | 
					
						
							| 
									
										
										
										
											2023-04-04 08:41:16 +08:00
										 |  |  |   let mut test = FolderTest::new().await;
 | 
					
						
							| 
									
										
										
										
											2023-06-05 13:10:14 +08:00
										 |  |  |   let parent_view = test.parent_view.clone();
 | 
					
						
							| 
									
										
										
										
											2023-04-04 08:41:16 +08:00
										 |  |  |   let new_name = "😁 hell world".to_owned();
 | 
					
						
							| 
									
										
										
										
											2023-06-05 13:10:14 +08:00
										 |  |  |   assert_ne!(parent_view.name, new_name);
 | 
					
						
							| 
									
										
										
										
											2023-04-04 08:41:16 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   test
 | 
					
						
							|  |  |  |     .run_scripts(vec![
 | 
					
						
							| 
									
										
										
										
											2023-06-05 13:10:14 +08:00
										 |  |  |       UpdateParentView {
 | 
					
						
							| 
									
										
										
										
											2023-04-04 08:41:16 +08:00
										 |  |  |         name: Some(new_name.clone()),
 | 
					
						
							|  |  |  |         desc: None,
 | 
					
						
							|  |  |  |       },
 | 
					
						
							| 
									
										
										
										
											2023-06-05 13:10:14 +08:00
										 |  |  |       ReloadParentView(parent_view.id),
 | 
					
						
							| 
									
										
										
										
											2023-04-04 08:41:16 +08:00
										 |  |  |     ])
 | 
					
						
							|  |  |  |     .await;
 | 
					
						
							|  |  |  |   assert_eq!(test.parent_view.name, new_name);
 | 
					
						
							|  |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #[tokio::test]
 | 
					
						
							|  |  |  | async fn app_create_with_view() {
 | 
					
						
							|  |  |  |   let mut test = FolderTest::new().await;
 | 
					
						
							|  |  |  |   let mut app = test.parent_view.clone();
 | 
					
						
							|  |  |  |   test
 | 
					
						
							|  |  |  |     .run_scripts(vec![
 | 
					
						
							|  |  |  |       CreateView {
 | 
					
						
							|  |  |  |         name: "View A".to_owned(),
 | 
					
						
							|  |  |  |         desc: "View A description".to_owned(),
 | 
					
						
							|  |  |  |         layout: ViewLayout::Document,
 | 
					
						
							|  |  |  |       },
 | 
					
						
							|  |  |  |       CreateView {
 | 
					
						
							|  |  |  |         name: "Grid".to_owned(),
 | 
					
						
							|  |  |  |         desc: "Grid description".to_owned(),
 | 
					
						
							|  |  |  |         layout: ViewLayout::Grid,
 | 
					
						
							|  |  |  |       },
 | 
					
						
							| 
									
										
										
										
											2023-06-05 13:10:14 +08:00
										 |  |  |       ReloadParentView(app.id),
 | 
					
						
							| 
									
										
										
										
											2023-04-04 08:41:16 +08:00
										 |  |  |     ])
 | 
					
						
							|  |  |  |     .await;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   app = test.parent_view.clone();
 | 
					
						
							| 
									
										
										
										
											2023-05-10 19:43:32 +08:00
										 |  |  |   assert_eq!(app.child_views.len(), 3);
 | 
					
						
							|  |  |  |   assert_eq!(app.child_views[1].name, "View A");
 | 
					
						
							|  |  |  |   assert_eq!(app.child_views[2].name, "Grid")
 | 
					
						
							| 
									
										
										
										
											2023-04-04 08:41:16 +08:00
										 |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #[tokio::test]
 | 
					
						
							|  |  |  | async fn view_update() {
 | 
					
						
							|  |  |  |   let mut test = FolderTest::new().await;
 | 
					
						
							|  |  |  |   let view = test.child_view.clone();
 | 
					
						
							|  |  |  |   let new_name = "😁 123".to_owned();
 | 
					
						
							|  |  |  |   assert_ne!(view.name, new_name);
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   test
 | 
					
						
							|  |  |  |     .run_scripts(vec![
 | 
					
						
							|  |  |  |       UpdateView {
 | 
					
						
							|  |  |  |         name: Some(new_name.clone()),
 | 
					
						
							|  |  |  |         desc: None,
 | 
					
						
							|  |  |  |       },
 | 
					
						
							|  |  |  |       ReadView(view.id),
 | 
					
						
							|  |  |  |     ])
 | 
					
						
							|  |  |  |     .await;
 | 
					
						
							|  |  |  |   assert_eq!(test.child_view.name, new_name);
 | 
					
						
							|  |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #[tokio::test]
 | 
					
						
							|  |  |  | #[should_panic]
 | 
					
						
							|  |  |  | async fn view_delete() {
 | 
					
						
							|  |  |  |   let mut test = FolderTest::new().await;
 | 
					
						
							|  |  |  |   let view = test.child_view.clone();
 | 
					
						
							|  |  |  |   test.run_scripts(vec![DeleteView, ReadView(view.id)]).await;
 | 
					
						
							|  |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #[tokio::test]
 | 
					
						
							|  |  |  | async fn view_delete_then_restore() {
 | 
					
						
							|  |  |  |   let mut test = FolderTest::new().await;
 | 
					
						
							|  |  |  |   let view = test.child_view.clone();
 | 
					
						
							|  |  |  |   test
 | 
					
						
							|  |  |  |     .run_scripts(vec![
 | 
					
						
							|  |  |  |       DeleteView,
 | 
					
						
							|  |  |  |       RestoreViewFromTrash,
 | 
					
						
							|  |  |  |       ReadView(view.id.clone()),
 | 
					
						
							|  |  |  |       AssertView(view),
 | 
					
						
							|  |  |  |     ])
 | 
					
						
							|  |  |  |     .await;
 | 
					
						
							|  |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #[tokio::test]
 | 
					
						
							|  |  |  | async fn view_delete_all() {
 | 
					
						
							|  |  |  |   let mut test = FolderTest::new().await;
 | 
					
						
							|  |  |  |   let parent_view = test.parent_view.clone();
 | 
					
						
							|  |  |  |   test
 | 
					
						
							|  |  |  |     .run_scripts(vec![
 | 
					
						
							|  |  |  |       CreateView {
 | 
					
						
							|  |  |  |         name: "View A".to_owned(),
 | 
					
						
							|  |  |  |         desc: "View A description".to_owned(),
 | 
					
						
							|  |  |  |         layout: ViewLayout::Document,
 | 
					
						
							|  |  |  |       },
 | 
					
						
							|  |  |  |       CreateView {
 | 
					
						
							|  |  |  |         name: "Grid".to_owned(),
 | 
					
						
							|  |  |  |         desc: "Grid description".to_owned(),
 | 
					
						
							|  |  |  |         layout: ViewLayout::Grid,
 | 
					
						
							|  |  |  |       },
 | 
					
						
							| 
									
										
										
										
											2023-06-05 13:10:14 +08:00
										 |  |  |       ReloadParentView(parent_view.id.clone()),
 | 
					
						
							| 
									
										
										
										
											2023-04-04 08:41:16 +08:00
										 |  |  |     ])
 | 
					
						
							|  |  |  |     .await;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   assert_eq!(
 | 
					
						
							| 
									
										
										
										
											2023-05-10 19:43:32 +08:00
										 |  |  |     test.parent_view.child_views.len(),
 | 
					
						
							| 
									
										
										
										
											2023-04-04 08:41:16 +08:00
										 |  |  |     3,
 | 
					
						
							|  |  |  |     "num of belongings should be 3"
 | 
					
						
							|  |  |  |   );
 | 
					
						
							|  |  |  |   let view_ids = test
 | 
					
						
							|  |  |  |     .parent_view
 | 
					
						
							| 
									
										
										
										
											2023-05-10 19:43:32 +08:00
										 |  |  |     .child_views
 | 
					
						
							| 
									
										
										
										
											2023-04-04 08:41:16 +08:00
										 |  |  |     .iter()
 | 
					
						
							|  |  |  |     .map(|view| view.id.clone())
 | 
					
						
							|  |  |  |     .collect::<Vec<String>>();
 | 
					
						
							|  |  |  |   test
 | 
					
						
							|  |  |  |     .run_scripts(vec![
 | 
					
						
							|  |  |  |       DeleteViews(view_ids),
 | 
					
						
							| 
									
										
										
										
											2023-06-05 13:10:14 +08:00
										 |  |  |       ReloadParentView(parent_view.id),
 | 
					
						
							| 
									
										
										
										
											2023-04-04 08:41:16 +08:00
										 |  |  |       ReadTrash,
 | 
					
						
							|  |  |  |     ])
 | 
					
						
							|  |  |  |     .await;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-10 19:43:32 +08:00
										 |  |  |   assert_eq!(test.parent_view.child_views.len(), 0);
 | 
					
						
							| 
									
										
										
										
											2023-04-04 08:41:16 +08:00
										 |  |  |   assert_eq!(test.trash.len(), 3);
 | 
					
						
							|  |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #[tokio::test]
 | 
					
						
							|  |  |  | async fn view_delete_all_permanent() {
 | 
					
						
							|  |  |  |   let mut test = FolderTest::new().await;
 | 
					
						
							| 
									
										
										
										
											2023-06-05 13:10:14 +08:00
										 |  |  |   let parent_view = test.parent_view.clone();
 | 
					
						
							| 
									
										
										
										
											2023-04-04 08:41:16 +08:00
										 |  |  |   test
 | 
					
						
							|  |  |  |     .run_scripts(vec![
 | 
					
						
							|  |  |  |       CreateView {
 | 
					
						
							|  |  |  |         name: "View A".to_owned(),
 | 
					
						
							|  |  |  |         desc: "View A description".to_owned(),
 | 
					
						
							|  |  |  |         layout: ViewLayout::Document,
 | 
					
						
							|  |  |  |       },
 | 
					
						
							| 
									
										
										
										
											2023-06-05 13:10:14 +08:00
										 |  |  |       ReloadParentView(parent_view.id.clone()),
 | 
					
						
							| 
									
										
										
										
											2023-04-04 08:41:16 +08:00
										 |  |  |     ])
 | 
					
						
							|  |  |  |     .await;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   let view_ids = test
 | 
					
						
							|  |  |  |     .parent_view
 | 
					
						
							| 
									
										
										
										
											2023-05-10 19:43:32 +08:00
										 |  |  |     .child_views
 | 
					
						
							| 
									
										
										
										
											2023-04-04 08:41:16 +08:00
										 |  |  |     .iter()
 | 
					
						
							|  |  |  |     .map(|view| view.id.clone())
 | 
					
						
							|  |  |  |     .collect::<Vec<String>>();
 | 
					
						
							|  |  |  |   test
 | 
					
						
							|  |  |  |     .run_scripts(vec![
 | 
					
						
							|  |  |  |       DeleteViews(view_ids),
 | 
					
						
							| 
									
										
										
										
											2023-06-05 13:10:14 +08:00
										 |  |  |       ReloadParentView(parent_view.id),
 | 
					
						
							| 
									
										
										
										
											2023-04-04 08:41:16 +08:00
										 |  |  |       DeleteAllTrash,
 | 
					
						
							|  |  |  |       ReadTrash,
 | 
					
						
							|  |  |  |     ])
 | 
					
						
							|  |  |  |     .await;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-10 19:43:32 +08:00
										 |  |  |   assert_eq!(test.parent_view.child_views.len(), 0);
 | 
					
						
							| 
									
										
										
										
											2023-04-04 08:41:16 +08:00
										 |  |  |   assert_eq!(test.trash.len(), 0);
 | 
					
						
							|  |  |  | }
 |