AppFlowy-Cloud/tests/workspace/default_user_workspace.rs

152 lines
4.9 KiB
Rust

use client_api_test::*;
use collab::core::origin::CollabOrigin;
use collab_document::{blocks::json_str_to_hashmap, document::Document};
use collab_entity::CollabType;
use collab_folder::{IconType, ViewIcon, ViewLayout};
/// Get the document collab from the remote server
async fn get_document_collab_from_remote(
test_client: &mut TestClient,
workspace_id: String,
document_id: &str,
) -> Document {
let resp = test_client
.get_collab(workspace_id, document_id.to_string(), CollabType::Document)
.await
.unwrap();
Document::open_with_options(
CollabOrigin::Empty,
resp.encode_collab.into(),
document_id,
vec![],
)
.unwrap()
}
// |-- General (space)
// |-- Getting started (document)
// |-- Desktop guide (document)
// |-- Mobile guide (document)
// |-- To-dos (board)
// |-- Shared (space)
// |-- ... (empty)
#[tokio::test]
async fn get_user_default_workspace_test() {
let email = generate_unique_email();
let password = "Hello!123#";
let c = localhost_client();
c.sign_up(&email, password).await.unwrap();
let mut test_client = TestClient::new_user().await;
let folder = test_client.get_user_folder().await;
let workspace_id = test_client.workspace_id().await;
let views = folder.get_views_belong_to(&workspace_id);
// 2 spaces
assert_eq!(views.len(), 2);
// the first view is the general space
let general_space = views[0].clone();
assert_eq!(general_space.name, "General");
assert!(general_space.icon.is_none());
assert!(general_space.extra.is_some());
let extra = general_space.extra.as_ref().unwrap();
let general_space_extra = json_str_to_hashmap(extra).unwrap();
assert_eq!(
general_space_extra.get("is_space"),
Some(&serde_json::json!(true))
);
// it contains 1 document and 1 board
let general_space_views = folder.get_views_belong_to(&general_space.id);
assert_eq!(general_space_views.len(), 2);
{
// the first view is the getting started document, and contains 2 sub views
let getting_started_view = general_space_views[0].clone();
assert_eq!(getting_started_view.name, "Getting started");
assert_eq!(getting_started_view.layout, ViewLayout::Document);
assert_eq!(
getting_started_view.icon,
Some(ViewIcon {
ty: IconType::Emoji,
value: "🌟".to_string()
})
);
let getting_started_document = get_document_collab_from_remote(
&mut test_client,
workspace_id.clone(),
&getting_started_view.id,
)
.await;
let document_data = getting_started_document.get_document_data().unwrap();
assert_eq!(document_data.blocks.len(), 15);
let getting_started_sub_views = folder.get_views_belong_to(&getting_started_view.id);
assert_eq!(getting_started_sub_views.len(), 2);
let desktop_guide_view = getting_started_sub_views[0].clone();
assert_eq!(desktop_guide_view.name, "Desktop guide");
assert_eq!(desktop_guide_view.layout, ViewLayout::Document);
assert_eq!(
desktop_guide_view.icon,
Some(ViewIcon {
ty: IconType::Emoji,
value: "📎".to_string()
})
);
let desktop_guide_document = get_document_collab_from_remote(
&mut test_client,
workspace_id.clone(),
&desktop_guide_view.id,
)
.await;
let desktop_guide_document_data = desktop_guide_document.get_document_data().unwrap();
assert_eq!(desktop_guide_document_data.blocks.len(), 39);
let mobile_guide_view = getting_started_sub_views[1].clone();
assert_eq!(mobile_guide_view.name, "Mobile guide");
assert_eq!(mobile_guide_view.layout, ViewLayout::Document);
assert_eq!(mobile_guide_view.icon, None);
let mobile_guide_document = get_document_collab_from_remote(
&mut test_client,
workspace_id.clone(),
&mobile_guide_view.id,
)
.await;
let mobile_guide_document_data = mobile_guide_document.get_document_data().unwrap();
assert_eq!(mobile_guide_document_data.blocks.len(), 33);
}
// the second view is the to-dos board, and contains 0 sub views
{
let to_dos_view = general_space_views[1].clone();
assert_eq!(to_dos_view.name, "To-dos");
assert_eq!(to_dos_view.layout, ViewLayout::Board);
assert_eq!(
to_dos_view.icon,
Some(ViewIcon {
ty: IconType::Emoji,
value: "".to_string()
})
);
let to_dos_sub_views = folder.get_views_belong_to(&to_dos_view.id);
assert_eq!(to_dos_sub_views.len(), 0);
}
// shared space is empty
let shared_space = views[1].clone();
assert_eq!(shared_space.name, "Shared");
assert!(shared_space.icon.is_none());
assert!(shared_space.extra.is_some());
let extra = shared_space.extra.as_ref().unwrap();
let shared_space_extra = json_str_to_hashmap(extra).unwrap();
assert_eq!(
shared_space_extra.get("is_space"),
Some(&serde_json::json!(true))
);
let shared_space_views = folder.get_views_belong_to(&shared_space.id);
assert_eq!(shared_space_views.len(), 0);
}