file_test.rs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  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 storage_service = test
  12. .document_manager
  13. .get_file_storage_service()
  14. .upgrade()
  15. .unwrap();
  16. let object = StorageObject::from_bytes(
  17. &Uuid::new_v4().to_string(),
  18. "hello world".as_bytes(),
  19. "text/plain".to_string(),
  20. );
  21. let url = storage_service.create_object(object).await.unwrap();
  22. let bytes = storage_service
  23. .get_object_by_url(url.clone())
  24. .await
  25. .unwrap();
  26. let s = String::from_utf8(bytes.to_vec()).unwrap();
  27. assert_eq!(s, "hello world");
  28. // Delete the text file
  29. let _ = storage_service.delete_object_by_url(url).await;
  30. }
  31. }
  32. #[tokio::test]
  33. async fn supabase_document_upload_zip_file_test() {
  34. if let Some(test) = FlowySupabaseDocumentTest::new().await {
  35. let storage_service = test
  36. .document_manager
  37. .get_file_storage_service()
  38. .upgrade()
  39. .unwrap();
  40. // Upload zip file
  41. let object =
  42. StorageObject::from_file(&Uuid::new_v4().to_string(), "./tests/asset/test.txt.zip");
  43. let url = storage_service.create_object(object).await.unwrap();
  44. // Read zip file
  45. let zip_data = storage_service
  46. .get_object_by_url(url.clone())
  47. .await
  48. .unwrap();
  49. let reader = Cursor::new(zip_data);
  50. let mut archive = ZipArchive::new(reader).unwrap();
  51. for i in 0..archive.len() {
  52. let mut file = archive.by_index(i).unwrap();
  53. let name = file.name().to_string();
  54. let mut out = Vec::new();
  55. file.read_to_end(&mut out).unwrap();
  56. if name.starts_with("__MACOSX/") {
  57. continue;
  58. }
  59. assert_eq!(name, "test.txt");
  60. assert_eq!(String::from_utf8(out).unwrap(), "hello world");
  61. }
  62. // Delete the zip file
  63. let _ = storage_service.delete_object_by_url(url).await;
  64. }
  65. }
  66. #[tokio::test]
  67. async fn supabase_document_upload_image_test() {
  68. if let Some(test) = FlowySupabaseDocumentTest::new().await {
  69. let storage_service = test
  70. .document_manager
  71. .get_file_storage_service()
  72. .upgrade()
  73. .unwrap();
  74. // Upload zip file
  75. let object = StorageObject::from_file(&Uuid::new_v4().to_string(), "./tests/asset/logo.png");
  76. let url = storage_service.create_object(object).await.unwrap();
  77. let image_data = storage_service
  78. .get_object_by_url(url.clone())
  79. .await
  80. .unwrap();
  81. // Read the image file
  82. let mut file = File::open(Path::new("./tests/asset/logo.png")).unwrap();
  83. let mut local_data = Vec::new();
  84. file.read_to_end(&mut local_data).unwrap();
  85. assert_eq!(image_data, local_data);
  86. // Delete the image
  87. let _ = storage_service.delete_object_by_url(url).await;
  88. }
  89. }