feat(web): add accepting subscription invites from UI

This commit is contained in:
Karol Sójko
2022-10-24 14:30:17 +02:00
parent a4245aee6f
commit 0c44ad6c8e
14 changed files with 218 additions and 17 deletions

View File

@@ -5,4 +5,5 @@ export interface SubscriptionClientInterface {
listSubscriptionInvitations(): Promise<Invitation[]>
inviteToSubscription(inviteeEmail: string): Promise<boolean>
cancelInvitation(inviteUuid: Uuid): Promise<boolean>
acceptInvitation(inviteUuid: Uuid): Promise<{ success: true } | { success: false; message: string }>
}

View File

@@ -12,6 +12,7 @@ describe('SubscriptionManager', () => {
beforeEach(() => {
subscriptionApiService = {} as jest.Mocked<SubscriptionApiServiceInterface>
subscriptionApiService.cancelInvite = jest.fn()
subscriptionApiService.acceptInvite = jest.fn()
subscriptionApiService.invite = jest.fn()
subscriptionApiService.listInvites = jest.fn()
@@ -80,4 +81,27 @@ describe('SubscriptionManager', () => {
expect(await createManager().listSubscriptionInvitations()).toEqual([])
})
it('should accept invite to a shared subscription', async () => {
subscriptionApiService.acceptInvite = jest.fn().mockReturnValue({ data: { success: true } })
expect(await createManager().acceptInvitation('1-2-3')).toEqual({ success: true })
})
it('should not accept invite if the api fails to do so', async () => {
subscriptionApiService.acceptInvite = jest.fn().mockReturnValue({ data: { error: { message: 'foobar' } } })
expect(await createManager().acceptInvitation('1-2-3')).toEqual({ success: false, message: 'foobar' })
})
it('should not accept invite if the api throws an error', async () => {
subscriptionApiService.acceptInvite = jest.fn().mockImplementation(() => {
throw new Error('Oops')
})
expect(await createManager().acceptInvitation('1-2-3')).toEqual({
success: false,
message: 'Could not accept invitation.',
})
})
})

View File

@@ -13,6 +13,20 @@ export class SubscriptionManager extends AbstractService implements Subscription
super(internalEventBus)
}
async acceptInvitation(inviteUuid: string): Promise<{ success: true } | { success: false; message: string }> {
try {
const result = await this.subscriptionApiService.acceptInvite(inviteUuid)
if (result.data.error) {
return { success: false, message: result.data.error.message }
}
return result.data
} catch (error) {
return { success: false, message: 'Could not accept invitation.' }
}
}
async listSubscriptionInvitations(): Promise<Invitation[]> {
try {
const response = await this.subscriptionApiService.listInvites()