AppFlowy-Cloud/tests/collab/dirty_data_write_test.rs

111 lines
3.1 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,
override_if_exist: false,
};
let error = test_client
.api_client
.create_collab(params)
.await
.unwrap_err();
assert_eq!(error.code, ErrorCode::InvalidRequest);
}
}
#[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(),
override_if_exist: false,
};
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 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,
override_if_exist: false,
};
test_client.api_client.create_collab(params).await.unwrap();
}
}