feat: shared vault invites controller and use cases (#647)

* feat: get shared vault invites sent by user.

Co-authored-by: Mo <[email protected]>

* feat: shared vault invites controller.

Co-authored-by: Mo <[email protected]>

---------

Co-authored-by: Mo <[email protected]>
This commit is contained in:
Karol Sójko
2023-07-07 13:39:43 +02:00
committed by GitHub
co-authored by Mo
parent f9e51ef06e
commit 72310130d2
17 changed files with 782 additions and 3 deletions
@@ -0,0 +1,59 @@
import { Uuid, Timestamps } from '@standardnotes/domain-core'
import { SharedVaultInvite } from '../../SharedVault/User/Invite/SharedVaultInvite'
import { SharedVaultInviteRepositoryInterface } from '../../SharedVault/User/Invite/SharedVaultInviteRepositoryInterface'
import { SharedVaultUserPermission } from '../../SharedVault/User/SharedVaultUserPermission'
import { GetSharedVaultInvitesSentToUser } from './GetSharedVaultInvitesSentToUser'
describe('GetSharedVaultInvitesSentToUser', () => {
let sharedVaultInviteRepository: SharedVaultInviteRepositoryInterface
let invite: SharedVaultInvite
const createUseCase = () => new GetSharedVaultInvitesSentToUser(sharedVaultInviteRepository)
beforeEach(() => {
invite = SharedVaultInvite.create({
sharedVaultUuid: Uuid.create('00000000-0000-0000-0000-000000000000').getValue(),
userUuid: Uuid.create('00000000-0000-0000-0000-000000000000').getValue(),
senderUuid: Uuid.create('00000000-0000-0000-0000-000000000000').getValue(),
encryptedMessage: 'encrypted-message',
permission: SharedVaultUserPermission.create(SharedVaultUserPermission.PERMISSIONS.Read).getValue(),
timestamps: Timestamps.create(123, 123).getValue(),
}).getValue()
sharedVaultInviteRepository = {} as jest.Mocked<SharedVaultInviteRepositoryInterface>
sharedVaultInviteRepository.findByUserUuid = jest.fn().mockResolvedValue([invite])
})
it('should return invites sent to user', async () => {
const useCase = createUseCase()
const result = await useCase.execute({
userUuid: '00000000-0000-0000-0000-000000000000',
})
expect(result.getValue()).toEqual([invite])
})
it('should return empty array if no invites found', async () => {
const useCase = createUseCase()
sharedVaultInviteRepository.findByUserUuid = jest.fn().mockReturnValue([])
const result = await useCase.execute({
userUuid: '00000000-0000-0000-0000-000000000000',
})
expect(result.getValue()).toEqual([])
})
it('should fail if sender uuid is not valid', async () => {
const useCase = createUseCase()
const result = await useCase.execute({
userUuid: 'invalid-uuid',
})
expect(result.isFailed()).toBeTruthy()
})
})
@@ -0,0 +1,18 @@
import { Result, UseCaseInterface, Uuid } from '@standardnotes/domain-core'
import { SharedVaultInvite } from '../../SharedVault/User/Invite/SharedVaultInvite'
import { GetSharedVaultInvitesSentToUserDTO } from './GetSharedVaultInvitesSentToUserDTO'
import { SharedVaultInviteRepositoryInterface } from '../../SharedVault/User/Invite/SharedVaultInviteRepositoryInterface'
export class GetSharedVaultInvitesSentToUser implements UseCaseInterface<SharedVaultInvite[]> {
constructor(private sharedVaultInviteRepository: SharedVaultInviteRepositoryInterface) {}
async execute(dto: GetSharedVaultInvitesSentToUserDTO): Promise<Result<SharedVaultInvite[]>> {
const userUuidOrError = Uuid.create(dto.userUuid)
if (userUuidOrError.isFailed()) {
return Result.fail(userUuidOrError.getError())
}
const userUuid = userUuidOrError.getValue()
return Result.ok(await this.sharedVaultInviteRepository.findByUserUuid(userUuid))
}
}
@@ -0,0 +1,3 @@
export interface GetSharedVaultInvitesSentToUserDTO {
userUuid: string
}