test.rs 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. use std::ops::Deref;
  2. use std::time::Duration;
  3. use flowy_document2::entities::{DocumentSnapshotStatePB, DocumentSyncStatePB};
  4. use flowy_document2::notification::DocumentNotification::DidUpdateDocumentSnapshotState;
  5. use flowy_test::document::document_event::DocumentEventTest;
  6. use crate::document::supabase_test::helper::{
  7. assert_document_data_equal, FlowySupabaseDocumentTest,
  8. };
  9. use crate::util::receive_with_timeout;
  10. #[tokio::test]
  11. async fn supabase_initial_document_snapshot_test() {
  12. if let Some(test) = FlowySupabaseDocumentTest::new().await {
  13. let view = test.create_document().await;
  14. let mut rx = test
  15. .notification_sender
  16. .subscribe::<DocumentSnapshotStatePB>(&view.id, DidUpdateDocumentSnapshotState);
  17. receive_with_timeout(&mut rx, Duration::from_secs(30))
  18. .await
  19. .unwrap();
  20. let snapshots = test.get_document_snapshots(&view.id).await;
  21. assert_eq!(snapshots.items.len(), 1);
  22. let document_data = test.get_document_data(&view.id).await;
  23. assert_document_data_equal(&snapshots.items[0].data, &view.id, document_data);
  24. }
  25. }
  26. #[tokio::test]
  27. async fn supabase_document_edit_sync_test() {
  28. if let Some(test) = FlowySupabaseDocumentTest::new().await {
  29. let view = test.create_document().await;
  30. let document_id = view.id.clone();
  31. let core = test.deref().deref().clone();
  32. let document_event = DocumentEventTest::new_with_core(core);
  33. document_event
  34. .insert_index(&document_id, "hello world", 0, None)
  35. .await;
  36. // wait all update are send to the remote
  37. let mut rx = test
  38. .notification_sender
  39. .subscribe_with_condition::<DocumentSyncStatePB, _>(&document_id, |pb| pb.is_finish);
  40. receive_with_timeout(&mut rx, Duration::from_secs(30))
  41. .await
  42. .unwrap();
  43. let document_data = test.get_document_data(&document_id).await;
  44. let update = test.get_collab_update(&document_id).await;
  45. assert_document_data_equal(&update, &document_id, document_data);
  46. }
  47. }
  48. #[tokio::test]
  49. async fn supabase_document_edit_sync_test2() {
  50. if let Some(test) = FlowySupabaseDocumentTest::new().await {
  51. let view = test.create_document().await;
  52. let document_id = view.id.clone();
  53. let core = test.deref().deref().clone();
  54. let document_event = DocumentEventTest::new_with_core(core);
  55. for i in 0..10 {
  56. document_event
  57. .insert_index(&document_id, "hello world", i, None)
  58. .await;
  59. }
  60. // wait all update are send to the remote
  61. let mut rx = test
  62. .notification_sender
  63. .subscribe_with_condition::<DocumentSyncStatePB, _>(&document_id, |pb| pb.is_finish);
  64. receive_with_timeout(&mut rx, Duration::from_secs(30))
  65. .await
  66. .unwrap();
  67. let document_data = test.get_document_data(&document_id).await;
  68. let update = test.get_collab_update(&document_id).await;
  69. assert_document_data_equal(&update, &document_id, document_data);
  70. }
  71. }