-
-
Notifications
You must be signed in to change notification settings - Fork 795
Expand file tree
/
Copy pathstrategy.test.ts
More file actions
113 lines (92 loc) · 3.55 KB
/
strategy.test.ts
File metadata and controls
113 lines (92 loc) · 3.55 KB
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import { strict as assert } from 'assert';
import { app, TestOAuthStrategy } from './fixture';
import { AuthenticationService } from '@feathersjs/authentication';
describe('@feathersjs/authentication-oauth/strategy', () => {
const authService = app.service('authentication') as unknown as AuthenticationService;
const [ strategy ] = authService.getStrategies('test') as TestOAuthStrategy[];
it('initializes, has .entityId and configuration', () => {
assert.ok(strategy);
assert.strictEqual(strategy.entityId, 'id');
assert.ok(strategy.configuration.entity);
});
it('reads configuration from the oauth key', () => {
const testConfigValue = Math.random();
app.get('authentication').oauth.test.hello = testConfigValue;
assert.strictEqual(strategy.configuration.hello, testConfigValue);
});
it('getRedirect', async () => {
app.get('authentication').oauth.redirect = '/home';
let redirect = await strategy.getRedirect({ accessToken: 'testing' });
assert.equal(redirect, '/home#access_token=testing');
redirect = await strategy.getRedirect({ accessToken: 'testing' }, {
redirect: '/hi-there'
});
assert.strictEqual('/home/hi-there#access_token=testing', redirect);
redirect = await strategy.getRedirect(new Error('something went wrong'));
assert.equal(redirect, '/home#error=something%20went%20wrong');
redirect = await strategy.getRedirect(new Error());
assert.equal(redirect, '/home#error=OAuth%20Authentication%20not%20successful');
app.get('authentication').oauth.redirect = '/home?';
redirect = await strategy.getRedirect({ accessToken: 'testing' });
assert.equal(redirect, '/home?access_token=testing');
delete app.get('authentication').oauth.redirect;
redirect = await strategy.getRedirect({ accessToken: 'testing' });
assert.equal(redirect, null);
app.get('authentication').oauth.redirect = '/#dashboard';
redirect = await strategy.getRedirect({ accessToken: 'testing' });
assert.equal(redirect, '/#dashboard?access_token=testing');
});
describe('authenticate', () => {
it('with new user', async () => {
const authResult = await strategy.authenticate({
strategy: 'test',
profile: {
id: 'newEntity'
}
}, {});
assert.deepEqual(authResult, {
authentication: { strategy: 'test' },
user: { testId: 'newEntity', id: authResult.user.id }
});
});
it('with existing user and already linked strategy', async () => {
const existingUser = await app.service('users').create({
testId: 'existingEntity',
name: 'David'
});
const authResult = await strategy.authenticate({
strategy: 'test',
profile: {
id: 'existingEntity'
}
}, {});
assert.deepEqual(authResult, {
authentication: { strategy: 'test' },
user: existingUser
});
});
it('links user with existing authentication', async () => {
const user = await app.service('users').create({
name: 'David'
});
const jwt = await authService.createAccessToken({}, {
subject: `${user.id}`
});
const authResult = await strategy.authenticate({
strategy: 'test',
profile: {
id: 'linkedEntity'
}
}, {
authentication: {
strategy: 'jwt',
accessToken: jwt
}
});
assert.deepEqual(authResult, {
authentication: { strategy: 'test' },
user: { id: user.id, name: user.name, testId: 'linkedEntity' }
});
});
});
});