test.rs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. use std::time::Duration;
  2. use assert_json_diff::assert_json_eq;
  3. use serde_json::json;
  4. use flowy_folder2::entities::{FolderSnapshotStatePB, FolderSyncStatePB};
  5. use flowy_folder2::notification::FolderNotification::DidUpdateFolderSnapshotState;
  6. use crate::folder::supabase_test::helper::{assert_folder_collab_content, FlowySupabaseFolderTest};
  7. use crate::util::{get_folder_data_from_server, receive_with_timeout};
  8. #[tokio::test]
  9. async fn supabase_encrypt_folder_test() {
  10. if let Some(test) = FlowySupabaseFolderTest::new().await {
  11. let secret = test.enable_encryption().await;
  12. let local_folder_data = test.get_local_folder_data().await;
  13. let workspace_id = test.get_current_workspace().await.workspace.id;
  14. let remote_folder_data = get_folder_data_from_server(&workspace_id, Some(secret))
  15. .await
  16. .unwrap()
  17. .unwrap();
  18. assert_json_eq!(json!(local_folder_data), json!(remote_folder_data));
  19. }
  20. }
  21. #[tokio::test]
  22. async fn supabase_decrypt_folder_data_test() {
  23. if let Some(test) = FlowySupabaseFolderTest::new().await {
  24. let secret = Some(test.enable_encryption().await);
  25. let workspace_id = test.get_current_workspace().await.workspace.id;
  26. test
  27. .create_view(&workspace_id, "encrypt view".to_string())
  28. .await;
  29. let mut rx = test
  30. .notification_sender
  31. .subscribe_with_condition::<FolderSyncStatePB, _>(&workspace_id, |pb| pb.is_finish);
  32. receive_with_timeout(&mut rx, Duration::from_secs(10))
  33. .await
  34. .unwrap();
  35. let folder_data = get_folder_data_from_server(&workspace_id, secret)
  36. .await
  37. .unwrap()
  38. .unwrap();
  39. assert_eq!(folder_data.views.len(), 2);
  40. assert_eq!(folder_data.views[1].name, "encrypt view");
  41. }
  42. }
  43. #[tokio::test]
  44. #[should_panic]
  45. async fn supabase_decrypt_with_invalid_secret_folder_data_test() {
  46. if let Some(test) = FlowySupabaseFolderTest::new().await {
  47. let _ = Some(test.enable_encryption().await);
  48. let workspace_id = test.get_current_workspace().await.workspace.id;
  49. test
  50. .create_view(&workspace_id, "encrypt view".to_string())
  51. .await;
  52. let mut rx = test
  53. .notification_sender
  54. .subscribe_with_condition::<FolderSyncStatePB, _>(&workspace_id, |pb| pb.is_finish);
  55. receive_with_timeout(&mut rx, Duration::from_secs(10))
  56. .await
  57. .unwrap();
  58. let _ = get_folder_data_from_server(&workspace_id, Some("invalid secret".to_string()))
  59. .await
  60. .unwrap();
  61. }
  62. }
  63. #[tokio::test]
  64. async fn supabase_folder_snapshot_test() {
  65. if let Some(test) = FlowySupabaseFolderTest::new().await {
  66. let workspace_id = test.get_current_workspace().await.workspace.id;
  67. let mut rx = test
  68. .notification_sender
  69. .subscribe::<FolderSnapshotStatePB>(&workspace_id, DidUpdateFolderSnapshotState);
  70. receive_with_timeout(&mut rx, Duration::from_secs(10))
  71. .await
  72. .unwrap();
  73. let expected = test.get_collab_json().await;
  74. let snapshots = test.get_folder_snapshots(&workspace_id).await;
  75. assert_eq!(snapshots.len(), 1);
  76. assert_folder_collab_content(&workspace_id, &snapshots[0].data, expected);
  77. }
  78. }
  79. #[tokio::test]
  80. async fn supabase_initial_folder_snapshot_test2() {
  81. if let Some(test) = FlowySupabaseFolderTest::new().await {
  82. let workspace_id = test.get_current_workspace().await.workspace.id;
  83. test
  84. .create_view(&workspace_id, "supabase test view1".to_string())
  85. .await;
  86. test
  87. .create_view(&workspace_id, "supabase test view2".to_string())
  88. .await;
  89. test
  90. .create_view(&workspace_id, "supabase test view3".to_string())
  91. .await;
  92. let mut rx = test
  93. .notification_sender
  94. .subscribe_with_condition::<FolderSyncStatePB, _>(&workspace_id, |pb| pb.is_finish);
  95. receive_with_timeout(&mut rx, Duration::from_secs(10))
  96. .await
  97. .unwrap();
  98. let expected = test.get_collab_json().await;
  99. let update = test.get_collab_update(&workspace_id).await;
  100. assert_folder_collab_content(&workspace_id, &update, expected);
  101. }
  102. }