Skip to content

Commit 857be2d

Browse files
committed
test: more tests
1 parent 9d108a4 commit 857be2d

File tree

5 files changed

+252
-65
lines changed

5 files changed

+252
-65
lines changed

src/lib/handleAuth/handleAuth.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ export async function handleAuth({
1313
params,
1414
url: originURL
1515
}: RequestEvent): Promise<Response> {
16+
console.log('kindeConfiguration', kindeConfiguration);
1617
const options = parseSearchParamsToObject(originURL.search);
1718
let url: URL | null = null;
1819
switch (params.kindeAuth) {
@@ -21,6 +22,7 @@ export async function handleAuth({
2122
url = await kindeAuthClient.login(request as unknown as SessionManager, options);
2223
break;
2324
case 'health':
25+
console.log('kindeConfiguration.debug', kindeConfiguration.debug);
2426
if (!kindeConfiguration.debug) {
2527
url = new URL(kindeConfiguration.loginRedirectURL);
2628
break;

src/lib/hooks/sessionHooks.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import type {EventHandler} from '$lib/types/handler.js';
22

33
export async function sessionHooks({event}: {event: EventHandler}) {
44
event.request.setSessionItem = async (itemKey: string, itemValue: unknown) => {
5+
console.log(typeof itemValue === 'string');
56
event.cookies.set(
67
`kinde_${itemKey}`,
78
typeof itemValue === 'string' ? itemValue : (JSON.stringify(itemValue) as string),

src/tests/handleAuth.spec.ts

Lines changed: 22 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -2,40 +2,34 @@ import {describe, beforeEach, it, expect, vi} from 'vitest';
22
import {kindeAuthClient, kindeConfiguration, handleAuth} from '$lib/index.js';
33

44
vi.mock('$lib/sessionStorage/sessionStorage.js');
5+
vi.mock('$lib/index.js', async () => {
6+
const originalModule = await vi.importActual('$lib/index.js');
7+
8+
const kindeConfiguration = {
9+
authDomain: 'https://testdomain.kinde.com',
10+
logoutRedirectURL: 'http://localhost:3000',
11+
redirectURL: 'http://localhost:3000/api/auth/callback',
12+
appBase: 'http://localhost:3000',
13+
clientSecret: 'asdfgaskjasfkjasfljasflajslfjaslfjalsfjalskfjlas',
14+
loginRedirectURL: 'http://localhost:3000/dashboard',
15+
authUsePKCE: false,
16+
debug: false
17+
};
18+
19+
console.log('originalModule', originalModule);
20+
return {
21+
...originalModule,
22+
getConfiguration: vi.fn().mockReturnValue(kindeConfiguration),
23+
kindeConfiguration: kindeConfiguration,
24+
kindeAPIConfiguration: kindeConfiguration
25+
};
26+
});
527

628
describe('HandleAuth', () => {
729
beforeEach(() => {
830
vi.clearAllMocks();
931
});
1032

11-
vi.mock('$lib/index.js', async () => {
12-
const originalModule = await vi.importActual('$lib/index.js');
13-
14-
return {
15-
...originalModule,
16-
kindeConfiguration: {
17-
authDomain: 'https://testdomain.kinde.com',
18-
logoutRedirectURL: 'http://localhost:3000',
19-
redirectURL: 'http://localhost:3000/api/auth/callback',
20-
appBase: 'http://localhost:3000',
21-
clientSecret: 'asdfgaskjasfkjasfljasflajslfjaslfjalsfjalskfjlas',
22-
loginRedirectURL: 'http://localhost:3000/dashboard',
23-
authUsePKCE: false,
24-
debug: false
25-
},
26-
kindeAPIConfiguration: {
27-
authDomain: 'https://testdomain.kinde.com',
28-
logoutRedirectURL: 'http://localhost:3000',
29-
redirectURL: 'http://localhost:3000/api/auth/callback',
30-
appBase: 'http://localhost:3000',
31-
clientSecret: 'asdfgaskjasfkjasfljasflajslfjaslfjalsfjalskfjlas',
32-
loginRedirectURL: 'http://localhost:3000/dashboard',
33-
authUsePKCE: false,
34-
debug: false
35-
}
36-
};
37-
});
38-
3933
it('should handle login requests', async () => {
4034
const requestEvent = {
4135
request: {},

src/tests/hooks.spec.ts

Lines changed: 144 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,149 @@
11
import {sessionHooks} from '$lib/index.js';
22
import {describe, it, expect, vi} from 'vitest';
33

4-
describe('Hooks', () => {
5-
describe('sessionHooks', () => {
6-
it('should add setSessionItem and getSessionItem methods to event.request', async () => {
7-
const event = {
8-
request: {},
9-
cookies: {
10-
set: vi.fn(),
11-
get: vi.fn().mockReturnValue('test value')
12-
}
13-
};
14-
15-
await sessionHooks({event});
16-
17-
expect(typeof event.request.setSessionItem).toBe('function');
18-
expect(typeof event.request.getSessionItem).toBe('function');
19-
});
20-
21-
it('should set and get session items correctly', async () => {
22-
const event = {
23-
request: {},
24-
cookies: {
25-
set: vi.fn(),
26-
get: vi.fn().mockReturnValue('test value')
27-
}
28-
};
29-
await sessionHooks({event});
30-
31-
await event.request.setSessionItem('testKey', 'testValue');
32-
const item = event.request.getSessionItem('testKey');
33-
34-
expect(event.cookies.set).toHaveBeenCalledWith(
35-
'kinde_testKey',
36-
'testValue',
37-
expect.any(Object)
38-
);
39-
expect(item).toBe('test value');
40-
});
4+
describe('sessionHooks', () => {
5+
it('should add setSessionItem and getSessionItem methods to event.request', async () => {
6+
const event = {
7+
request: {},
8+
cookies: {
9+
set: vi.fn(),
10+
get: vi.fn().mockReturnValue('test value')
11+
}
12+
};
13+
14+
await sessionHooks({event});
15+
16+
expect(typeof event.request.setSessionItem).toBe('function');
17+
expect(typeof event.request.getSessionItem).toBe('function');
18+
});
19+
20+
it('should set and get session items correctly', async () => {
21+
const event = {
22+
request: {},
23+
cookies: {
24+
set: vi.fn(),
25+
get: vi.fn().mockReturnValue('test value')
26+
}
27+
};
28+
await sessionHooks({event});
29+
30+
await event.request.setSessionItem('testKey', 'testValue');
31+
const item = event.request.getSessionItem('testKey');
32+
33+
expect(event.cookies.set).toHaveBeenCalledWith(
34+
'kinde_testKey',
35+
'testValue',
36+
expect.any(Object)
37+
);
38+
expect(item).toBe('test value');
39+
});
40+
41+
it('return undefined when item is not found', async () => {
42+
const event = {
43+
request: {},
44+
cookies: {
45+
set: vi.fn(),
46+
get: vi.fn().mockReturnValue(undefined)
47+
}
48+
};
49+
await sessionHooks({event});
50+
const item = event.request.getSessionItem('testKey');
51+
expect(item).toBe(undefined);
52+
});
53+
54+
it('return raw state', async () => {
55+
const event = {
56+
request: {},
57+
cookies: {
58+
set: vi.fn(),
59+
get: vi.fn().mockReturnValue('statekey')
60+
}
61+
};
62+
await sessionHooks({event});
63+
const item = event.request.getSessionItem('state');
64+
expect(item).toBe('statekey');
65+
});
66+
67+
it('returns object when object stored', async () => {
68+
const dataStore = {};
69+
const event = {
70+
request: {},
71+
cookies: {
72+
set: vi.fn().mockImplementation((key, value) => {
73+
dataStore[key] = value;
74+
}),
75+
get: vi.fn().mockImplementation((key) => {
76+
return dataStore[key];
77+
})
78+
}
79+
};
80+
await sessionHooks({event});
81+
event.request.setSessionItem('testObject', {testValue: true});
82+
83+
const item = event.request.getSessionItem('testObject');
84+
expect(item.testValue).toBe(true);
85+
});
86+
87+
it('should remove item from session storage using sessionHooks', async () => {
88+
// Arrange
89+
const key = 'testKey';
90+
const value = 'testValue';
91+
const objectValue = {['kinde_' + key]: value};
92+
const event = {
93+
request: {},
94+
cookies: {
95+
set: vi.fn(),
96+
get: vi.fn().mockImplementation(() => JSON.stringify(objectValue['kinde_' + key])),
97+
delete: vi.fn().mockImplementation((key) => {
98+
console.log('delete', key);
99+
delete objectValue[key];
100+
console.log('delete', objectValue);
101+
})
102+
}
103+
};
104+
await sessionHooks({event});
105+
event.request.setSessionItem(key, value);
106+
107+
// Act
108+
event.request.removeSessionItem(key);
109+
110+
// Assert
111+
const retrievedValue = event.request.getSessionItem('kinde_' + key);
112+
console.log('retrievedValue', retrievedValue);
113+
expect(retrievedValue).toBeUndefined();
114+
});
115+
116+
it('should destroy the session using sessionHooks', async () => {
117+
// Arrange
118+
const key1 = 'testKey1';
119+
const value1 = 'testValue1';
120+
const key2 = 'testKey2';
121+
const value2 = 'testValue2';
122+
const objectValue = {['kinde_testKey1']: value1, ['kinde_testKey2']: value2};
123+
const event = {
124+
request: {},
125+
cookies: {
126+
set: vi.fn(),
127+
get: vi.fn().mockImplementation((key) => JSON.stringify(objectValue[key])),
128+
delete: vi.fn().mockImplementation((key) => {
129+
delete objectValue[key];
130+
}),
131+
getAll: vi
132+
.fn()
133+
.mockImplementation(() => Object.keys(objectValue).map((key) => ({name: key})))
134+
}
135+
};
136+
await sessionHooks({event});
137+
event.request.setSessionItem(key1, value1);
138+
event.request.setSessionItem(key2, value2);
139+
140+
// Act
141+
event.request.destroySession();
142+
143+
// Assert
144+
const retrievedValue1 = event.request.getSessionItem(key1);
145+
const retrievedValue2 = event.request.getSessionItem(key2);
146+
expect(retrievedValue1).toBeUndefined();
147+
expect(retrievedValue2).toBeUndefined();
41148
});
42149
});

src/tests/sessionStorage.spec.ts

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
import {describe, beforeEach, expect, it} from 'vitest';
2+
import {sessionStorage} from '../lib/sessionStorage/index.js';
3+
import {type SessionManager} from '@kinde-oss/kinde-typescript-sdk';
4+
5+
describe('SessionStorage', () => {
6+
describe('setSessionItem', () => {
7+
it('should set item in session storage', () => {
8+
// Arrange
9+
const key = 'testKey';
10+
const value = 'testValue';
11+
12+
// Act
13+
sessionStorage.setSessionItem(key, value);
14+
15+
// Assert
16+
expect(sessionStorage.getSessionItem(key)).toEqual(value);
17+
});
18+
19+
it('should set non-string item in session storage', () => {
20+
// Arrange
21+
const key = 'testKey';
22+
const value = {a: 1};
23+
24+
// Act
25+
sessionStorage.setSessionItem(key, value);
26+
27+
// Assert
28+
expect(sessionStorage.getSessionItem(key)).toEqual(value);
29+
});
30+
});
31+
32+
describe('getSessionItem', () => {
33+
it('should get item from session storage', () => {
34+
// Arrange
35+
const key = 'testKey';
36+
const value = 'testValue';
37+
sessionStorage.setSessionItem(key, value);
38+
39+
// Act
40+
const retrievedValue = sessionStorage.getSessionItem(key);
41+
42+
// Assert
43+
expect(retrievedValue).toEqual(value);
44+
});
45+
});
46+
47+
describe('removeSessionItem', () => {
48+
it('should remove item from session storage', () => {
49+
// Arrange
50+
const key = 'testKey';
51+
const value = 'testValue';
52+
sessionStorage.setSessionItem(key, value);
53+
54+
// Act
55+
sessionStorage.removeSessionItem(key);
56+
57+
// Assert
58+
const retrievedValue = sessionStorage.getSessionItem(key);
59+
expect(retrievedValue).toBeUndefined();
60+
});
61+
});
62+
63+
describe('destroySession', () => {
64+
it('should destroy the session', () => {
65+
// Arrange
66+
const key1 = 'testKey1';
67+
const value1 = 'testValue1';
68+
const key2 = 'testKey2';
69+
const value2 = 'testValue2';
70+
sessionStorage.setSessionItem(key1, value1);
71+
sessionStorage.setSessionItem(key2, value2);
72+
73+
// Act
74+
sessionStorage.destroySession();
75+
76+
// Assert
77+
const retrievedValue1 = sessionStorage.getSessionItem(key1);
78+
const retrievedValue2 = sessionStorage.getSessionItem(key2);
79+
expect(retrievedValue1).toBeUndefined();
80+
expect(retrievedValue2).toBeUndefined();
81+
});
82+
});
83+
});

0 commit comments

Comments
 (0)