/
open-id-connect-authorize-step.spec.ts
79 lines (65 loc) · 2.3 KB
/
open-id-connect-authorize-step.spec.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import {
NavigationInstruction,
NavigationInstructionInit,
Redirect,
} from 'aurelia-router';
import { UserManager } from 'oidc-client';
import sinon = require('sinon');
import { OpenIdConnectRoles } from '../src';
import {
OpenIdConnectAuthorizeStep,
OpenIdConnectConfigurationManager,
OpenIdConnectLogger,
} from '../src/index-internal';
describe('open-id-connect-authorize-step', () => {
const unauthRedirectRoute = '/you-shall-not-pass!';
const logger = sinon.createStubInstance(OpenIdConnectLogger);
const configuration = sinon.createStubInstance(OpenIdConnectConfigurationManager);
const userManager = sinon.createStubInstance(UserManager);
sinon.stub(configuration, 'unauthorizedRedirectRoute').get(() => unauthRedirectRoute);
const authorizationStep = new OpenIdConnectAuthorizeStep(
userManager,
configuration,
logger);
const navigationInstruction = sinon.createStubInstance(NavigationInstruction);
const createConfigForRoles = (...roles: OpenIdConnectRoles[]) => {
// tslint:disable-next-line:no-object-literal-type-assertion
return {
config: {
settings: {
roles,
},
},
} as NavigationInstructionInit;
};
// Is there a better way to spy on/stub a function that has properties/methods?
const next = Object.assign(
sinon.spy(),
{
cancel: sinon.spy(),
},
) as any;
context('run', () => {
context('if navigation instruction requires the Authenticated role', () => {
const instruction = new NavigationInstruction(
createConfigForRoles(OpenIdConnectRoles.Authenticated));
(navigationInstruction.getAllInstructions).returns([instruction]);
it(`should redirect to ${unauthRedirectRoute} if user is null`, async () => {
// arrange
(userManager.getUser).returns(null);
// act
await authorizationStep.run(navigationInstruction, next);
// assert
sinon.assert.calledWith(next.cancel, new Redirect(unauthRedirectRoute));
});
it(`should NOT redirect to ${unauthRedirectRoute} if user is not null`, async () => {
// arrange
(userManager.getUser).returns({});
// act
await authorizationStep.run(navigationInstruction, next);
// assert
sinon.assert.calledOnce(next);
});
});
});
});