163 lines
5.4 KiB
Rust
163 lines
5.4 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)
|
|
// |-- Web 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(), 16);
|
|
|
|
let getting_started_sub_views = folder.get_views_belong_to(&getting_started_view.id);
|
|
assert_eq!(getting_started_sub_views.len(), 3);
|
|
|
|
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);
|
|
|
|
let web_guide_view = getting_started_sub_views[2].clone();
|
|
assert_eq!(web_guide_view.name, "Web guide");
|
|
assert_eq!(web_guide_view.layout, ViewLayout::Document);
|
|
assert_eq!(web_guide_view.icon, None);
|
|
let web_guide_document =
|
|
get_document_collab_from_remote(&mut test_client, workspace_id.clone(), &web_guide_view.id)
|
|
.await;
|
|
let web_guide_document_data = web_guide_document.get_document_data().unwrap();
|
|
assert_eq!(web_guide_document_data.blocks.len(), 31);
|
|
}
|
|
|
|
// 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);
|
|
}
|