file_test.rs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. use std::fs::File;
  2. use std::io::{Cursor, Read};
  3. use std::path::Path;
  4. use uuid::Uuid;
  5. use zip::ZipArchive;
  6. use flowy_storage::StorageObject;
  7. use crate::document::supabase_test::helper::FlowySupabaseDocumentTest;
  8. #[tokio::test]
  9. async fn supabase_document_upload_text_file_test() {
  10. if let Some(test) = FlowySupabaseDocumentTest::new().await {
  11. let workspace_id = test.get_current_workspace().await.workspace.id;
  12. let storage_service = test
  13. .document_manager
  14. .get_file_storage_service()
  15. .upgrade()
  16. .unwrap();
  17. let object = StorageObject::from_bytes(
  18. &workspace_id,
  19. &Uuid::new_v4().to_string(),
  20. "hello world".as_bytes(),
  21. "text/plain".to_string(),
  22. );
  23. let url = storage_service.create_object(object).await.unwrap();
  24. let bytes = storage_service
  25. .get_object_by_url(url.clone())
  26. .await
  27. .unwrap();
  28. let s = String::from_utf8(bytes.to_vec()).unwrap();
  29. assert_eq!(s, "hello world");
  30. // Delete the text file
  31. let _ = storage_service.delete_object_by_url(url).await;
  32. }
  33. }
  34. #[tokio::test]
  35. async fn supabase_document_upload_zip_file_test() {
  36. if let Some(test) = FlowySupabaseDocumentTest::new().await {
  37. let workspace_id = test.get_current_workspace().await.workspace.id;
  38. let storage_service = test
  39. .document_manager
  40. .get_file_storage_service()
  41. .upgrade()
  42. .unwrap();
  43. // Upload zip file
  44. let object = StorageObject::from_file(
  45. &workspace_id,
  46. &Uuid::new_v4().to_string(),
  47. "./tests/asset/test.txt.zip",
  48. );
  49. let url = storage_service.create_object(object).await.unwrap();
  50. // Read zip file
  51. let zip_data = storage_service
  52. .get_object_by_url(url.clone())
  53. .await
  54. .unwrap();
  55. let reader = Cursor::new(zip_data);
  56. let mut archive = ZipArchive::new(reader).unwrap();
  57. for i in 0..archive.len() {
  58. let mut file = archive.by_index(i).unwrap();
  59. let name = file.name().to_string();
  60. let mut out = Vec::new();
  61. file.read_to_end(&mut out).unwrap();
  62. if name.starts_with("__MACOSX/") {
  63. continue;
  64. }
  65. assert_eq!(name, "test.txt");
  66. assert_eq!(String::from_utf8(out).unwrap(), "hello world");
  67. }
  68. // Delete the zip file
  69. let _ = storage_service.delete_object_by_url(url).await;
  70. }
  71. }
  72. #[tokio::test]
  73. async fn supabase_document_upload_image_test() {
  74. if let Some(test) = FlowySupabaseDocumentTest::new().await {
  75. let workspace_id = test.get_current_workspace().await.workspace.id;
  76. let storage_service = test
  77. .document_manager
  78. .get_file_storage_service()
  79. .upgrade()
  80. .unwrap();
  81. // Upload zip file
  82. let object = StorageObject::from_file(
  83. &workspace_id,
  84. &Uuid::new_v4().to_string(),
  85. "./tests/asset/logo.png",
  86. );
  87. let url = storage_service.create_object(object).await.unwrap();
  88. let image_data = storage_service
  89. .get_object_by_url(url.clone())
  90. .await
  91. .unwrap();
  92. // Read the image file
  93. let mut file = File::open(Path::new("./tests/asset/logo.png")).unwrap();
  94. let mut local_data = Vec::new();
  95. file.read_to_end(&mut local_data).unwrap();
  96. assert_eq!(image_data, local_data);
  97. // Delete the image
  98. let _ = storage_service.delete_object_by_url(url).await;
  99. }
  100. }