124 lines
3.6 KiB
Rust
124 lines
3.6 KiB
Rust
use crate::edit_test::mock::mock_test_data;
|
|
use crate::util::{check_doc_state_json, redis_stream, run_test_server};
|
|
use collab_entity::CollabType;
|
|
use tonic_proto::history::SnapshotRequestPb;
|
|
|
|
#[tokio::test]
|
|
async fn apply_update_stream_updates_test() {
|
|
let redis_stream = redis_stream().await;
|
|
let workspace_id = uuid::Uuid::new_v4().to_string();
|
|
let object_id = uuid::Uuid::new_v4().to_string();
|
|
let mock = mock_test_data(&workspace_id, &object_id, 30).await;
|
|
|
|
// use a random control stream key
|
|
let control_stream_key = uuid::Uuid::new_v4().to_string();
|
|
let client = run_test_server(control_stream_key).await;
|
|
|
|
let control_stream_key = client.config.stream_settings.control_key.clone();
|
|
let mut control_group = redis_stream
|
|
.collab_control_stream(&control_stream_key, "appflowy_cloud")
|
|
.await
|
|
.unwrap();
|
|
|
|
// apply open event
|
|
control_group
|
|
.insert_message(mock.open_event.clone())
|
|
.await
|
|
.unwrap();
|
|
|
|
let mut update_group = redis_stream
|
|
.collab_update_stream(&workspace_id, &object_id, "appflowy_cloud")
|
|
.await
|
|
.unwrap();
|
|
|
|
// apply updates
|
|
for update_event in &mock.update_events {
|
|
update_group
|
|
.insert_message(update_event.clone())
|
|
.await
|
|
.unwrap();
|
|
}
|
|
|
|
let request = SnapshotRequestPb {
|
|
workspace_id: workspace_id.to_string(),
|
|
object_id: object_id.to_string(),
|
|
collab_type: CollabType::Unknown.value(),
|
|
num_snapshot: 1,
|
|
};
|
|
|
|
check_doc_state_json(&object_id, 60, mock.expected_json.clone(), move || {
|
|
let mut cloned_client = client.clone();
|
|
let cloned_request = request.clone();
|
|
Box::pin(async move {
|
|
cloned_client
|
|
.get_latest_snapshot(cloned_request)
|
|
.await
|
|
.map(|r| r.into_inner().history_state.unwrap())
|
|
})
|
|
})
|
|
.await
|
|
.unwrap();
|
|
}
|
|
|
|
// #[tokio::test]
|
|
// async fn apply_missing_updates_test() {
|
|
// let redis_stream = redis_stream().await;
|
|
// let workspace_id = uuid::Uuid::new_v4().to_string();
|
|
// let object_id = uuid::Uuid::new_v4().to_string();
|
|
// let mock = mock_test_data(&workspace_id, &object_id, 30).await;
|
|
// let client = run_test_server(uuid::Uuid::new_v4().to_string()).await;
|
|
//
|
|
// let control_stream_key = client.config.stream_settings.control_key.clone();
|
|
// let mut control_group = redis_stream
|
|
// .collab_control_stream(&control_stream_key, "appflowy_cloud")
|
|
// .await
|
|
// .unwrap();
|
|
//
|
|
// // apply open event
|
|
// control_group
|
|
// .insert_message(mock.open_event.clone())
|
|
// .await
|
|
// .unwrap();
|
|
//
|
|
// let mut update_group = redis_stream
|
|
// .collab_update_stream(&workspace_id, &object_id, "appflowy_cloud")
|
|
// .await
|
|
// .unwrap();
|
|
//
|
|
// let mut missing_updates = vec![];
|
|
// // apply updates
|
|
// for (index, update_event) in mock.update_events.iter().enumerate() {
|
|
// if index % 2 == 0 {
|
|
// missing_updates.push(update_event.clone());
|
|
// } else {
|
|
// update_group
|
|
// .insert_message(update_event.clone())
|
|
// .await
|
|
// .unwrap();
|
|
// }
|
|
// }
|
|
//
|
|
// for update_event in missing_updates {
|
|
// update_group.insert_message(update_event).await.unwrap();
|
|
// }
|
|
//
|
|
// let request = SnapshotRequestPb {
|
|
// workspace_id: workspace_id.to_string(),
|
|
// object_id: object_id.to_string(),
|
|
// collab_type: CollabType::Unknown.value(),
|
|
// };
|
|
//
|
|
// check_doc_state_json(&object_id, 120, mock.expected_json.clone(), move || {
|
|
// let mut cloned_client = client.clone();
|
|
// let cloned_request = request.clone();
|
|
// Box::pin(async move {
|
|
// cloned_client
|
|
// .get_in_memory_history(cloned_request)
|
|
// .await
|
|
// .map(|r| r.into_inner())
|
|
// })
|
|
// })
|
|
// .await
|
|
// .unwrap();
|
|
// }
|