Skip to content

Commit 8364728

Browse files
committed
add test for version next
1 parent bbee887 commit 8364728

16 files changed

+2601
-898
lines changed

jest.config.js

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,14 @@
11
const packageJSON = require('./package.json');
22

33
module.exports = {
4-
moduleFileExtensions: ['ts', 'js'],
5-
testRegex: '(/__tests__/.*|(\\.|/)(test|spec))\\.(tsx?)$',
6-
testPathIgnorePatterns: ['/node_modules/', '(/__tests__/.*|(\\.|/)(test|spec))\\.d.ts$'],
7-
transform: {
8-
'^.+\\.tsx?$': 'ts-jest'
9-
},
4+
preset: 'ts-jest',
105
collectCoverage: true,
11-
coverageDirectory: '<rootDir>/jest/coverage',
12-
coveragePathIgnorePatterns: ['/__tests__/'],
13-
errorOnDeprecated: true,
6+
setupFilesAfterEnv: ['./scripts/jest/setup.ts'],
7+
modulePathIgnorePatterns: [
8+
// https://github.com/facebook/jest/issues/2070#issuecomment-431706685
9+
'<rootDir>/.*/__mocks__'
10+
],
1411
globals: {
15-
VERSION: packageJSON.version
12+
__VERSION__: packageJSON.version
1613
}
1714
};

package.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
"@commitlint/cli": "^8.2.0",
3030
"@commitlint/config-conventional": "^8.2.0",
3131
"@moneytree/tslint-rules": "^1.0.2",
32+
"@testing-library/jest-dom": "^5.11.0",
3233
"@types/jest": "^24.0.23",
3334
"@types/node-fetch": "^2.5.4",
3435
"@types/qs": "^6.9.0",
@@ -38,9 +39,10 @@
3839
"conventional-changelog-cli": "^2.0.28",
3940
"docsify-cli": "^4.4.1",
4041
"husky": "^3.1.0",
41-
"jest": "^24.9.0",
42+
"jest": "^26.1.0",
43+
"jest-fetch-mock": "^3.0.3",
4244
"node-fetch": "^2.5.0",
43-
"ts-jest": "^24.2.0",
45+
"ts-jest": "^26.1.1",
4446
"ts-loader": "^6.2.1",
4547
"tslint": "^5.20.1",
4648
"typescript": "^3.7.3",

scripts/jest/file-mock.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default 'test-file-stub';

scripts/jest/setup.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import '@testing-library/jest-dom';
2+
import fetchMock from 'jest-fetch-mock';
3+
4+
fetchMock.enableMocks();

src/__tests__/helper.test.ts

Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
import { constructScopes, getIsTabValue, mergeConfigs, generateConfigs } from '../helper';
2+
import packageJson from '../../package.json';
3+
4+
describe('helper', () => {
5+
test('constuctScopes', () => {
6+
expect(constructScopes()).toBeUndefined();
7+
expect(constructScopes('guest_read')).toBe('guest_read');
8+
expect(constructScopes(['guest_read', 'points_read'])).toBe('guest_read points_read');
9+
});
10+
11+
test('getIsTabValue', () => {
12+
expect(getIsTabValue()).toBe('_self');
13+
expect(getIsTabValue(false)).toBe('_self');
14+
expect(getIsTabValue(true)).toBe('');
15+
});
16+
17+
describe('mergeConfigs', () => {
18+
test('use value from initValues by default', () => {
19+
expect(
20+
mergeConfigs(
21+
{
22+
email: 'email',
23+
backTo: 'backTo',
24+
authAction: 'signup',
25+
showAuthToggle: true,
26+
showRememberMe: true
27+
},
28+
{}
29+
)
30+
).toMatchObject({
31+
email: 'email',
32+
backTo: 'backTo',
33+
authAction: 'signup',
34+
showAuthToggle: true,
35+
showRememberMe: true
36+
});
37+
});
38+
39+
test('use new value over initValues', () => {
40+
expect(
41+
mergeConfigs(
42+
{
43+
email: 'email',
44+
backTo: 'backTo',
45+
authAction: 'signup',
46+
showAuthToggle: true,
47+
showRememberMe: true
48+
},
49+
{
50+
email: 'newEmail',
51+
backTo: 'newBackTo',
52+
authAction: 'login',
53+
showAuthToggle: false,
54+
showRememberMe: false
55+
}
56+
)
57+
).toMatchObject({
58+
email: 'newEmail',
59+
backTo: 'newBackTo',
60+
authAction: 'login',
61+
showAuthToggle: false,
62+
showRememberMe: false
63+
});
64+
});
65+
66+
test('invalid configs will not be included', () => {
67+
expect(
68+
mergeConfigs(
69+
{
70+
email: 'email',
71+
backTo: 'backTo',
72+
authAction: 'signup',
73+
showAuthToggle: true,
74+
showRememberMe: true,
75+
// @ts-ignore
76+
whatIsThis: false
77+
},
78+
{
79+
whatIsThis2: false
80+
}
81+
)
82+
).toMatchObject({
83+
email: 'email',
84+
backTo: 'backTo',
85+
authAction: 'signup',
86+
showAuthToggle: true,
87+
showRememberMe: true
88+
});
89+
});
90+
91+
test('can ignore key using third parameters', () => {
92+
expect(
93+
mergeConfigs(
94+
{
95+
email: 'email',
96+
backTo: 'backTo',
97+
authAction: 'signup',
98+
showAuthToggle: true,
99+
showRememberMe: true
100+
},
101+
{
102+
email: 'newEmail',
103+
backTo: 'newBackTo',
104+
authAction: 'login',
105+
showAuthToggle: false
106+
},
107+
['email', 'backTo']
108+
)
109+
).toMatchObject({
110+
authAction: 'login',
111+
showAuthToggle: false,
112+
showRememberMe: true
113+
});
114+
});
115+
});
116+
117+
describe('generateConfigs', () => {
118+
test('with parameter', () => {
119+
// to test hasOwnProperty not including inherit property
120+
const obj = Object.create({ name: 'inherit' });
121+
122+
expect(
123+
generateConfigs(
124+
Object.assign(obj, {
125+
email: 'email',
126+
backTo: 'backTo',
127+
authAction: 'signup',
128+
showAuthToggle: true,
129+
showRememberMe: true
130+
})
131+
)
132+
).toBe(
133+
`sdk_platform=js&sdk_version=${packageJson.version}&email=email&back_to=backTo&auth_action=signup&show_auth_toggle=true` +
134+
`&show_remember_me=true`
135+
);
136+
});
137+
138+
test('without parameter', () => {
139+
expect(generateConfigs()).toBe(`sdk_platform=js&sdk_version=${packageJson.version}`);
140+
});
141+
});
142+
});

src/__tests__/index.test.ts

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
import { mocked } from 'ts-jest/utils';
2+
3+
import authorize from '../api/authorize';
4+
import onboard from '../api/onboard';
5+
import logout from '../api/logout';
6+
import openService from '../api/open-service';
7+
import requestMagicLink from '../api/request-magic-link';
8+
import exchangeToken from '../api/exchange-token';
9+
import tokenInfo from '../api/token-info';
10+
import mtLinkSdk, { MtLinkSdk } from '..';
11+
12+
jest.mock('../api/authorize');
13+
jest.mock('../api/onboard');
14+
jest.mock('../api/logout');
15+
jest.mock('../api/open-service');
16+
jest.mock('../api/request-magic-link');
17+
jest.mock('../api/exchange-token');
18+
jest.mock('../api/token-info');
19+
20+
describe('index', () => {
21+
test('MtLinkSdk', async () => {
22+
const instance = new MtLinkSdk();
23+
24+
instance.init('clientId', {
25+
redirectUri: 'redirectUri'
26+
});
27+
28+
const options = instance.storedOptions;
29+
const storedOptions = {
30+
clientId: options.clientId,
31+
codeVerifier: options.codeVerifier,
32+
mode: options.mode,
33+
redirectUri: options.redirectUri,
34+
state: options.state
35+
};
36+
37+
const result1 = instance.authorize({ scopes: 'scopes' });
38+
expect(result1).toBeUndefined();
39+
expect(authorize).toBeCalledWith(storedOptions, { scopes: 'scopes' });
40+
41+
const result2 = instance.onboard({ scopes: 'scopes' });
42+
expect(result2).toBeUndefined();
43+
expect(onboard).toBeCalledWith(storedOptions, { scopes: 'scopes' });
44+
45+
const result3 = instance.logout({ backTo: 'backTo' });
46+
expect(result3).toBeUndefined();
47+
expect(logout).toBeCalledWith(storedOptions, { backTo: 'backTo' });
48+
49+
const result4 = instance.openService('test');
50+
expect(result4).toBeUndefined();
51+
expect(openService).toBeCalledWith(storedOptions, 'test', undefined);
52+
53+
const result5 = await instance.requestMagicLink({ magicLinkTo: 'magicLinkTo' });
54+
expect(result5).toBeUndefined();
55+
expect(requestMagicLink).toBeCalledWith(storedOptions, { magicLinkTo: 'magicLinkTo' });
56+
57+
mocked(exchangeToken).mockResolvedValueOnce('test');
58+
const result6 = await instance.exchangeToken({ code: 'code' });
59+
expect(result6).toBe('test');
60+
expect(exchangeToken).toBeCalledWith(storedOptions, { code: 'code' });
61+
62+
// @ts-ignore
63+
mocked(tokenInfo).mockResolvedValueOnce('test');
64+
const result7 = await instance.tokenInfo('test');
65+
expect(result7).toBe('test');
66+
expect(tokenInfo).toBeCalledWith(storedOptions, 'test', undefined);
67+
});
68+
69+
test('mtLinkSdk', () => {
70+
const instance = new MtLinkSdk();
71+
72+
expect(instance).not.toBe(mtLinkSdk);
73+
});
74+
75+
test('init without clientId', () => {
76+
expect(() => {
77+
mtLinkSdk.init('');
78+
}).toThrow('[mt-link-sdk] Missing parameter `client_id` in `init`.');
79+
});
80+
81+
test('init options', () => {
82+
mtLinkSdk.init('clientId', {
83+
mode: 'local',
84+
state: 'state',
85+
codeVerifier: 'codeVerifier'
86+
});
87+
88+
expect(mtLinkSdk.storedOptions.mode).toBe('local');
89+
expect(mtLinkSdk.storedOptions.state).toBe('state');
90+
expect(mtLinkSdk.storedOptions.codeVerifier).toBe('codeVerifier');
91+
});
92+
93+
test('invalid mode default to production', () => {
94+
mtLinkSdk.init('clientId', {
95+
// @ts-ignore
96+
mode: 'invalid'
97+
});
98+
99+
expect(mtLinkSdk.storedOptions.mode).toBe('production');
100+
});
101+
});

src/__tests__/server_paths.test.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import { MY_ACCOUNT_DOMAINS, VAULT_DOMAINS, LINK_KIT_DOMAINS } from '../server-paths';
2+
3+
describe('server_paths', () => {
4+
test('MY_ACCOUNT_DOMAINS', () => {
5+
expect(Object.keys(MY_ACCOUNT_DOMAINS)).toMatchObject(['production', 'staging', 'develop', 'local']);
6+
7+
expect(MY_ACCOUNT_DOMAINS.production).toContain('myaccount');
8+
expect(MY_ACCOUNT_DOMAINS.staging).toContain('myaccount');
9+
expect(MY_ACCOUNT_DOMAINS.staging).toContain('staging');
10+
expect(MY_ACCOUNT_DOMAINS.develop).toContain('myaccount');
11+
expect(MY_ACCOUNT_DOMAINS.develop).toContain('develop');
12+
expect(MY_ACCOUNT_DOMAINS.local).toContain('localhost');
13+
});
14+
15+
test('VAULT_DOMAINS', () => {
16+
expect(Object.keys(VAULT_DOMAINS)).toMatchObject(['production', 'staging', 'develop', 'local']);
17+
18+
expect(VAULT_DOMAINS.production).toContain('vault');
19+
expect(VAULT_DOMAINS.staging).toContain('vault');
20+
expect(VAULT_DOMAINS.staging).toContain('staging');
21+
expect(VAULT_DOMAINS.develop).toContain('vault');
22+
expect(VAULT_DOMAINS.develop).toContain('develop');
23+
expect(VAULT_DOMAINS.local).toContain('localhost');
24+
});
25+
26+
test('LINK_KIT_DOMAINS', () => {
27+
expect(Object.keys(LINK_KIT_DOMAINS)).toMatchObject(['production', 'staging', 'develop', 'local']);
28+
29+
expect(LINK_KIT_DOMAINS.production).toContain('linkkit');
30+
expect(LINK_KIT_DOMAINS.staging).toContain('linkkit');
31+
expect(LINK_KIT_DOMAINS.staging).toContain('staging');
32+
expect(LINK_KIT_DOMAINS.develop).toContain('linkkit');
33+
expect(LINK_KIT_DOMAINS.develop).toContain('develop');
34+
expect(LINK_KIT_DOMAINS.local).toContain('localhost');
35+
});
36+
});

src/__tests__/storage.test.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { set, get, STORE_KEY } from '../storage';
2+
3+
describe('storage', () => {
4+
test('set, get', () => {
5+
expect(get('key1')).toBeUndefined();
6+
7+
set('key1', 'value1');
8+
9+
expect(get('key1')).toBe('value1');
10+
});
11+
12+
test('get with invalid existing storage value', () => {
13+
window.sessionStorage.setItem(STORE_KEY, '"abc"');
14+
15+
expect(get('key1')).toBeUndefined();
16+
17+
window.sessionStorage.setItem(STORE_KEY, '');
18+
19+
expect(get('key1')).toBeUndefined();
20+
});
21+
});

0 commit comments

Comments
 (0)