AppFlowy-Cloud/tests/collab/single_device_edit.rs

288 lines
6.9 KiB
Rust

use crate::util::test_client::{assert_server_collab, TestClient};
use collab_entity::CollabType;
use serde_json::json;
#[tokio::test]
async fn realtime_write_single_collab_test() {
let collab_type = CollabType::Document;
let mut test_client = TestClient::new_user().await;
let workspace_id = test_client.workspace_id().await;
let object_id = test_client
.create_collab(&workspace_id, collab_type.clone())
.await;
test_client
.open_collab(&workspace_id, &object_id, collab_type.clone())
.await;
// Edit the collab
for i in 0..=5 {
test_client
.collab_by_object_id
.get_mut(&object_id)
.unwrap()
.collab
.lock()
.insert(&i.to_string(), i.to_string());
}
let expected_json = json!( {
"0": "0",
"1": "1",
"2": "2",
"3": "3",
"4": "4",
"5": "5",
});
test_client.wait_object_sync_complete(&object_id).await;
assert_server_collab(
&workspace_id,
&mut test_client.api_client,
&object_id,
&collab_type,
10,
expected_json,
)
.await;
}
#[tokio::test]
async fn realtime_write_multiple_collab_test() {
let mut test_client = TestClient::new_user().await;
let workspace_id = test_client.workspace_id().await;
let mut object_ids = vec![];
for _ in 0..5 {
let collab_type = CollabType::Document;
let object_id = test_client
.create_collab(&workspace_id, collab_type.clone())
.await;
test_client
.open_collab(&workspace_id, &object_id, collab_type.clone())
.await;
for i in 0..=5 {
test_client
.collab_by_object_id
.get_mut(&object_id)
.unwrap()
.collab
.lock()
.insert(&i.to_string(), i.to_string());
}
test_client.wait_object_sync_complete(&object_id).await;
object_ids.push(object_id);
}
// Wait for the messages to be sent
for object_id in object_ids {
assert_server_collab(
&workspace_id,
&mut test_client.api_client,
&object_id,
&CollabType::Document,
10,
json!( {
"0": "0",
"1": "1",
"2": "2",
"3": "3",
"4": "4",
"5": "5",
}),
)
.await;
}
}
//
// #[tokio::test]
// async fn user_with_duplicate_devices_connect_edit_test() {
// let object_id = uuid::Uuid::new_v4().to_string();
// let collab_type = CollabType::Document;
// let registered_user = generate_unique_registered_user().await;
//
// // Client_1_2 will force the server to disconnect client_1_1. So any changes made by client_1_1
// // will not be saved to the server.
// let device_id = Uuid::new_v4().to_string();
// let mut client_1_1 = TestClient::new(device_id.clone(), registered_user.clone()).await;
// let workspace_id = client_1_1.current_workspace_id().await;
//
// client_1_1
// .create_collab(&workspace_id, &object_id, collab_type.clone())
// .await;
//
// client_1_1
// .collab_by_object_id
// .get_mut(&object_id)
// .unwrap()
// .collab
// .lock()
// .insert("1", "a");
// client_1_1
// .collab_by_object_id
// .get_mut(&object_id)
// .unwrap()
// .collab
// .lock()
// .insert("3", "c");
// client_1_1.wait_object_sync_complete(&object_id).await;
//
// let mut client_1_2 = TestClient::new(device_id.clone(), registered_user.clone()).await;
// client_1_2
// .create_collab(&workspace_id, &object_id, collab_type.clone())
// .await;
// client_1_2
// .collab_by_object_id
// .get_mut(&object_id)
// .unwrap()
// .collab
// .lock()
// .insert("2", "b");
// client_1_2.wait_object_sync_complete(&object_id).await;
//
// assert_client_collab(
// &mut client_1_1,
// &object_id,
// 10,
// json!({
// "1": "a",
// "3": "c"
// }),
// )
// .await;
//
// assert_client_collab(
// &mut client_1_2,
// &object_id,
// 10,
// json!({
// "1": "a",
// "3": "c",
// "2": "b"
// }),
// )
// .await;
//
// assert_remote_collab_json(
// &mut client_1_2.api_client,
// &object_id,
// &collab_type,
// 5,
// json!({
// "1": "a",
// "2": "b",
// "3": "c"
// }),
// )
// .await;
// }
// #[tokio::test]
// async fn two_direction_peer_sync_test() {
// let object_id = uuid::Uuid::new_v4().to_string();
// let collab_type = CollabType::Document;
//
// let mut client_1 = TestClient::new_user().await;
// let workspace_id = client_1.current_workspace_id().await;
// client_1
// .create_collab(&workspace_id, &object_id, collab_type.clone())
// .await;
//
// let mut client_2 = TestClient::new_user().await;
// client_2
// .create_collab(&workspace_id, &object_id, collab_type.clone())
// .await;
//
// client_1
// .collab_by_object_id
// .get_mut(&object_id)
// .unwrap()
// .collab
// .lock()
// .insert("name", "AppFlowy");
// client_1.wait_object_sync_complete(&object_id).await;
//
// client_2
// .collab_by_object_id
// .get_mut(&object_id)
// .unwrap()
// .collab
// .lock()
// .insert("support platform", "macOS, Windows, Linux, iOS, Android");
// client_2.wait_object_sync_complete(&object_id).await;
//
// let expected_json = json!({
// "name": "AppFlowy",
// "support platform": "macOS, Windows, Linux, iOS, Android"
// });
// assert_client_collab(&mut client_1, &object_id, expected_json.clone()).await;
// assert_client_collab(&mut client_2, &object_id, expected_json.clone()).await;
// }
#[tokio::test]
async fn multiple_collab_edit_test() {
let collab_type = CollabType::Document;
let mut client_1 = TestClient::new_user().await;
let workspace_id_1 = client_1.workspace_id().await;
let object_id_1 = client_1
.create_collab(&workspace_id_1, collab_type.clone())
.await;
client_1
.open_collab(&workspace_id_1, &object_id_1, collab_type.clone())
.await;
let mut client_2 = TestClient::new_user().await;
let workspace_id_2 = client_2.workspace_id().await;
let object_id_2 = client_2
.create_collab(&workspace_id_2, collab_type.clone())
.await;
client_2
.open_collab(&workspace_id_2, &object_id_2, collab_type.clone())
.await;
client_1
.collab_by_object_id
.get_mut(&object_id_1)
.unwrap()
.collab
.lock()
.insert("title", "I am client 1");
client_1.wait_object_sync_complete(&object_id_1).await;
client_2
.collab_by_object_id
.get_mut(&object_id_2)
.unwrap()
.collab
.lock()
.insert("title", "I am client 2");
client_2.wait_object_sync_complete(&object_id_2).await;
assert_server_collab(
&workspace_id_1,
&mut client_1.api_client,
&object_id_1,
&collab_type,
10,
json!( {
"title": "I am client 1"
}),
)
.await;
assert_server_collab(
&workspace_id_2,
&mut client_2.api_client,
&object_id_2,
&collab_type,
10,
json!( {
"title": "I am client 2"
}),
)
.await;
}