228 lines
6.3 KiB
Rust
228 lines
6.3 KiB
Rust
use crate::collab::util::test_encode_collab_v1;
|
|
use app_error::ErrorCode;
|
|
use client_api_test_util::*;
|
|
|
|
use collab_entity::CollabType;
|
|
use database_entity::dto::{
|
|
CreateCollabParams, DeleteCollabParams, QueryCollab, QueryCollabParams, QueryCollabResult,
|
|
};
|
|
use sqlx::types::Uuid;
|
|
use std::collections::HashMap;
|
|
|
|
#[tokio::test]
|
|
async fn success_insert_collab_test() {
|
|
let (c, _user) = generate_unique_registered_user_client().await;
|
|
let workspace_id = workspace_id_from_client(&c).await;
|
|
let object_id = Uuid::new_v4().to_string();
|
|
let encode_collab = test_encode_collab_v1(&object_id, "title", "hello world");
|
|
c.create_collab(CreateCollabParams {
|
|
object_id: object_id.clone(),
|
|
collab_type: CollabType::Document,
|
|
override_if_exist: false,
|
|
workspace_id: workspace_id.clone(),
|
|
encoded_collab_v1: encode_collab.encode_to_bytes().unwrap(),
|
|
})
|
|
.await
|
|
.unwrap();
|
|
|
|
let doc_state = c
|
|
.get_collab(QueryCollabParams::new(
|
|
&object_id,
|
|
CollabType::Document,
|
|
&workspace_id,
|
|
))
|
|
.await
|
|
.unwrap()
|
|
.doc_state;
|
|
|
|
assert_eq!(doc_state, encode_collab.doc_state);
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn success_batch_get_collab_test() {
|
|
let (c, _user) = generate_unique_registered_user_client().await;
|
|
let workspace_id = workspace_id_from_client(&c).await;
|
|
let queries = vec![
|
|
QueryCollab {
|
|
object_id: Uuid::new_v4().to_string(),
|
|
collab_type: CollabType::Document,
|
|
},
|
|
QueryCollab {
|
|
object_id: Uuid::new_v4().to_string(),
|
|
collab_type: CollabType::Folder,
|
|
},
|
|
QueryCollab {
|
|
object_id: Uuid::new_v4().to_string(),
|
|
collab_type: CollabType::Database,
|
|
},
|
|
];
|
|
|
|
let mut expected_results = HashMap::new();
|
|
for query in queries.iter() {
|
|
let object_id = query.object_id.clone();
|
|
let encode_collab = test_encode_collab_v1(&object_id, "title", "hello world")
|
|
.encode_to_bytes()
|
|
.unwrap();
|
|
let collab_type = query.collab_type.clone();
|
|
|
|
expected_results.insert(
|
|
object_id.clone(),
|
|
QueryCollabResult::Success {
|
|
encode_collab_v1: encode_collab.clone(),
|
|
},
|
|
);
|
|
|
|
c.create_collab(CreateCollabParams {
|
|
object_id: object_id.clone(),
|
|
encoded_collab_v1: encode_collab.clone(),
|
|
collab_type: collab_type.clone(),
|
|
override_if_exist: false,
|
|
workspace_id: workspace_id.clone(),
|
|
})
|
|
.await
|
|
.unwrap();
|
|
}
|
|
|
|
let results = c.batch_get_collab(&workspace_id, queries).await.unwrap().0;
|
|
for (object_id, result) in expected_results.iter() {
|
|
assert_eq!(result, results.get(object_id).unwrap());
|
|
}
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn success_part_batch_get_collab_test() {
|
|
let (c, _user) = generate_unique_registered_user_client().await;
|
|
let workspace_id = workspace_id_from_client(&c).await;
|
|
let queries = vec![
|
|
QueryCollab {
|
|
object_id: Uuid::new_v4().to_string(),
|
|
collab_type: CollabType::Document,
|
|
},
|
|
QueryCollab {
|
|
object_id: Uuid::new_v4().to_string(),
|
|
collab_type: CollabType::Folder,
|
|
},
|
|
QueryCollab {
|
|
object_id: Uuid::new_v4().to_string(),
|
|
collab_type: CollabType::Database,
|
|
},
|
|
];
|
|
|
|
let mut expected_results = HashMap::new();
|
|
for (index, query) in queries.iter().enumerate() {
|
|
let object_id = query.object_id.clone();
|
|
let collab_type = query.collab_type.clone();
|
|
let encode_collab = test_encode_collab_v1(&object_id, "title", "hello world")
|
|
.encode_to_bytes()
|
|
.unwrap();
|
|
|
|
if index == 1 {
|
|
expected_results.insert(
|
|
object_id.clone(),
|
|
QueryCollabResult::Failed {
|
|
error: "Record not found".to_string(),
|
|
},
|
|
);
|
|
} else {
|
|
expected_results.insert(
|
|
object_id.clone(),
|
|
QueryCollabResult::Success {
|
|
encode_collab_v1: encode_collab.clone(),
|
|
},
|
|
);
|
|
c.create_collab(CreateCollabParams {
|
|
object_id: object_id.clone(),
|
|
encoded_collab_v1: encode_collab.clone(),
|
|
collab_type: collab_type.clone(),
|
|
override_if_exist: false,
|
|
workspace_id: workspace_id.clone(),
|
|
})
|
|
.await
|
|
.unwrap();
|
|
}
|
|
}
|
|
|
|
let results = c.batch_get_collab(&workspace_id, queries).await.unwrap().0;
|
|
for (object_id, result) in expected_results.iter() {
|
|
assert_eq!(result, results.get(object_id).unwrap());
|
|
}
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn success_delete_collab_test() {
|
|
let (c, _user) = generate_unique_registered_user_client().await;
|
|
let workspace_id = workspace_id_from_client(&c).await;
|
|
let object_id = Uuid::new_v4().to_string();
|
|
let encode_collab = test_encode_collab_v1(&object_id, "title", "hello world")
|
|
.encode_to_bytes()
|
|
.unwrap();
|
|
|
|
c.create_collab(CreateCollabParams {
|
|
object_id: object_id.clone(),
|
|
encoded_collab_v1: encode_collab,
|
|
collab_type: CollabType::Document,
|
|
override_if_exist: false,
|
|
workspace_id: workspace_id.clone(),
|
|
})
|
|
.await
|
|
.unwrap();
|
|
|
|
c.delete_collab(DeleteCollabParams {
|
|
object_id: object_id.clone(),
|
|
workspace_id: workspace_id.clone(),
|
|
})
|
|
.await
|
|
.unwrap();
|
|
|
|
let error = c
|
|
.get_collab(QueryCollabParams::new(
|
|
&object_id,
|
|
CollabType::Document,
|
|
&workspace_id,
|
|
))
|
|
.await
|
|
.unwrap_err();
|
|
|
|
assert_eq!(error.code, ErrorCode::RecordNotFound);
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn fail_insert_collab_with_empty_payload_test() {
|
|
let (c, _user) = generate_unique_registered_user_client().await;
|
|
let workspace_id = workspace_id_from_client(&c).await;
|
|
let error = c
|
|
.create_collab(CreateCollabParams {
|
|
object_id: Uuid::new_v4().to_string(),
|
|
encoded_collab_v1: vec![],
|
|
collab_type: CollabType::Document,
|
|
override_if_exist: false,
|
|
workspace_id: workspace_id.clone(),
|
|
})
|
|
.await
|
|
.unwrap_err();
|
|
|
|
assert_eq!(error.code, ErrorCode::InvalidRequest);
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn fail_insert_collab_with_invalid_workspace_id_test() {
|
|
let (c, _user) = generate_unique_registered_user_client().await;
|
|
let workspace_id = Uuid::new_v4().to_string();
|
|
let object_id = Uuid::new_v4().to_string();
|
|
let encode_collab = test_encode_collab_v1(&object_id, "title", "hello world")
|
|
.encode_to_bytes()
|
|
.unwrap();
|
|
let error = c
|
|
.create_collab(CreateCollabParams {
|
|
object_id,
|
|
encoded_collab_v1: encode_collab,
|
|
collab_type: CollabType::Document,
|
|
override_if_exist: false,
|
|
workspace_id: workspace_id.clone(),
|
|
})
|
|
.await
|
|
.unwrap_err();
|
|
|
|
assert_eq!(error.code, ErrorCode::NotEnoughPermissions);
|
|
}
|