mirror of
https://github.com/CommunitySolidServer/CommunitySolidServer.git
synced 2024-10-03 14:55:10 +00:00
feat: Simplify and merge OIDC configurations
This commit is contained in:
@@ -1,8 +1,7 @@
|
||||
import type { interactionPolicy, KoaContextWithOIDC, Provider } from 'oidc-provider';
|
||||
import type { IdentityProviderFactory } from '../../../src/identity/IdentityProviderFactory';
|
||||
import type { Provider } from 'oidc-provider';
|
||||
import type { ProviderFactory } from '../../../src/identity/configuration/ProviderFactory';
|
||||
import { IdentityProviderHttpHandler } from '../../../src/identity/IdentityProviderHttpHandler';
|
||||
import type { InteractionHttpHandler } from '../../../src/identity/interaction/InteractionHttpHandler';
|
||||
import type { InteractionPolicy } from '../../../src/identity/interaction/InteractionPolicy';
|
||||
import type { ErrorHandler } from '../../../src/ldp/http/ErrorHandler';
|
||||
import type { ResponseDescription } from '../../../src/ldp/http/response/ResponseDescription';
|
||||
import type { ResponseWriter } from '../../../src/ldp/http/ResponseWriter';
|
||||
@@ -12,15 +11,11 @@ import type { HttpResponse } from '../../../src/server/HttpResponse';
|
||||
describe('An IdentityProviderHttpHandler', (): void => {
|
||||
const request: HttpRequest = {} as any;
|
||||
const response: HttpResponse = {} as any;
|
||||
let providerFactory: IdentityProviderFactory;
|
||||
const idpPolicy: InteractionPolicy = {
|
||||
policy: [ 'prompt' as unknown as interactionPolicy.Prompt ],
|
||||
url: (ctx: KoaContextWithOIDC): string => `/idp/interaction/${ctx.oidc.uid}`,
|
||||
};
|
||||
let interactionHttpHandler: InteractionHttpHandler;
|
||||
let errorHandler: ErrorHandler;
|
||||
let responseWriter: ResponseWriter;
|
||||
let provider: Provider;
|
||||
let providerFactory: jest.Mocked<ProviderFactory>;
|
||||
let interactionHttpHandler: jest.Mocked<InteractionHttpHandler>;
|
||||
let errorHandler: jest.Mocked<ErrorHandler>;
|
||||
let responseWriter: jest.Mocked<ResponseWriter>;
|
||||
let provider: jest.Mocked<Provider>;
|
||||
let handler: IdentityProviderHttpHandler;
|
||||
|
||||
beforeEach(async(): Promise<void> => {
|
||||
@@ -29,8 +24,8 @@ describe('An IdentityProviderHttpHandler', (): void => {
|
||||
} as any;
|
||||
|
||||
providerFactory = {
|
||||
createProvider: jest.fn().mockResolvedValue(provider),
|
||||
} as any;
|
||||
getProvider: jest.fn().mockResolvedValue(provider),
|
||||
};
|
||||
|
||||
interactionHttpHandler = {
|
||||
canHandle: jest.fn(),
|
||||
@@ -43,7 +38,6 @@ describe('An IdentityProviderHttpHandler', (): void => {
|
||||
|
||||
handler = new IdentityProviderHttpHandler(
|
||||
providerFactory,
|
||||
idpPolicy,
|
||||
interactionHttpHandler,
|
||||
errorHandler,
|
||||
responseWriter,
|
||||
@@ -70,8 +64,8 @@ describe('An IdentityProviderHttpHandler', (): void => {
|
||||
it('returns an error response if there was an issue with the interaction handler.', async(): Promise<void> => {
|
||||
const error = new Error('error!');
|
||||
const errorResponse: ResponseDescription = { statusCode: 500 };
|
||||
(interactionHttpHandler.handle as jest.Mock).mockRejectedValueOnce(error);
|
||||
(errorHandler.handleSafe as jest.Mock).mockResolvedValueOnce(errorResponse);
|
||||
interactionHttpHandler.handle.mockRejectedValueOnce(error);
|
||||
errorHandler.handleSafe.mockResolvedValueOnce(errorResponse);
|
||||
await expect(handler.handle({ request, response })).resolves.toBeUndefined();
|
||||
expect(provider.callback).toHaveBeenCalledTimes(0);
|
||||
expect(interactionHttpHandler.handle).toHaveBeenCalledTimes(1);
|
||||
@@ -83,25 +77,16 @@ describe('An IdentityProviderHttpHandler', (): void => {
|
||||
});
|
||||
|
||||
it('re-throws the error if it is not a native Error.', async(): Promise<void> => {
|
||||
(interactionHttpHandler.handle as jest.Mock).mockRejectedValueOnce('apple!');
|
||||
interactionHttpHandler.handle.mockRejectedValueOnce('apple!');
|
||||
await expect(handler.handle({ request, response })).rejects.toEqual('apple!');
|
||||
});
|
||||
|
||||
it('caches the provider after creating it.', async(): Promise<void> => {
|
||||
expect(providerFactory.createProvider).toHaveBeenCalledTimes(0);
|
||||
await expect(handler.handle({ request, response })).resolves.toBeUndefined();
|
||||
expect(providerFactory.createProvider).toHaveBeenCalledTimes(1);
|
||||
expect(providerFactory.createProvider).toHaveBeenLastCalledWith(idpPolicy);
|
||||
await expect(handler.handle({ request, response })).resolves.toBeUndefined();
|
||||
expect(providerFactory.createProvider).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
it('errors if there is an issue creating the provider.', async(): Promise<void> => {
|
||||
const error = new Error('error!');
|
||||
(providerFactory.createProvider as jest.Mock).mockRejectedValueOnce(error);
|
||||
providerFactory.getProvider.mockRejectedValueOnce(error);
|
||||
await expect(handler.handle({ request, response })).rejects.toThrow(error);
|
||||
|
||||
(providerFactory.createProvider as jest.Mock).mockRejectedValueOnce('apple');
|
||||
providerFactory.getProvider.mockRejectedValueOnce('apple');
|
||||
await expect(handler.handle({ request, response })).rejects.toBe('apple');
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user