feat: Moved IDP response and template behaviour to single class

This commit is contained in:
Joachim Van Herwegen
2021-07-29 16:31:37 +02:00
parent 2a82c4f06e
commit 9d337ba80c
42 changed files with 662 additions and 734 deletions

View File

@@ -1,6 +1,6 @@
import type { Provider } from 'oidc-provider';
import type { ProviderFactory } from '../../../../src/identity/configuration/ProviderFactory';
import { SessionHttpHandler } from '../../../../src/identity/interaction/SessionHttpHandler';
import type { InteractionCompleter } from '../../../../src/identity/interaction/util/InteractionCompleter';
import type { HttpRequest } from '../../../../src/server/HttpRequest';
import type { HttpResponse } from '../../../../src/server/HttpResponse';
import { NotImplementedHttpError } from '../../../../src/util/errors/NotImplementedHttpError';
@@ -11,7 +11,6 @@ describe('A SessionHttpHandler', (): void => {
const webId = 'http://test.com/id#me';
let details: any = {};
let provider: Provider;
let oidcInteractionCompleter: InteractionCompleter;
let handler: SessionHttpHandler;
beforeEach(async(): Promise<void> => {
@@ -20,31 +19,27 @@ describe('A SessionHttpHandler', (): void => {
interactionDetails: jest.fn().mockResolvedValue(details),
} as any;
oidcInteractionCompleter = {
handleSafe: jest.fn(),
} as any;
const factory: ProviderFactory = {
getProvider: jest.fn().mockResolvedValue(provider),
};
handler = new SessionHttpHandler(oidcInteractionCompleter);
handler = new SessionHttpHandler(factory);
});
it('requires a session and accountId.', async(): Promise<void> => {
details.session = undefined;
await expect(handler.handle({ request, response, provider })).rejects.toThrow(NotImplementedHttpError);
await expect(handler.handle({ request, response })).rejects.toThrow(NotImplementedHttpError);
details.session = { accountId: undefined };
await expect(handler.handle({ request, response, provider })).rejects.toThrow(NotImplementedHttpError);
await expect(handler.handle({ request, response })).rejects.toThrow(NotImplementedHttpError);
});
it('calls the oidc completer with the webId in the session.', async(): Promise<void> => {
await expect(handler.handle({ request, response, provider })).resolves.toBeUndefined();
await expect(handler.handle({ request, response })).resolves.toEqual({
details: { webId },
type: 'complete',
});
expect(provider.interactionDetails).toHaveBeenCalledTimes(1);
expect(provider.interactionDetails).toHaveBeenLastCalledWith(request, response);
expect(oidcInteractionCompleter.handleSafe).toHaveBeenCalledTimes(1);
expect(oidcInteractionCompleter.handleSafe).toHaveBeenLastCalledWith({
request,
response,
provider,
webId,
});
});
});