use crate::util::test_client::TestClient; use app_error::ErrorCode; use assert_json_diff::assert_json_include; use collab_entity::CollabType; use database_entity::dto::{CollabParams, CreateCollabParams, QueryCollab}; use serde::Serialize; use serde_json::json; use uuid::Uuid; #[tokio::test] async fn batch_insert_collab_with_empty_payload_test() { let mut test_client = TestClient::new_user().await; let workspace_id = test_client.workspace_id().await; let error = test_client .batch_create_collab(&workspace_id, vec![]) .await .unwrap_err(); assert_eq!(error.code, ErrorCode::InvalidRequest); } #[tokio::test] async fn batch_insert_collab_success_test() { let mut test_client = TestClient::new_user().await; let workspace_id = test_client.workspace_id().await; let params_list = (0..5) .map(|_| CollabParams { object_id: Uuid::new_v4().to_string(), encoded_collab_v1: vec![0, 200], collab_type: CollabType::Document, override_if_exist: false, }) .collect::>(); test_client .batch_create_collab(&workspace_id, params_list.clone()) .await .unwrap(); let params = params_list .into_iter() .map(|params| QueryCollab { object_id: params.object_id, collab_type: params.collab_type, }) .collect::>(); let result = test_client .batch_get_collab(&workspace_id, params) .await .unwrap(); assert_eq!(result.0.values().len(), 5); } #[tokio::test] async fn create_collab_params_compatibility_serde_test() { // This test is to make sure that the CreateCollabParams is compatible with the old InsertCollabParams let old_version_value = json!(InsertCollabParams { object_id: "object_id".to_string(), encoded_collab_v1: vec![0, 200], workspace_id: "workspace_id".to_string(), collab_type: CollabType::Document, }); let new_version_create_params = serde_json::from_value::(old_version_value.clone()).unwrap(); let new_version_value = serde_json::to_value(new_version_create_params.clone()).unwrap(); assert_json_include!(actual: new_version_value.clone(), expected: old_version_value.clone()); assert_eq!(new_version_create_params.object_id, "object_id".to_string()); assert_eq!(new_version_create_params.encoded_collab_v1, vec![0, 200]); assert_eq!( new_version_create_params.workspace_id, "workspace_id".to_string() ); assert_eq!(new_version_create_params.collab_type, CollabType::Document); } #[derive(Serialize)] struct InsertCollabParams { pub object_id: String, pub encoded_collab_v1: Vec, pub workspace_id: String, pub collab_type: CollabType, }