| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 | use std::ops::Deref;use assert_json_diff::assert_json_eq;use collab::core::collab::MutexCollab;use collab::core::origin::CollabOrigin;use collab::preclude::updates::decoder::Decode;use collab::preclude::{merge_updates_v1, JsonValue, Update};use collab_folder::core::FolderData;use flowy_folder2::entities::{FolderSnapshotPB, RepeatedFolderSnapshotPB, WorkspaceIdPB};use flowy_folder2::event_map::FolderEvent::GetFolderSnapshots;use flowy_test::event_builder::EventBuilder;use crate::util::FlowySupabaseTest;pub struct FlowySupabaseFolderTest {  inner: FlowySupabaseTest,}impl FlowySupabaseFolderTest {  pub async fn new() -> Option<Self> {    let inner = FlowySupabaseTest::new()?;    let uuid = uuid::Uuid::new_v4().to_string();    let _ = inner.supabase_sign_up_with_uuid(&uuid, None).await;    Some(Self { inner })  }  pub async fn get_collab_json(&self) -> JsonValue {    let folder = self.folder_manager.get_mutex_folder().lock();    folder.as_ref().unwrap().to_json_value()  }  pub async fn get_local_folder_data(&self) -> FolderData {    let folder = self.folder_manager.get_mutex_folder().lock();    folder.as_ref().unwrap().get_folder_data().unwrap()  }  pub async fn get_folder_snapshots(&self, workspace_id: &str) -> Vec<FolderSnapshotPB> {    EventBuilder::new(self.inner.deref().clone())      .event(GetFolderSnapshots)      .payload(WorkspaceIdPB {        value: Some(workspace_id.to_string()),      })      .async_send()      .await      .parse::<RepeatedFolderSnapshotPB>()      .items  }  pub async fn get_collab_update(&self, workspace_id: &str) -> Vec<u8> {    let cloud_service = self.folder_manager.get_cloud_service().clone();    let remote_updates = cloud_service      .get_folder_updates(workspace_id, self.user_manager.user_id().unwrap())      .await      .unwrap();    if remote_updates.is_empty() {      return vec![];    }    let updates = remote_updates      .iter()      .map(|update| update.as_ref())      .collect::<Vec<&[u8]>>();    merge_updates_v1(&updates).unwrap()  }}pub fn assert_folder_collab_content(workspace_id: &str, collab_update: &[u8], expected: JsonValue) {  if collab_update.is_empty() {    panic!("collab update is empty");  }  let collab = MutexCollab::new(CollabOrigin::Server, workspace_id, vec![]);  collab.lock().with_origin_transact_mut(|txn| {    let update = Update::decode_v1(collab_update).unwrap();    txn.apply_update(update);  });  let json = collab.to_json_value();  assert_json_eq!(json["folder"], expected);}impl Deref for FlowySupabaseFolderTest {  type Target = FlowySupabaseTest;  fn deref(&self) -> &Self::Target {    &self.inner  }}
 |