mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2025-07-09 01:56:08 +00:00

* feat: workspace api * feat: added cloud apis for add and delete workspace * feat: add and delete workspace event handlers * chore: rust fmt * chore: save user workspace * test: add test * test: add test * chore: add to gitignore * feat: update api add name to workspace * chore: cargo clippy and rename to create * chore: add envrc and direnv to gitignore * chore: change name to create workspace instead of add workspace * chore: update client api rev * feat: add create workspace impl * chore: restore gitignore to original * test: fix create workspace event test * fix: change delete workspace input * fix: compile * fix: create workspace test * feat: add error code for request payload too large * chore: remove cargo backup files * feat: add is async option for upload file handler * chore: update client api version --------- Co-authored-by: nathan <nathan@appflowy.io>
334 lines
7.8 KiB
Rust
334 lines
7.8 KiB
Rust
use collab_folder::ViewLayout;
|
|
|
|
use flowy_folder::entities::icon::{ViewIconPB, ViewIconTypePB};
|
|
|
|
use crate::folder::local_test::script::FolderScript::*;
|
|
use crate::folder::local_test::script::FolderTest;
|
|
|
|
#[tokio::test]
|
|
async fn create_parent_view_test() {
|
|
let mut test = FolderTest::new().await;
|
|
test
|
|
.run_scripts(vec![CreateParentView {
|
|
name: "App".to_string(),
|
|
desc: "App description".to_string(),
|
|
}])
|
|
.await;
|
|
|
|
let app = test.parent_view.clone();
|
|
test.run_scripts(vec![ReloadParentView(app.id)]).await;
|
|
}
|
|
|
|
#[tokio::test]
|
|
#[should_panic]
|
|
async fn delete_parent_view_test() {
|
|
let mut test = FolderTest::new().await;
|
|
let parent_view = test.parent_view.clone();
|
|
test
|
|
.run_scripts(vec![DeleteParentView, ReloadParentView(parent_view.id)])
|
|
.await;
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn delete_parent_view_then_restore() {
|
|
let mut test = FolderTest::new().await;
|
|
test
|
|
.run_scripts(vec![ReloadParentView(test.parent_view.id.clone())])
|
|
.await;
|
|
|
|
let parent_view = test.parent_view.clone();
|
|
test
|
|
.run_scripts(vec![
|
|
DeleteParentView,
|
|
RestoreAppFromTrash,
|
|
ReloadParentView(parent_view.id.clone()),
|
|
AssertParentView(parent_view),
|
|
])
|
|
.await;
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn update_parent_view_test() {
|
|
let mut test = FolderTest::new().await;
|
|
let parent_view = test.parent_view.clone();
|
|
let new_name = "😁 hell world".to_owned();
|
|
assert_ne!(parent_view.name, new_name);
|
|
|
|
test
|
|
.run_scripts(vec![
|
|
UpdateParentView {
|
|
name: Some(new_name.clone()),
|
|
desc: None,
|
|
is_favorite: None,
|
|
},
|
|
ReloadParentView(parent_view.id),
|
|
])
|
|
.await;
|
|
assert_eq!(test.parent_view.name, new_name);
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn create_sub_views_test() {
|
|
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,
|
|
},
|
|
ReloadParentView(app.id),
|
|
])
|
|
.await;
|
|
|
|
app = test.parent_view.clone();
|
|
assert_eq!(app.child_views.len(), 3);
|
|
assert_eq!(app.child_views[1].name, "View A");
|
|
assert_eq!(app.child_views[2].name, "Grid")
|
|
}
|
|
|
|
#[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,
|
|
is_favorite: None,
|
|
},
|
|
ReadView(view.id),
|
|
])
|
|
.await;
|
|
assert_eq!(test.child_view.name, new_name);
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn view_icon_update_test() {
|
|
let mut test = FolderTest::new().await;
|
|
let view = test.child_view.clone();
|
|
let new_icon = ViewIconPB {
|
|
ty: ViewIconTypePB::Emoji,
|
|
value: "👍".to_owned(),
|
|
};
|
|
assert!(view.icon.is_none());
|
|
test
|
|
.run_scripts(vec![
|
|
UpdateViewIcon {
|
|
icon: Some(new_icon.clone()),
|
|
},
|
|
ReadView(view.id.clone()),
|
|
])
|
|
.await;
|
|
|
|
assert_eq!(test.child_view.icon, Some(new_icon));
|
|
|
|
test
|
|
.run_scripts(vec![UpdateViewIcon { icon: None }, ReadView(view.id)])
|
|
.await;
|
|
assert_eq!(test.child_view.icon, None);
|
|
}
|
|
|
|
#[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,
|
|
},
|
|
ReloadParentView(parent_view.id.clone()),
|
|
])
|
|
.await;
|
|
|
|
assert_eq!(
|
|
test.parent_view.child_views.len(),
|
|
3,
|
|
"num of belongings should be 3"
|
|
);
|
|
let view_ids = test
|
|
.parent_view
|
|
.child_views
|
|
.iter()
|
|
.map(|view| view.id.clone())
|
|
.collect::<Vec<String>>();
|
|
test
|
|
.run_scripts(vec![
|
|
DeleteViews(view_ids),
|
|
ReloadParentView(parent_view.id),
|
|
ReadTrash,
|
|
])
|
|
.await;
|
|
|
|
assert_eq!(test.parent_view.child_views.len(), 0);
|
|
assert_eq!(test.trash.len(), 3);
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn view_delete_all_permanent() {
|
|
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,
|
|
},
|
|
ReloadParentView(parent_view.id.clone()),
|
|
])
|
|
.await;
|
|
|
|
let view_ids = test
|
|
.parent_view
|
|
.child_views
|
|
.iter()
|
|
.map(|view| view.id.clone())
|
|
.collect::<Vec<String>>();
|
|
test
|
|
.run_scripts(vec![
|
|
DeleteViews(view_ids),
|
|
ReloadParentView(parent_view.id),
|
|
DeleteAllTrash,
|
|
ReadTrash,
|
|
])
|
|
.await;
|
|
|
|
assert_eq!(test.parent_view.child_views.len(), 0);
|
|
assert_eq!(test.trash.len(), 0);
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn toggle_favorites() {
|
|
let mut test = FolderTest::new().await;
|
|
let view = test.child_view.clone();
|
|
test
|
|
.run_scripts(vec![
|
|
ReadView(view.id.clone()),
|
|
ToggleFavorite,
|
|
ReadFavorites,
|
|
ReadView(view.id.clone()),
|
|
])
|
|
.await;
|
|
assert!(test.child_view.is_favorite);
|
|
assert_ne!(test.favorites.len(), 0);
|
|
assert_eq!(test.favorites[0].id, view.id);
|
|
|
|
let view = test.child_view.clone();
|
|
test
|
|
.run_scripts(vec![
|
|
ReadView(view.id.clone()),
|
|
ToggleFavorite,
|
|
ReadFavorites,
|
|
ReadView(view.id.clone()),
|
|
])
|
|
.await;
|
|
|
|
assert!(!test.child_view.is_favorite);
|
|
assert!(test.favorites.is_empty());
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn delete_favorites() {
|
|
let mut test = FolderTest::new().await;
|
|
let view = test.child_view.clone();
|
|
test
|
|
.run_scripts(vec![
|
|
ReadView(view.id.clone()),
|
|
ToggleFavorite,
|
|
ReadFavorites,
|
|
ReadView(view.id.clone()),
|
|
])
|
|
.await;
|
|
assert!(test.child_view.is_favorite);
|
|
assert_ne!(test.favorites.len(), 0);
|
|
assert_eq!(test.favorites[0].id, view.id);
|
|
|
|
test.run_scripts(vec![DeleteView, ReadFavorites]).await;
|
|
assert_eq!(test.favorites.len(), 0);
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn move_view_event_test() {
|
|
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,
|
|
},
|
|
ReloadParentView(parent_view.id.clone()),
|
|
])
|
|
.await;
|
|
let view_ids = test
|
|
.parent_view
|
|
.child_views
|
|
.iter()
|
|
.map(|view| view.id.clone())
|
|
.collect::<Vec<String>>();
|
|
let move_view_id = view_ids[0].clone();
|
|
let new_prev_view_id = view_ids[1].clone();
|
|
let new_parent_view_id = parent_view.id.clone();
|
|
test
|
|
.run_scripts(vec![
|
|
MoveView {
|
|
view_id: move_view_id.clone(),
|
|
new_parent_id: new_parent_view_id.clone(),
|
|
prev_view_id: Some(new_prev_view_id.clone()),
|
|
},
|
|
ReloadParentView(parent_view.id.clone()),
|
|
])
|
|
.await;
|
|
|
|
let after_view_ids = test
|
|
.parent_view
|
|
.child_views
|
|
.iter()
|
|
.map(|view| view.id.clone())
|
|
.collect::<Vec<String>>();
|
|
assert_eq!(after_view_ids[0], view_ids[1]);
|
|
assert_eq!(after_view_ids[1], view_ids[0]);
|
|
}
|