| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 | use std::time::Duration;use flowy_database2::entities::{  DatabaseSnapshotStatePB, DatabaseSyncStatePB, FieldChangesetPB, FieldType,};use flowy_database2::notification::DatabaseNotification::DidUpdateDatabaseSnapshotState;use crate::database::supabase_test::helper::{  assert_database_collab_content, FlowySupabaseDatabaseTest,};use crate::util::receive_with_timeout;#[tokio::test]async fn supabase_initial_database_snapshot_test() {  if let Some(test) = FlowySupabaseDatabaseTest::new_with_new_user().await {    let (view, database) = test.create_database().await;    let mut rx = test      .notification_sender      .subscribe::<DatabaseSnapshotStatePB>(&database.id, DidUpdateDatabaseSnapshotState);    receive_with_timeout(&mut rx, Duration::from_secs(30))      .await      .unwrap();    let expected = test.get_collab_json(&database.id).await;    let snapshots = test.get_database_snapshots(&view.id).await;    assert_eq!(snapshots.items.len(), 1);    assert_database_collab_content(&database.id, &snapshots.items[0].data, expected);  }}#[tokio::test]async fn supabase_edit_database_test() {  if let Some(test) = FlowySupabaseDatabaseTest::new_with_new_user().await {    let (view, database) = test.create_database().await;    let existing_fields = test.get_all_database_fields(&view.id).await;    for field in existing_fields.items {      if !field.is_primary {        test.delete_field(&view.id, &field.id).await;      }    }    let field = test.create_field(&view.id, FieldType::Checklist).await;    test      .update_field(FieldChangesetPB {        field_id: field.id.clone(),        view_id: view.id.clone(),        name: Some("hello world".to_string()),        ..Default::default()      })      .await;    // wait all updates are send to the remote    let mut rx = test      .notification_sender      .subscribe_with_condition::<DatabaseSyncStatePB, _>(&database.id, |pb| pb.is_finish);    receive_with_timeout(&mut rx, Duration::from_secs(30))      .await      .unwrap();    assert_eq!(test.get_all_database_fields(&view.id).await.items.len(), 2);    let expected = test.get_collab_json(&database.id).await;    let update = test.get_database_collab_update(&database.id).await;    assert_database_collab_content(&database.id, &update, expected);  }}// #[tokio::test]// async fn cloud_test_supabase_login_sync_database_test() {//   if let Some(test) = FlowySupabaseDatabaseTest::new_with_new_user().await {//     let uuid = test.uuid.clone();//     let (view, database) = test.create_database().await;//     // wait all updates are send to the remote//     let mut rx = test//       .notification_sender//       .subscribe_with_condition::<DatabaseSyncStatePB, _>(&database.id, |pb| pb.is_finish);//     receive_with_timeout(&mut rx, Duration::from_secs(30))//       .await//       .unwrap();//     let expected = test.get_collab_json(&database.id).await;//     test.sign_out().await;//     // Drop the test will cause the test resources to be dropped, which will//     // delete the user data folder.//     drop(test);////     let new_test = FlowySupabaseDatabaseTest::new_with_user(uuid)//       .await//       .unwrap();//     // let actual = new_test.get_collab_json(&database.id).await;//     // assert_json_eq!(actual, json!(""));////     new_test.open_database(&view.id).await;////     // wait all updates are synced from the remote//     let mut rx = new_test//       .notification_sender//       .subscribe_with_condition::<DatabaseSyncStatePB, _>(&database.id, |pb| pb.is_finish);//     receive_with_timeout(&mut rx, Duration::from_secs(30))//       .await//       .unwrap();////     // when the new sync is finished, the database should be the same as the old one//     let actual = new_test.get_collab_json(&database.id).await;//     assert_json_eq!(actual, expected);//   }// }
 |