feat: save user metadata (#3754)

* feat: save user metadata

* chore: update client api

* refactor: separate test methods

* chore: save updated at

* chore: clippy

* chore: fix test
This commit is contained in:
Nathan.fooo
2023-10-24 20:11:06 +08:00
committed by GitHub
parent 16a4babdca
commit 71f80be8f7
62 changed files with 1525 additions and 1476 deletions

View File

@ -1,7 +1,7 @@
use collab_folder::core::ViewLayout;
use event_integration::event_builder::EventBuilder;
use event_integration::FlowyCoreTest;
use event_integration::EventIntegrationTest;
use flowy_folder2::entities::icon::{UpdateViewIconPayloadPB, ViewIconPB};
use flowy_folder2::entities::*;
use flowy_folder2::event_map::FolderEvent::*;
@ -64,7 +64,7 @@ pub enum FolderScript {
}
pub struct FolderTest {
pub sdk: FlowyCoreTest,
pub sdk: EventIntegrationTest,
pub all_workspace: Vec<WorkspacePB>,
pub workspace: WorkspacePB,
pub parent_view: ViewPB,
@ -75,7 +75,7 @@ pub struct FolderTest {
impl FolderTest {
pub async fn new() -> Self {
let sdk = FlowyCoreTest::new();
let sdk = EventIntegrationTest::new();
let _ = sdk.init_user().await;
let workspace = create_workspace(&sdk, "FolderWorkspace", "Folder test workspace").await;
let parent_view = create_app(&sdk, &workspace.id, "Folder App", "Folder test app").await;
@ -201,7 +201,7 @@ impl FolderTest {
}
}
}
pub async fn create_workspace(sdk: &FlowyCoreTest, name: &str, desc: &str) -> WorkspacePB {
pub async fn create_workspace(sdk: &EventIntegrationTest, name: &str, desc: &str) -> WorkspacePB {
let request = CreateWorkspacePayloadPB {
name: name.to_owned(),
desc: desc.to_owned(),
@ -215,7 +215,10 @@ pub async fn create_workspace(sdk: &FlowyCoreTest, name: &str, desc: &str) -> Wo
.parse::<WorkspacePB>()
}
pub async fn read_workspace(sdk: &FlowyCoreTest, workspace_id: Option<String>) -> Vec<WorkspacePB> {
pub async fn read_workspace(
sdk: &EventIntegrationTest,
workspace_id: Option<String>,
) -> Vec<WorkspacePB> {
let request = WorkspaceIdPB {
value: workspace_id,
};
@ -241,7 +244,12 @@ pub async fn read_workspace(sdk: &FlowyCoreTest, workspace_id: Option<String>) -
workspaces
}
pub async fn create_app(sdk: &FlowyCoreTest, workspace_id: &str, name: &str, desc: &str) -> ViewPB {
pub async fn create_app(
sdk: &EventIntegrationTest,
workspace_id: &str,
name: &str,
desc: &str,
) -> ViewPB {
let create_view_request = CreateViewPayloadPB {
parent_view_id: workspace_id.to_owned(),
name: name.to_string(),
@ -263,7 +271,7 @@ pub async fn create_app(sdk: &FlowyCoreTest, workspace_id: &str, name: &str, des
}
pub async fn create_view(
sdk: &FlowyCoreTest,
sdk: &EventIntegrationTest,
app_id: &str,
name: &str,
desc: &str,
@ -288,7 +296,7 @@ pub async fn create_view(
.parse::<ViewPB>()
}
pub async fn read_view(sdk: &FlowyCoreTest, view_id: &str) -> ViewPB {
pub async fn read_view(sdk: &EventIntegrationTest, view_id: &str) -> ViewPB {
let view_id = ViewIdPB::from(view_id);
EventBuilder::new(sdk.clone())
.event(ReadView)
@ -299,7 +307,7 @@ pub async fn read_view(sdk: &FlowyCoreTest, view_id: &str) -> ViewPB {
}
pub async fn move_view(
sdk: &FlowyCoreTest,
sdk: &EventIntegrationTest,
view_id: String,
parent_id: String,
prev_view_id: Option<String>,
@ -319,7 +327,7 @@ pub async fn move_view(
assert!(error.is_none());
}
pub async fn update_view(
sdk: &FlowyCoreTest,
sdk: &EventIntegrationTest,
view_id: &str,
name: Option<String>,
desc: Option<String>,
@ -340,7 +348,7 @@ pub async fn update_view(
.await;
}
pub async fn update_view_icon(sdk: &FlowyCoreTest, view_id: &str, icon: Option<ViewIconPB>) {
pub async fn update_view_icon(sdk: &EventIntegrationTest, view_id: &str, icon: Option<ViewIconPB>) {
let request = UpdateViewIconPayloadPB {
view_id: view_id.to_string(),
icon,
@ -352,7 +360,7 @@ pub async fn update_view_icon(sdk: &FlowyCoreTest, view_id: &str, icon: Option<V
.await;
}
pub async fn delete_view(sdk: &FlowyCoreTest, view_ids: Vec<String>) {
pub async fn delete_view(sdk: &EventIntegrationTest, view_ids: Vec<String>) {
let request = RepeatedViewIdPB { items: view_ids };
EventBuilder::new(sdk.clone())
.event(DeleteView)
@ -361,7 +369,7 @@ pub async fn delete_view(sdk: &FlowyCoreTest, view_ids: Vec<String>) {
.await;
}
pub async fn read_trash(sdk: &FlowyCoreTest) -> RepeatedTrashPB {
pub async fn read_trash(sdk: &EventIntegrationTest) -> RepeatedTrashPB {
EventBuilder::new(sdk.clone())
.event(ReadTrash)
.async_send()
@ -369,7 +377,7 @@ pub async fn read_trash(sdk: &FlowyCoreTest) -> RepeatedTrashPB {
.parse::<RepeatedTrashPB>()
}
pub async fn restore_app_from_trash(sdk: &FlowyCoreTest, app_id: &str) {
pub async fn restore_app_from_trash(sdk: &EventIntegrationTest, app_id: &str) {
let id = TrashIdPB {
id: app_id.to_owned(),
};
@ -380,7 +388,7 @@ pub async fn restore_app_from_trash(sdk: &FlowyCoreTest, app_id: &str) {
.await;
}
pub async fn restore_view_from_trash(sdk: &FlowyCoreTest, view_id: &str) {
pub async fn restore_view_from_trash(sdk: &EventIntegrationTest, view_id: &str) {
let id = TrashIdPB {
id: view_id.to_owned(),
};
@ -391,14 +399,14 @@ pub async fn restore_view_from_trash(sdk: &FlowyCoreTest, view_id: &str) {
.await;
}
pub async fn delete_all_trash(sdk: &FlowyCoreTest) {
pub async fn delete_all_trash(sdk: &EventIntegrationTest) {
EventBuilder::new(sdk.clone())
.event(DeleteAllTrash)
.async_send()
.await;
}
pub async fn toggle_favorites(sdk: &FlowyCoreTest, view_id: Vec<String>) {
pub async fn toggle_favorites(sdk: &EventIntegrationTest, view_id: Vec<String>) {
let request = RepeatedViewIdPB { items: view_id };
EventBuilder::new(sdk.clone())
.event(ToggleFavorite)
@ -407,7 +415,7 @@ pub async fn toggle_favorites(sdk: &FlowyCoreTest, view_id: Vec<String>) {
.await;
}
pub async fn read_favorites(sdk: &FlowyCoreTest) -> RepeatedViewPB {
pub async fn read_favorites(sdk: &EventIntegrationTest) -> RepeatedViewPB {
EventBuilder::new(sdk.clone())
.event(ReadFavorites)
.async_send()

View File

@ -1,6 +1,6 @@
use std::time::Duration;
use event_integration::FlowyCoreTest;
use event_integration::EventIntegrationTest;
use flowy_folder2::entities::{ChildViewUpdatePB, RepeatedViewPB, UpdateViewPayloadPB};
use flowy_folder2::notification::FolderNotification;
@ -16,7 +16,7 @@ use crate::util::receive_with_timeout;
/// 5. Await the notification for workspace view updates with a timeout of 30 seconds.
/// 6. Ensure that the received views contain the newly created "test_view".
async fn create_child_view_in_workspace_subscription_test() {
let test = FlowyCoreTest::new_with_guest_user().await;
let test = EventIntegrationTest::new_with_guest_user().await;
let workspace = test.get_current_workspace().await.workspace;
let mut rx = test
.notification_sender
@ -40,7 +40,7 @@ async fn create_child_view_in_workspace_subscription_test() {
#[tokio::test]
async fn create_child_view_in_view_subscription_test() {
let test = FlowyCoreTest::new_with_guest_user().await;
let test = EventIntegrationTest::new_with_guest_user().await;
let mut workspace = test.get_current_workspace().await.workspace;
let workspace_child_view = workspace.views.pop().unwrap();
let mut rx = test.notification_sender.subscribe::<ChildViewUpdatePB>(
@ -72,7 +72,7 @@ async fn create_child_view_in_view_subscription_test() {
#[tokio::test]
async fn delete_view_subscription_test() {
let test = FlowyCoreTest::new_with_guest_user().await;
let test = EventIntegrationTest::new_with_guest_user().await;
let workspace = test.get_current_workspace().await.workspace;
let mut rx = test
.notification_sender
@ -94,7 +94,7 @@ async fn delete_view_subscription_test() {
#[tokio::test]
async fn update_view_subscription_test() {
let test = FlowyCoreTest::new_with_guest_user().await;
let test = EventIntegrationTest::new_with_guest_user().await;
let mut workspace = test.get_current_workspace().await.workspace;
let mut rx = test
.notification_sender

View File

@ -1,12 +1,12 @@
use event_integration::event_builder::EventBuilder;
use event_integration::FlowyCoreTest;
use event_integration::EventIntegrationTest;
use flowy_folder2::entities::icon::{UpdateViewIconPayloadPB, ViewIconPB, ViewIconTypePB};
use flowy_folder2::entities::*;
use flowy_user::errors::ErrorCode;
#[tokio::test]
async fn create_workspace_event_test() {
let test = FlowyCoreTest::new_with_guest_user().await;
let test = EventIntegrationTest::new_with_guest_user().await;
let request = CreateWorkspacePayloadPB {
name: "my second workspace".to_owned(),
desc: "".to_owned(),
@ -22,7 +22,7 @@ async fn create_workspace_event_test() {
#[tokio::test]
async fn open_workspace_event_test() {
let test = FlowyCoreTest::new_with_guest_user().await;
let test = EventIntegrationTest::new_with_guest_user().await;
let payload = CreateWorkspacePayloadPB {
name: "my second workspace".to_owned(),
desc: "".to_owned(),
@ -52,7 +52,7 @@ async fn open_workspace_event_test() {
#[tokio::test]
async fn create_view_event_test() {
let test = FlowyCoreTest::new_with_guest_user().await;
let test = EventIntegrationTest::new_with_guest_user().await;
let current_workspace = test.get_current_workspace().await.workspace;
let view = test
.create_view(&current_workspace.id, "My first view".to_string())
@ -64,7 +64,7 @@ async fn create_view_event_test() {
#[tokio::test]
async fn update_view_event_with_name_test() {
let test = FlowyCoreTest::new_with_guest_user().await;
let test = EventIntegrationTest::new_with_guest_user().await;
let current_workspace = test.get_current_workspace().await.workspace;
let view = test
.create_view(&current_workspace.id, "My first view".to_string())
@ -85,7 +85,7 @@ async fn update_view_event_with_name_test() {
#[tokio::test]
async fn update_view_icon_event_test() {
let test = FlowyCoreTest::new_with_guest_user().await;
let test = EventIntegrationTest::new_with_guest_user().await;
let current_workspace = test.get_current_workspace().await.workspace;
let view = test
.create_view(&current_workspace.id, "My first view".to_string())
@ -109,7 +109,7 @@ async fn update_view_icon_event_test() {
#[tokio::test]
async fn delete_view_event_test() {
let test = FlowyCoreTest::new_with_guest_user().await;
let test = EventIntegrationTest::new_with_guest_user().await;
let current_workspace = test.get_current_workspace().await.workspace;
let view = test
.create_view(&current_workspace.id, "My first view".to_string())
@ -132,7 +132,7 @@ async fn delete_view_event_test() {
#[tokio::test]
async fn put_back_trash_event_test() {
let test = FlowyCoreTest::new_with_guest_user().await;
let test = EventIntegrationTest::new_with_guest_user().await;
let current_workspace = test.get_current_workspace().await.workspace;
let view = test
.create_view(&current_workspace.id, "My first view".to_string())
@ -175,7 +175,7 @@ async fn put_back_trash_event_test() {
#[tokio::test]
async fn delete_view_permanently_event_test() {
let test = FlowyCoreTest::new_with_guest_user().await;
let test = EventIntegrationTest::new_with_guest_user().await;
let current_workspace = test.get_current_workspace().await.workspace;
let view = test
.create_view(&current_workspace.id, "My first view".to_string())
@ -224,7 +224,7 @@ async fn delete_view_permanently_event_test() {
#[tokio::test]
async fn delete_all_trash_test() {
let test = FlowyCoreTest::new_with_guest_user().await;
let test = EventIntegrationTest::new_with_guest_user().await;
let current_workspace = test.get_current_workspace().await.workspace;
for i in 0..3 {
@ -268,7 +268,7 @@ async fn delete_all_trash_test() {
#[tokio::test]
async fn multiple_hierarchy_view_test() {
let test = FlowyCoreTest::new_with_guest_user().await;
let test = EventIntegrationTest::new_with_guest_user().await;
let current_workspace = test.get_current_workspace().await.workspace;
for i in 1..4 {
let parent = test
@ -344,7 +344,7 @@ async fn multiple_hierarchy_view_test() {
#[tokio::test]
async fn move_view_event_test() {
let test = FlowyCoreTest::new_with_guest_user().await;
let test = EventIntegrationTest::new_with_guest_user().await;
let current_workspace = test.get_current_workspace().await.workspace;
for i in 1..4 {
let parent = test
@ -382,7 +382,7 @@ async fn move_view_event_test() {
#[tokio::test]
async fn move_view_event_after_delete_view_test() {
let test = FlowyCoreTest::new_with_guest_user().await;
let test = EventIntegrationTest::new_with_guest_user().await;
let current_workspace = test.get_current_workspace().await.workspace;
for i in 1..6 {
let _ = test
@ -424,7 +424,7 @@ async fn move_view_event_after_delete_view_test() {
#[tokio::test]
async fn move_view_event_after_delete_view_test2() {
let test = FlowyCoreTest::new_with_guest_user().await;
let test = EventIntegrationTest::new_with_guest_user().await;
let current_workspace = test.get_current_workspace().await.workspace;
let parent = test
.create_view(&current_workspace.id, "My view".to_string())
@ -466,7 +466,7 @@ async fn move_view_event_after_delete_view_test2() {
#[tokio::test]
async fn create_parent_view_with_invalid_name() {
for (name, code) in invalid_workspace_name_test_case() {
let sdk = FlowyCoreTest::new();
let sdk = EventIntegrationTest::new();
let request = CreateWorkspacePayloadPB {
name,
desc: "".to_owned(),
@ -494,7 +494,7 @@ fn invalid_workspace_name_test_case() -> Vec<(String, ErrorCode)> {
#[tokio::test]
async fn move_view_across_parent_test() {
let test = FlowyCoreTest::new_with_guest_user().await;
let test = EventIntegrationTest::new_with_guest_user().await;
let current_workspace = test.get_current_workspace().await.workspace;
let parent_1 = test
.create_view(&current_workspace.id, "My view 1".to_string())
@ -539,7 +539,7 @@ async fn move_view_across_parent_test() {
}
async fn move_folder_nested_view(
sdk: FlowyCoreTest,
sdk: EventIntegrationTest,
view_id: String,
new_parent_id: String,
prev_view_id: Option<String>,