Files
standardnotes-server/packages/auth/src/Infra/MySQL/MySQLSharedSubscriptionInvitationRepository.spec.ts
T

101 lines
3.7 KiB
TypeScript

import 'reflect-metadata'
import { Repository, SelectQueryBuilder } from 'typeorm'
import { MySQLSharedSubscriptionInvitationRepository } from './MySQLSharedSubscriptionInvitationRepository'
import { SharedSubscriptionInvitation } from '../../Domain/SharedSubscription/SharedSubscriptionInvitation'
import { InvitationStatus } from '../../Domain/SharedSubscription/InvitationStatus'
describe('MySQLSharedSubscriptionInvitationRepository', () => {
let ormRepository: Repository<SharedSubscriptionInvitation>
let queryBuilder: SelectQueryBuilder<SharedSubscriptionInvitation>
let invitation: SharedSubscriptionInvitation
const createRepository = () => new MySQLSharedSubscriptionInvitationRepository(ormRepository)
beforeEach(() => {
queryBuilder = {} as jest.Mocked<SelectQueryBuilder<SharedSubscriptionInvitation>>
invitation = {} as jest.Mocked<SharedSubscriptionInvitation>
ormRepository = {} as jest.Mocked<Repository<SharedSubscriptionInvitation>>
ormRepository.createQueryBuilder = jest.fn().mockImplementation(() => queryBuilder)
ormRepository.save = jest.fn()
})
it('should save', async () => {
await createRepository().save(invitation)
expect(ormRepository.save).toHaveBeenCalledWith(invitation)
})
it('should get invitations by inviter email', async () => {
queryBuilder.where = jest.fn().mockReturnThis()
queryBuilder.getMany = jest.fn().mockReturnValue([])
const result = await createRepository().findByInviterEmail('[email protected]')
expect(queryBuilder.where).toHaveBeenCalledWith('invitation.inviter_identifier = :inviterEmail', {
inviterEmail: '[email protected]',
})
expect(result).toEqual([])
})
it('should count invitations by inviter email and statuses', async () => {
queryBuilder.where = jest.fn().mockReturnThis()
queryBuilder.getCount = jest.fn().mockReturnValue(3)
const result = await createRepository().countByInviterEmailAndStatus('[email protected]', [InvitationStatus.Sent])
expect(queryBuilder.where).toHaveBeenCalledWith(
'invitation.inviter_identifier = :inviterEmail AND invitation.status IN (:...statuses)',
{ inviterEmail: '[email protected]', statuses: ['sent'] },
)
expect(result).toEqual(3)
})
it('should find one invitation by name and uuid', async () => {
queryBuilder.where = jest.fn().mockReturnThis()
queryBuilder.getOne = jest.fn().mockReturnValue(invitation)
const result = await createRepository().findOneByUuidAndStatus('1-2-3', InvitationStatus.Sent)
expect(queryBuilder.where).toHaveBeenCalledWith('invitation.uuid = :uuid AND invitation.status = :status', {
uuid: '1-2-3',
status: 'sent',
})
expect(result).toEqual(invitation)
})
it('should find one invitation by invitee and inviter email', async () => {
queryBuilder.where = jest.fn().mockReturnThis()
queryBuilder.getOne = jest.fn().mockReturnValue(invitation)
const result = await createRepository().findOneByInviteeAndInviterEmail('[email protected]', '[email protected]')
expect(queryBuilder.where).toHaveBeenCalledWith(
'invitation.inviter_identifier = :inviterEmail AND invitation.invitee_identifier = :inviteeEmail',
{
inviterEmail: '[email protected]',
inviteeEmail: '[email protected]',
},
)
expect(result).toEqual(invitation)
})
it('should find one invitation by uuid', async () => {
queryBuilder.where = jest.fn().mockReturnThis()
queryBuilder.getOne = jest.fn().mockReturnValue(invitation)
const result = await createRepository().findOneByUuid('1-2-3')
expect(queryBuilder.where).toHaveBeenCalledWith('invitation.uuid = :uuid', { uuid: '1-2-3' })
expect(result).toEqual(invitation)
})
})