WorkspacesController.spec.ts 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. import { WorkspaceAccessLevel, WorkspaceType } from '@standardnotes/common'
  2. import 'reflect-metadata'
  3. import { ProjectorInterface } from '../Domain/Projection/ProjectorInterface'
  4. import { WorkspaceProjection } from '../Domain/Projection/WorkspaceProjection'
  5. import { WorkspaceUserProjection } from '../Domain/Projection/WorkspaceUserProjection'
  6. import { AcceptInvitation } from '../Domain/UseCase/AcceptInvitation/AcceptInvitation'
  7. import { CreateWorkspace } from '../Domain/UseCase/CreateWorkspace/CreateWorkspace'
  8. import { InviteToWorkspace } from '../Domain/UseCase/InviteToWorkspace/InviteToWorkspace'
  9. import { ListWorkspaces } from '../Domain/UseCase/ListWorkspaces/ListWorkspaces'
  10. import { ListWorkspaceUsers } from '../Domain/UseCase/ListWorkspaceUsers/ListWorkspaceUsers'
  11. import { Workspace } from '../Domain/Workspace/Workspace'
  12. import { WorkspaceUser } from '../Domain/Workspace/WorkspaceUser'
  13. import { WorkspacesController } from './WorkspacesController'
  14. describe('WorkspacesController', () => {
  15. let doCreateWorkspace: CreateWorkspace
  16. let doInviteToWorkspace: InviteToWorkspace
  17. let doAcceptInvitation: AcceptInvitation
  18. let doListWorkspaces: ListWorkspaces
  19. let doListWorkspaceUsers: ListWorkspaceUsers
  20. let workspacesProject: ProjectorInterface<Workspace, WorkspaceProjection>
  21. let workspaceUsersProjector: ProjectorInterface<WorkspaceUser, WorkspaceUserProjection>
  22. let workspace1: Workspace
  23. let workspace2: Workspace
  24. let workspaceUser1: WorkspaceUser
  25. let workspaceUser2: WorkspaceUser
  26. const createController = () =>
  27. new WorkspacesController(
  28. doCreateWorkspace,
  29. doInviteToWorkspace,
  30. doListWorkspaces,
  31. doListWorkspaceUsers,
  32. doAcceptInvitation,
  33. workspacesProject,
  34. workspaceUsersProjector,
  35. )
  36. beforeEach(() => {
  37. doCreateWorkspace = {} as jest.Mocked<CreateWorkspace>
  38. doCreateWorkspace.execute = jest.fn().mockReturnValue({ workspace: { uuid: 'w-1-2-3' } })
  39. doInviteToWorkspace = {} as jest.Mocked<InviteToWorkspace>
  40. doInviteToWorkspace.execute = jest.fn().mockReturnValue({ invite: { uuid: 'i-1-2-3' } })
  41. doListWorkspaces = {} as jest.Mocked<ListWorkspaces>
  42. doListWorkspaces.execute = jest
  43. .fn()
  44. .mockReturnValue({ ownedWorkspaces: [workspace1], joinedWorkspaces: [workspace2] })
  45. doListWorkspaceUsers = {} as jest.Mocked<ListWorkspaceUsers>
  46. doListWorkspaceUsers.execute = jest.fn().mockReturnValue({ workspaceUsers: [workspaceUser1, workspaceUser2] })
  47. doAcceptInvitation = {} as jest.Mocked<AcceptInvitation>
  48. doAcceptInvitation.execute = jest.fn().mockReturnValue({ success: true })
  49. workspacesProject = {} as jest.Mocked<ProjectorInterface<Workspace, WorkspaceProjection>>
  50. workspacesProject.project = jest.fn().mockReturnValue({ foo: 'bar' })
  51. workspaceUsersProjector = {} as jest.Mocked<ProjectorInterface<WorkspaceUser, WorkspaceUserProjection>>
  52. workspaceUsersProjector.project = jest.fn().mockReturnValue({ bar: 'buzz' })
  53. })
  54. it('should create a workspace', async () => {
  55. const result = await createController().createWorkspace({
  56. encryptedPrivateKey: 'foo',
  57. encryptedWorkspaceKey: 'bar',
  58. publicKey: 'buzz',
  59. workspaceName: 'A Team',
  60. ownerUuid: 'u-1-2-3',
  61. workspaceType: WorkspaceType.Private,
  62. })
  63. expect(result).toEqual({
  64. data: {
  65. uuid: 'w-1-2-3',
  66. },
  67. status: 200,
  68. })
  69. })
  70. it('should invite to a workspace', async () => {
  71. const result = await createController().inviteToWorkspace({
  72. inviteeEmail: 'test@test.te',
  73. workspaceUuid: 'w-1-2-3',
  74. accessLevel: WorkspaceAccessLevel.ReadOnly,
  75. })
  76. expect(result).toEqual({
  77. data: {
  78. uuid: 'i-1-2-3',
  79. },
  80. status: 200,
  81. })
  82. })
  83. it('should accept an invite', async () => {
  84. const result = await createController().acceptInvite({
  85. userUuid: '1-2-3',
  86. encryptedPrivateKey: 'foo',
  87. inviteUuid: 'i-1-2-3',
  88. publicKey: 'bar',
  89. })
  90. expect(result).toEqual({
  91. data: {
  92. success: true,
  93. },
  94. status: 200,
  95. })
  96. })
  97. it('should not accept an invite if it fails', async () => {
  98. doAcceptInvitation.execute = jest.fn().mockReturnValue({ success: false })
  99. const result = await createController().acceptInvite({
  100. userUuid: '1-2-3',
  101. encryptedPrivateKey: 'foo',
  102. inviteUuid: 'i-1-2-3',
  103. publicKey: 'bar',
  104. })
  105. expect(result).toEqual({
  106. data: {
  107. error: {
  108. message: 'Could not accept invite',
  109. },
  110. },
  111. status: 400,
  112. })
  113. })
  114. it('should list workspaces', async () => {
  115. const result = await createController().listWorkspaces({
  116. userUuid: '1-2-3',
  117. })
  118. expect(result).toEqual({
  119. data: {
  120. ownedWorkspaces: [{ foo: 'bar' }],
  121. joinedWorkspaces: [{ foo: 'bar' }],
  122. },
  123. status: 200,
  124. })
  125. })
  126. it('should list workspace users', async () => {
  127. const result = await createController().listWorkspaceUsers({
  128. userUuid: '1-2-3',
  129. workspaceUuid: 'w-1-2-3',
  130. })
  131. expect(result).toEqual({
  132. data: {
  133. users: [{ bar: 'buzz' }, { bar: 'buzz' }],
  134. },
  135. status: 200,
  136. })
  137. })
  138. })