2023-09-01 22:27:29 +08:00
|
|
|
use std::fs::File;
|
|
|
|
use std::io::{Cursor, Read};
|
|
|
|
use std::path::Path;
|
|
|
|
|
|
|
|
use uuid::Uuid;
|
|
|
|
use zip::ZipArchive;
|
|
|
|
|
|
|
|
use flowy_storage::StorageObject;
|
|
|
|
|
|
|
|
use crate::document::supabase_test::helper::FlowySupabaseDocumentTest;
|
|
|
|
|
|
|
|
#[tokio::test]
|
|
|
|
async fn supabase_document_upload_text_file_test() {
|
|
|
|
if let Some(test) = FlowySupabaseDocumentTest::new().await {
|
2023-10-12 09:54:45 +08:00
|
|
|
let workspace_id = test.get_current_workspace().await.workspace.id;
|
2023-09-01 22:27:29 +08:00
|
|
|
let storage_service = test
|
|
|
|
.document_manager
|
|
|
|
.get_file_storage_service()
|
|
|
|
.upgrade()
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
let object = StorageObject::from_bytes(
|
2023-10-12 09:54:45 +08:00
|
|
|
&workspace_id,
|
2023-09-01 22:27:29 +08:00
|
|
|
&Uuid::new_v4().to_string(),
|
|
|
|
"hello world".as_bytes(),
|
|
|
|
"text/plain".to_string(),
|
|
|
|
);
|
|
|
|
|
|
|
|
let url = storage_service.create_object(object).await.unwrap();
|
|
|
|
|
|
|
|
let bytes = storage_service
|
|
|
|
.get_object_by_url(url.clone())
|
|
|
|
.await
|
|
|
|
.unwrap();
|
|
|
|
let s = String::from_utf8(bytes.to_vec()).unwrap();
|
|
|
|
assert_eq!(s, "hello world");
|
|
|
|
|
|
|
|
// Delete the text file
|
|
|
|
let _ = storage_service.delete_object_by_url(url).await;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#[tokio::test]
|
|
|
|
async fn supabase_document_upload_zip_file_test() {
|
|
|
|
if let Some(test) = FlowySupabaseDocumentTest::new().await {
|
2023-10-12 09:54:45 +08:00
|
|
|
let workspace_id = test.get_current_workspace().await.workspace.id;
|
2023-09-01 22:27:29 +08:00
|
|
|
let storage_service = test
|
|
|
|
.document_manager
|
|
|
|
.get_file_storage_service()
|
|
|
|
.upgrade()
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
// Upload zip file
|
2023-10-12 09:54:45 +08:00
|
|
|
let object = StorageObject::from_file(
|
|
|
|
&workspace_id,
|
|
|
|
&Uuid::new_v4().to_string(),
|
|
|
|
"./tests/asset/test.txt.zip",
|
|
|
|
);
|
2023-09-01 22:27:29 +08:00
|
|
|
let url = storage_service.create_object(object).await.unwrap();
|
|
|
|
|
|
|
|
// Read zip file
|
|
|
|
let zip_data = storage_service
|
|
|
|
.get_object_by_url(url.clone())
|
|
|
|
.await
|
|
|
|
.unwrap();
|
|
|
|
let reader = Cursor::new(zip_data);
|
|
|
|
let mut archive = ZipArchive::new(reader).unwrap();
|
|
|
|
for i in 0..archive.len() {
|
|
|
|
let mut file = archive.by_index(i).unwrap();
|
|
|
|
let name = file.name().to_string();
|
|
|
|
let mut out = Vec::new();
|
|
|
|
file.read_to_end(&mut out).unwrap();
|
|
|
|
|
|
|
|
if name.starts_with("__MACOSX/") {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
assert_eq!(name, "test.txt");
|
|
|
|
assert_eq!(String::from_utf8(out).unwrap(), "hello world");
|
|
|
|
}
|
|
|
|
|
|
|
|
// Delete the zip file
|
|
|
|
let _ = storage_service.delete_object_by_url(url).await;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#[tokio::test]
|
|
|
|
async fn supabase_document_upload_image_test() {
|
|
|
|
if let Some(test) = FlowySupabaseDocumentTest::new().await {
|
2023-10-12 09:54:45 +08:00
|
|
|
let workspace_id = test.get_current_workspace().await.workspace.id;
|
2023-09-01 22:27:29 +08:00
|
|
|
let storage_service = test
|
|
|
|
.document_manager
|
|
|
|
.get_file_storage_service()
|
|
|
|
.upgrade()
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
// Upload zip file
|
2023-10-12 09:54:45 +08:00
|
|
|
let object = StorageObject::from_file(
|
|
|
|
&workspace_id,
|
|
|
|
&Uuid::new_v4().to_string(),
|
|
|
|
"./tests/asset/logo.png",
|
|
|
|
);
|
2023-09-01 22:27:29 +08:00
|
|
|
let url = storage_service.create_object(object).await.unwrap();
|
|
|
|
|
|
|
|
let image_data = storage_service
|
|
|
|
.get_object_by_url(url.clone())
|
|
|
|
.await
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
// Read the image file
|
|
|
|
let mut file = File::open(Path::new("./tests/asset/logo.png")).unwrap();
|
|
|
|
let mut local_data = Vec::new();
|
|
|
|
file.read_to_end(&mut local_data).unwrap();
|
|
|
|
|
|
|
|
assert_eq!(image_data, local_data);
|
|
|
|
|
|
|
|
// Delete the image
|
|
|
|
let _ = storage_service.delete_object_by_url(url).await;
|
|
|
|
}
|
|
|
|
}
|