AppFlowy-Cloud/tests/collab/data_write_test.rs

133 lines
3.9 KiB
Rust

use app_error::ErrorCode;
use client_api_test_util::TestClient;
use collab::core::transaction::DocTransactionExtension;
use collab::preclude::Doc;
use collab_entity::CollabType;
use database_entity::dto::CreateCollabParams;
use workspace_template::document::get_started::GetStartedDocumentTemplate;
use workspace_template::WorkspaceTemplateBuilder;
#[tokio::test]
async fn insert_empty_data_test() {
let test_client = TestClient::new_user().await;
let workspace_id = test_client.workspace_id().await;
let object_id = uuid::Uuid::new_v4().to_string();
// test all collab type
for collab_type in [
CollabType::Folder,
CollabType::Document,
CollabType::UserAwareness,
CollabType::WorkspaceDatabase,
CollabType::Database,
CollabType::DatabaseRow,
] {
let params = CreateCollabParams {
workspace_id: workspace_id.clone(),
object_id: object_id.clone(),
encoded_collab_v1: vec![],
collab_type,
};
let error = test_client
.api_client
.create_collab(params)
.await
.unwrap_err();
assert_eq!(error.code, ErrorCode::NoRequiredData);
}
}
#[tokio::test]
async fn insert_invalid_data_test() {
let test_client = TestClient::new_user().await;
let workspace_id = test_client.workspace_id().await;
let object_id = uuid::Uuid::new_v4().to_string();
let doc = Doc::new();
let encoded_collab_v1 = doc.get_encoded_collab_v1().encode_to_bytes().unwrap();
for collab_type in [
CollabType::Folder,
CollabType::Document,
CollabType::UserAwareness,
CollabType::WorkspaceDatabase,
CollabType::Database,
CollabType::DatabaseRow,
] {
let params = CreateCollabParams {
workspace_id: workspace_id.clone(),
object_id: object_id.clone(),
encoded_collab_v1: encoded_collab_v1.clone(),
collab_type: collab_type.clone(),
};
let error = test_client
.api_client
.create_collab(params)
.await
.unwrap_err();
assert_eq!(
error.code,
ErrorCode::NoRequiredData,
"collab_type: {:?}",
collab_type
);
}
}
// #[tokio::test]
// async fn load_document_test() {
// let test_client = TestClient::new_user().await;
// let workspace_id = test_client.workspace_id().await;
// let object_id = uuid::Uuid::new_v4().to_string();
//
// for file in [include_str!("../test_asset/document/empty_lines.json")] {
// let document_data: DocumentData = serde_json::from_str(file).unwrap();
// let template = DocumentTemplate::from_data(document_data)
// .create(object_id.clone())
// .await
// .unwrap();
//
// let data = template.object_data.encode_to_bytes().unwrap();
// let params = CreateCollabParams {
// workspace_id: workspace_id.clone(),
// object_id: object_id.clone(),
// encoded_collab_v1: data,
// collab_type: template.object_type,
// };
// test_client.api_client.create_collab(params).await.unwrap();
// }
// }
#[tokio::test]
async fn insert_folder_data_success_test() {
let test_client = TestClient::new_user().await;
let workspace_id = test_client.workspace_id().await;
let object_id = uuid::Uuid::new_v4().to_string();
let uid = test_client.uid().await;
let templates = WorkspaceTemplateBuilder::new(uid, &workspace_id)
.with_templates(vec![GetStartedDocumentTemplate])
.build()
.await
.unwrap();
assert_eq!(templates.len(), 2);
for (index, template) in templates.into_iter().enumerate() {
if index == 0 {
assert_eq!(template.object_type, CollabType::Document);
}
if index == 1 {
assert_eq!(template.object_type, CollabType::Folder);
}
let data = template.object_data.encode_to_bytes().unwrap();
let params = CreateCollabParams {
workspace_id: workspace_id.clone(),
object_id: object_id.clone(),
encoded_collab_v1: data,
collab_type: template.object_type,
};
test_client.api_client.create_collab(params).await.unwrap();
}
}