diff --git a/apps/self-service/src/app/registration/registration-page.spec.ts b/apps/self-service/src/app/registration/registration-page.spec.ts index 1119762..f17ff06 100644 --- a/apps/self-service/src/app/registration/registration-page.spec.ts +++ b/apps/self-service/src/app/registration/registration-page.spec.ts @@ -20,10 +20,12 @@ class FakeAuth extends AuthService { function providers( post = vi.fn().mockReturnValue(of({ registrationId: 'reg-9', status: 'Ingediend' })), withdraw = vi.fn().mockReturnValue(of(undefined)), + provideDocuments = vi.fn().mockReturnValue(of(undefined)), ) { return { post, withdraw, + provideDocuments, providers: [ { provide: AuthService, useClass: FakeAuth }, { @@ -31,6 +33,7 @@ function providers( useValue: { postSelfServiceRegistrations: post, postSelfServiceRegistrationsIdWithdraw: withdraw, + postSelfServiceRegistrationsIdDocuments: provideDocuments, }, }, ], @@ -80,6 +83,37 @@ describe('RegistrationPage', () => { expect(await screen.findByText(/ingetrokken/i)).toBeTruthy(); }); + it('offers to provide documents after submitting, and doing so confirms', async () => { + const { provideDocuments, providers: p } = providers(); + await render(RegistrationPage, { providers: p }); + + fireEvent.click(screen.getByRole('button', { name: /indienen/i })); + await screen.findByText(/ontvangen/i); + + fireEvent.click(await screen.findByRole('button', { name: /documenten aanleveren/i })); + + // The provide-documents call is keyed by the reference the submit returned, and the page confirms. + expect(provideDocuments).toHaveBeenCalledWith('reg-9'); + expect(await screen.findByText(/documenten.*aangeleverd/i)).toBeTruthy(); + }); + + it('surfaces a provide-documents failure and keeps the action available', async () => { + const { providers: p } = providers( + vi.fn().mockReturnValue(of({ registrationId: 'reg-9', status: 'Ingediend' })), + vi.fn().mockReturnValue(of(undefined)), + vi.fn().mockReturnValue(throwError(() => new Error('documents rejected'))), + ); + await render(RegistrationPage, { providers: p }); + + fireEvent.click(screen.getByRole('button', { name: /indienen/i })); + await screen.findByText(/ontvangen/i); + fireEvent.click(await screen.findByRole('button', { name: /documenten aanleveren/i })); + + expect(await screen.findByRole('alert')).toBeTruthy(); + expect(screen.queryByText(/aangeleverd/i)).toBeNull(); + expect(screen.getByRole('button', { name: /documenten aanleveren/i })).toBeTruthy(); + }); + it('surfaces a withdraw failure and keeps the action available', async () => { const { providers: p } = providers( vi.fn().mockReturnValue(of({ registrationId: 'reg-9', status: 'Ingediend' })), diff --git a/libs/api-client/src/lib/generated/bff-api.ts b/libs/api-client/src/lib/generated/bff-api.ts index d227c97..f5d35d7 100644 --- a/libs/api-client/src/lib/generated/bff-api.ts +++ b/libs/api-client/src/lib/generated/bff-api.ts @@ -226,6 +226,40 @@ export class BffApiV1Service { ); } + postSelfServiceRegistrationsIdDocuments(id: string, options?: HttpClientBodyOptions): Observable; + postSelfServiceRegistrationsIdDocuments(id: string, options?: HttpClientEventOptions): Observable>; + postSelfServiceRegistrationsIdDocuments(id: string, options?: HttpClientResponseOptions): Observable>; + postSelfServiceRegistrationsIdDocuments( + id: string, options?: HttpClientObserveOptions): Observable | AngularHttpResponse> { + if (options?.observe === 'events') { + return this.http.post( + `/self-service/registrations/${id}/documents`, + undefined,{ + ...(options as Omit, 'observe'>), + observe: 'events', + } + ); + } + + if (options?.observe === 'response') { + return this.http.post( + `/self-service/registrations/${id}/documents`, + undefined,{ + ...(options as Omit, 'observe'>), + observe: 'response', + } + ); + } + + return this.http.post( + `/self-service/registrations/${id}/documents`, + undefined,{ + ...(options as Omit, 'observe'>), + observe: 'body', + } + ); + } + getOpenbaarRegister(params?: GetOpenbaarRegisterParams, options?: HttpClientBodyOptions): Observable; getOpenbaarRegister(params?: GetOpenbaarRegisterParams, options?: HttpClientEventOptions): Observable>; getOpenbaarRegister(params?: GetOpenbaarRegisterParams, options?: HttpClientResponseOptions): Observable>;