feat: add listin worspaces and workspace users

This commit is contained in:
Karol Sójko
2022-10-11 15:24:21 +02:00
parent 1292d1d898
commit 095d13f8bb
42 changed files with 835 additions and 93 deletions
@@ -1,16 +1,42 @@
import { WorkspaceAccessLevel, WorkspaceType } from '@standardnotes/common'
import 'reflect-metadata'
import { ProjectorInterface } from '../Domain/Projection/ProjectorInterface'
import { WorkspaceProjection } from '../Domain/Projection/WorkspaceProjection'
import { WorkspaceUserProjection } from '../Domain/Projection/WorkspaceUserProjection'
import { AcceptInvitation } from '../Domain/UseCase/AcceptInvitation/AcceptInvitation'
import { CreateWorkspace } from '../Domain/UseCase/CreateWorkspace/CreateWorkspace'
import { InviteToWorkspace } from '../Domain/UseCase/InviteToWorkspace/InviteToWorkspace'
import { ListWorkspaces } from '../Domain/UseCase/ListWorkspaces/ListWorkspaces'
import { ListWorkspaceUsers } from '../Domain/UseCase/ListWorkspaceUsers/ListWorkspaceUsers'
import { Workspace } from '../Domain/Workspace/Workspace'
import { WorkspaceUser } from '../Domain/Workspace/WorkspaceUser'
import { WorkspacesController } from './WorkspacesController'
describe('WorkspacesController', () => {
let doCreateWorkspace: CreateWorkspace
let doInviteToWorkspace: InviteToWorkspace
let doAcceptInvitation: AcceptInvitation
let doListWorkspaces: ListWorkspaces
let doListWorkspaceUsers: ListWorkspaceUsers
let workspacesProject: ProjectorInterface<Workspace, WorkspaceProjection>
let workspaceUsersProjector: ProjectorInterface<WorkspaceUser, WorkspaceUserProjection>
let workspace1: Workspace
let workspace2: Workspace
let workspaceUser1: WorkspaceUser
let workspaceUser2: WorkspaceUser
const createController = () => new WorkspacesController(doCreateWorkspace, doInviteToWorkspace)
const createController = () =>
new WorkspacesController(
doCreateWorkspace,
doInviteToWorkspace,
doListWorkspaces,
doListWorkspaceUsers,
doAcceptInvitation,
workspacesProject,
workspaceUsersProjector,
)
beforeEach(() => {
doCreateWorkspace = {} as jest.Mocked<CreateWorkspace>
@@ -18,6 +44,23 @@ describe('WorkspacesController', () => {
doInviteToWorkspace = {} as jest.Mocked<InviteToWorkspace>
doInviteToWorkspace.execute = jest.fn().mockReturnValue({ invite: { uuid: 'i-1-2-3' } })
doListWorkspaces = {} as jest.Mocked<ListWorkspaces>
doListWorkspaces.execute = jest
.fn()
.mockReturnValue({ ownedWorkspaces: [workspace1], joinedWorkspaces: [workspace2] })
doListWorkspaceUsers = {} as jest.Mocked<ListWorkspaceUsers>
doListWorkspaceUsers.execute = jest.fn().mockReturnValue({ workspaceUsers: [workspaceUser1, workspaceUser2] })
doAcceptInvitation = {} as jest.Mocked<AcceptInvitation>
doAcceptInvitation.execute = jest.fn().mockReturnValue({ success: true })
workspacesProject = {} as jest.Mocked<ProjectorInterface<Workspace, WorkspaceProjection>>
workspacesProject.project = jest.fn().mockReturnValue({ foo: 'bar' })
workspaceUsersProjector = {} as jest.Mocked<ProjectorInterface<WorkspaceUser, WorkspaceUserProjection>>
workspaceUsersProjector.project = jest.fn().mockReturnValue({ bar: 'buzz' })
})
it('should create a workspace', async () => {
@@ -52,4 +95,67 @@ describe('WorkspacesController', () => {
status: 200,
})
})
it('should accept an invite', async () => {
const result = await createController().acceptInvite({
userUuid: '1-2-3',
encryptedPrivateKey: 'foo',
inviteUuid: 'i-1-2-3',
publicKey: 'bar',
})
expect(result).toEqual({
data: {
success: true,
},
status: 200,
})
})
it('should not accept an invite if it fails', async () => {
doAcceptInvitation.execute = jest.fn().mockReturnValue({ success: false })
const result = await createController().acceptInvite({
userUuid: '1-2-3',
encryptedPrivateKey: 'foo',
inviteUuid: 'i-1-2-3',
publicKey: 'bar',
})
expect(result).toEqual({
data: {
error: {
message: 'Could not accept invite',
},
},
status: 400,
})
})
it('should list workspaces', async () => {
const result = await createController().listWorkspaces({
userUuid: '1-2-3',
})
expect(result).toEqual({
data: {
ownedWorkspaces: [{ foo: 'bar' }],
joinedWorkspaces: [{ foo: 'bar' }],
},
status: 200,
})
})
it('should list workspace users', async () => {
const result = await createController().listWorkspaceUsers({
userUuid: '1-2-3',
workspaceUuid: 'w-1-2-3',
})
expect(result).toEqual({
data: {
users: [{ bar: 'buzz' }, { bar: 'buzz' }],
},
status: 200,
})
})
})