AppFlowy/frontend/rust-lib/flowy-server/tests/supabase_test/file_test.rs
Nathan.fooo c652c32575
feat File storage (#3306)
* refactor: file upload

* refactor: support upload plan

* test: add tests
2023-09-01 22:27:29 +08:00

78 lines
2 KiB
Rust

use url::Url;
use uuid::Uuid;
use flowy_storage::StorageObject;
use crate::supabase_test::util::{file_storage_service, get_supabase_ci_config};
#[tokio::test]
async fn supabase_get_object_test() {
if get_supabase_ci_config().is_none() {
return;
}
let service = file_storage_service();
let file_name = format!("test-{}.txt", Uuid::new_v4());
let object = StorageObject::from_file(&file_name, "tests/test.txt");
// Upload a file
let url = service
.create_object(object)
.await
.unwrap()
.parse::<Url>()
.unwrap();
// The url would be something like:
// https://acfrqdbdtbsceyjbxsfc.supabase.co/storage/v1/object/data/test-1693472809.txt
let name = url.path_segments().unwrap().last().unwrap();
assert_eq!(name, &file_name);
// Download the file
let bytes = service.get_object_by_url(url.to_string()).await.unwrap();
let s = String::from_utf8(bytes.to_vec()).unwrap();
assert_eq!(s, "hello world");
}
#[tokio::test]
async fn supabase_upload_image_test() {
if get_supabase_ci_config().is_none() {
return;
}
let service = file_storage_service();
let file_name = format!("image-{}.png", Uuid::new_v4());
let object = StorageObject::from_file(&file_name, "tests/logo.png");
// Upload a file
let url = service
.create_object(object)
.await
.unwrap()
.parse::<Url>()
.unwrap();
// Download object by url
let bytes = service.get_object_by_url(url.to_string()).await.unwrap();
assert_eq!(bytes.len(), 15694);
}
#[tokio::test]
async fn supabase_delete_object_test() {
if get_supabase_ci_config().is_none() {
return;
}
let service = file_storage_service();
let file_name = format!("test-{}.txt", Uuid::new_v4());
let object = StorageObject::from_file(&file_name, "tests/test.txt");
let url = service.create_object(object).await.unwrap();
let result = service.get_object_by_url(url.clone()).await;
assert!(result.is_ok());
let _ = service.delete_object_by_url(url.clone()).await;
let result = service.get_object_by_url(url.clone()).await;
assert!(result.is_err());
}