feat: workspace invite (#4827)

* feat: add rename and change icon for workspace cloud api

* feat: added created at field for UserWorkspacePB

* test: added view check after creating workspace

* fix: allow new_icon to be empty string

* feat: add invitation api cloud services

* chore: cargo clippy

* chore: merge conflict

* feat: add workspace invitation test

* fix: use back old role and af role

* chore: use 1.75 channel rust toolchain

* chore: added error for test case

* chore: added ci var

* chore: cargo clippy
This commit is contained in:
Zack
2024-04-11 14:47:34 +08:00
committed by GitHub
parent b51ff318a1
commit 828f312294
13 changed files with 379 additions and 34 deletions

View File

@ -3,36 +3,84 @@ use flowy_folder::entities::*;
use flowy_folder::event_map::FolderEvent;
use flowy_folder::event_map::FolderEvent::*;
use flowy_user::entities::{
AddWorkspaceMemberPB, QueryWorkspacePB, RemoveWorkspaceMemberPB, RepeatedWorkspaceMemberPB,
AcceptWorkspaceInvitationPB, AddWorkspaceMemberPB, QueryWorkspacePB, RemoveWorkspaceMemberPB,
RepeatedWorkspaceInvitationPB, RepeatedWorkspaceMemberPB, WorkspaceMemberInvitationPB,
WorkspaceMemberPB,
};
use flowy_user::errors::FlowyError;
use flowy_user::event_map::UserEvent;
use flowy_user_pub::entities::Role;
use crate::event_builder::EventBuilder;
use crate::EventIntegrationTest;
impl EventIntegrationTest {
pub async fn add_workspace_member(&self, workspace_id: &str, email: &str) {
EventBuilder::new(self.clone())
if let Some(err) = EventBuilder::new(self.clone())
.event(UserEvent::AddWorkspaceMember)
.payload(AddWorkspaceMemberPB {
workspace_id: workspace_id.to_string(),
email: email.to_string(),
})
.async_send()
.await;
.await
.error()
{
panic!("Add workspace member failed: {:?}", err);
}
}
pub async fn invite_workspace_member(&self, workspace_id: &str, email: &str, role: Role) {
if let Some(err) = EventBuilder::new(self.clone())
.event(UserEvent::InviteWorkspaceMember)
.payload(WorkspaceMemberInvitationPB {
workspace_id: workspace_id.to_string(),
invitee_email: email.to_string(),
role: role.into(),
})
.async_send()
.await
.error()
{
panic!("Invite workspace member failed: {:?}", err);
}
}
pub async fn list_workspace_invitations(&self) -> RepeatedWorkspaceInvitationPB {
EventBuilder::new(self.clone())
.event(UserEvent::ListWorkspaceInvitations)
.async_send()
.await
.parse()
}
pub async fn accept_workspace_invitation(&self, invitation_id: &str) {
if let Some(err) = EventBuilder::new(self.clone())
.event(UserEvent::AcceptWorkspaceInvitation)
.payload(AcceptWorkspaceInvitationPB {
invite_id: invitation_id.to_string(),
})
.async_send()
.await
.error()
{
panic!("Accept workspace invitation failed: {:?}", err)
};
}
pub async fn delete_workspace_member(&self, workspace_id: &str, email: &str) {
EventBuilder::new(self.clone())
if let Some(err) = EventBuilder::new(self.clone())
.event(UserEvent::RemoveWorkspaceMember)
.payload(RemoveWorkspaceMemberPB {
workspace_id: workspace_id.to_string(),
email: email.to_string(),
})
.async_send()
.await;
.await
.error()
{
panic!("Delete workspace member failed: {:?}", err)
};
}
pub async fn get_workspace_members(&self, workspace_id: &str) -> Vec<WorkspaceMemberPB> {
@ -78,11 +126,15 @@ impl EventIntegrationTest {
};
// delete the view. the view will be moved to trash
EventBuilder::new(self.clone())
if let Some(err) = EventBuilder::new(self.clone())
.event(FolderEvent::DeleteView)
.payload(payload)
.async_send()
.await;
.await
.error()
{
panic!("Delete view failed: {:?}", err)
};
}
pub async fn update_view(&self, changeset: UpdateViewPayloadPB) -> Option<FlowyError> {