@w3-commons/js-build-resources 0.0.1-security → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of @w3-commons/js-build-resources might be problematic. Click here for more details.
- package/package.json +9 -3
- package/settings-service/.eslintrc.js +4 -0
- package/settings-service/.node-version +1 -0
- package/settings-service/.prettierrc +6 -0
- package/settings-service/.whitesource +15 -0
- package/settings-service/LICENSE +4 -0
- package/settings-service/README.md +50 -0
- package/settings-service/build.yml +56 -0
- package/settings-service/collectCodeCoverage.js +9 -0
- package/settings-service/db/cassandra/Dockerfile +3 -0
- package/settings-service/db/cassandra/createkeyspace.dev.cql +4 -0
- package/settings-service/db/cassandra/createkeyspace.dev.sh +3 -0
- package/settings-service/db/cassandra/schema_001.cql +15 -0
- package/settings-service/db/cassandra/schema_002.cql +8 -0
- package/settings-service/db/cassandra/schema_003.cql +10 -0
- package/settings-service/db/cassandra/schema_004.cql +1 -0
- package/settings-service/db/cassandra/schema_005.cql +39 -0
- package/settings-service/db/cassandra/schema_006.cql +255 -0
- package/settings-service/db/cassandra/schema_007.cql +40 -0
- package/settings-service/db/cassandra/schema_008.cql +2 -0
- package/settings-service/db/cassandra/schema_009.cql +143 -0
- package/settings-service/db/cassandra/schema_010.cql +143 -0
- package/settings-service/db/cassandra/schema_011.cql +2 -0
- package/settings-service/db/cassandra/schema_012.cql +8 -0
- package/settings-service/jest.config.fn.js +3 -0
- package/settings-service/jest.config.it.js +3 -0
- package/settings-service/jest.config.js +14 -0
- package/settings-service/jest.config.unit.js +19 -0
- package/settings-service/jest.setup.js +11 -0
- package/settings-service/package-lock.json +11772 -0
- package/settings-service/package.json +101 -0
- package/settings-service/scripts/run-fn-tests.sh +3 -0
- package/settings-service/sonar-project.properties +3 -0
- package/settings-service/src/__tests__/functional/controller/ApiKeyController.fn.ts +132 -0
- package/settings-service/src/__tests__/functional/middleware/AuthMiddlewareNextGenSSO.fn.ts +82 -0
- package/settings-service/src/__tests__/functional/repo/settingsRepo.fn.ts +302 -0
- package/settings-service/src/__tests__/functional/unified-profile/unified-profile.fn.ts +66 -0
- package/settings-service/src/__tests__/integration/repo/ApiKeyRepo.it.ts +43 -0
- package/settings-service/src/__tests__/integration/repo/settingsRepo.it.ts +142 -0
- package/settings-service/src/__tests__/integration/unified-profile/unified-profile.it.ts +31 -0
- package/settings-service/src/__tests__/unit/ErrResponse.ts +4 -0
- package/settings-service/src/__tests__/unit/JWTResponse.ts +18 -0
- package/settings-service/src/__tests__/unit/bluepagesResponse.ts +25 -0
- package/settings-service/src/__tests__/unit/controller/ApiKeyController.spec.ts +217 -0
- package/settings-service/src/__tests__/unit/controller/AppSettingsController.spec.ts +133 -0
- package/settings-service/src/__tests__/unit/controller/UserSettingsController.spec.ts +328 -0
- package/settings-service/src/__tests__/unit/controller/getAllSettings.spec.ts +83 -0
- package/settings-service/src/__tests__/unit/middleware/AuthMiddlewareNextGenSSO.spec.ts +282 -0
- package/settings-service/src/__tests__/unit/middleware/AuthenticationMiddleware.spec.ts +494 -0
- package/settings-service/src/__tests__/unit/repo/ApiKeyRepo.spec.ts +194 -0
- package/settings-service/src/__tests__/unit/repo/getAllSettings.spec.ts +100 -0
- package/settings-service/src/__tests__/unit/repo/getUserSettingsRepo.spec.ts +249 -0
- package/settings-service/src/__tests__/unit/repo/settingsRepo.spec.ts +614 -0
- package/settings-service/src/__tests__/unit/unified-profile/UnifiedProfileClient.spec.ts +31 -0
- package/settings-service/src/__tests__/unit/unified-profile/unifiedProfileUtils.spec.ts +36 -0
- package/settings-service/src/__tests__/utils/test-utils.ts +41 -0
- package/settings-service/src/config/config.ts +190 -0
- package/settings-service/src/controller/ApiKeyController.ts +114 -0
- package/settings-service/src/controller/AppSettingsController.ts +137 -0
- package/settings-service/src/controller/UserSettingsController.ts +202 -0
- package/settings-service/src/helpers/commons.ts +69 -0
- package/settings-service/src/logger/logger.ts +17 -0
- package/settings-service/src/middleware/AuthenticationMiddleware.ts +486 -0
- package/settings-service/src/middleware/AuthenticationMiddlewareFactory.ts +10 -0
- package/settings-service/src/repo/ApiKeyRepo.ts +135 -0
- package/settings-service/src/repo/ApiKeyRepoFactory.ts +10 -0
- package/settings-service/src/repo/CassandraClient.ts +33 -0
- package/settings-service/src/repo/CassandraClientFactory.ts +11 -0
- package/settings-service/src/repo/apiKeyQueries.ts +64 -0
- package/settings-service/src/repo/cassandraDBHelpers.ts +119 -0
- package/settings-service/src/repo/settingsRepo.ts +388 -0
- package/settings-service/src/repo/settingsRepoFactory.ts +10 -0
- package/settings-service/src/repo/settingsRepoQueries.ts +62 -0
- package/settings-service/src/routes/apiKeyRoutes.ts +27 -0
- package/settings-service/src/routes/appSettingsRoutes.ts +30 -0
- package/settings-service/src/routes/healthCheck.ts +10 -0
- package/settings-service/src/routes/swagger.ts +8 -0
- package/settings-service/src/routes/userSettingsRoutes.ts +30 -0
- package/settings-service/src/server.ts +77 -0
- package/settings-service/src/swagger.json +732 -0
- package/settings-service/src/types/ApiKey.ts +19 -0
- package/settings-service/src/types/IRequest.ts +9 -0
- package/settings-service/src/types/IRequestAuthorization.ts +5 -0
- package/settings-service/src/types/IRouteOptions.ts +5 -0
- package/settings-service/src/types/QueryResultsTypes.ts +6 -0
- package/settings-service/src/types/UserSettingsControllerTypes.ts +5 -0
- package/settings-service/src/types/W3IdUser.ts +36 -0
- package/settings-service/src/types/settingsRepoTypes.ts +61 -0
- package/settings-service/src/types/unifiedProfileTypes.ts +10 -0
- package/settings-service/src/unified-profile/UnifiedProfileClient.ts +29 -0
- package/settings-service/src/unified-profile/UnifiedProfileClientFactory.ts +10 -0
- package/settings-service/src/unified-profile/unifiedProfileUtils.ts +22 -0
- package/settings-service/src/util/downloadCassandra.ts +34 -0
- package/settings-service/src/util/isocodeMapper.ts +22 -0
- package/settings-service/src/util/languages.ts +1457 -0
- package/settings-service/test_resources/mockApiKeyDBResult.json +8 -0
- package/settings-service/tsconfig.json +40 -0
- package/README.md +0 -5
@@ -0,0 +1,100 @@
|
|
1
|
+
import { SettingsRepoFactory } from '../../../repo/settingsRepoFactory';
|
2
|
+
import { cassandraDBHelpers } from '../../../repo/cassandraDBHelpers';
|
3
|
+
import * as srq from '../../../repo/settingsRepoQueries';
|
4
|
+
import { TEST_APP_ID } from '../../utils/test-utils';
|
5
|
+
|
6
|
+
const mockAllUsersRows = [
|
7
|
+
{
|
8
|
+
user_id: 'ABCDEFGHI',
|
9
|
+
app_id: 'general',
|
10
|
+
setting_name: 'primaryLanguage',
|
11
|
+
setting_value: 'en',
|
12
|
+
},
|
13
|
+
{
|
14
|
+
user_id: 'AABBCCDDE',
|
15
|
+
app_id: 'general',
|
16
|
+
setting_name: 'primaryLanguage',
|
17
|
+
setting_value: 'en',
|
18
|
+
},
|
19
|
+
{
|
20
|
+
user_id: 'BBCCDDEEF',
|
21
|
+
app_id: 'general',
|
22
|
+
setting_name: 'primaryLanguage',
|
23
|
+
setting_value: 'en',
|
24
|
+
},
|
25
|
+
{
|
26
|
+
user_id: 'CCDDEEFFG',
|
27
|
+
app_id: 'general',
|
28
|
+
setting_name: 'primaryLanguage',
|
29
|
+
setting_value: 'en',
|
30
|
+
},
|
31
|
+
{
|
32
|
+
user_id: 'DDEEFFGGH',
|
33
|
+
app_id: 'general',
|
34
|
+
setting_name: 'primaryLanguage',
|
35
|
+
setting_value: 'en',
|
36
|
+
},
|
37
|
+
];
|
38
|
+
|
39
|
+
describe('getAllSettings settingsRepo method', () => {
|
40
|
+
let settingsRepo;
|
41
|
+
beforeAll(() => {
|
42
|
+
settingsRepo = SettingsRepoFactory.accessOrCreateSingleton();
|
43
|
+
});
|
44
|
+
it('should query uses_settings with default values when no query params passed', async () => {
|
45
|
+
const mockResultSet: any = {
|
46
|
+
rows: mockAllUsersRows,
|
47
|
+
};
|
48
|
+
cassandraDBHelpers.paginate = jest.fn().mockResolvedValueOnce(mockResultSet);
|
49
|
+
const response = await settingsRepo.getAllSettings({});
|
50
|
+
expect(response).toBeDefined();
|
51
|
+
expect(response).toMatchObject(mockResultSet);
|
52
|
+
expect(cassandraDBHelpers.paginate).toHaveBeenCalledTimes(1);
|
53
|
+
expect(cassandraDBHelpers.paginate).toHaveBeenCalledWith(srq.allUserSettingsQuery, [], {
|
54
|
+
pageState: '',
|
55
|
+
fetchSize: 500,
|
56
|
+
});
|
57
|
+
});
|
58
|
+
it('should query user_settings_by_app with appId when no settingName passed', async () => {
|
59
|
+
const mockResultSet: any = {
|
60
|
+
rows: mockAllUsersRows,
|
61
|
+
};
|
62
|
+
cassandraDBHelpers.paginate = jest.fn().mockResolvedValueOnce(mockResultSet);
|
63
|
+
const testQueryParams = {
|
64
|
+
pageState: 'test-page-state',
|
65
|
+
settingName: undefined,
|
66
|
+
fetchSize: 10,
|
67
|
+
appId: TEST_APP_ID,
|
68
|
+
};
|
69
|
+
const response = await settingsRepo.getAllSettings(testQueryParams);
|
70
|
+
expect(response).toBeDefined();
|
71
|
+
expect(response).toMatchObject(mockResultSet);
|
72
|
+
expect(cassandraDBHelpers.paginate).toHaveBeenCalledTimes(1);
|
73
|
+
expect(cassandraDBHelpers.paginate).toHaveBeenCalledWith(
|
74
|
+
srq.allUserSettingsByAppIdQuery,
|
75
|
+
[testQueryParams.appId],
|
76
|
+
{ pageState: testQueryParams.pageState, fetchSize: testQueryParams.fetchSize },
|
77
|
+
);
|
78
|
+
});
|
79
|
+
it('should query user_settings_by_app with appId and settingName', async () => {
|
80
|
+
const mockResultSet: any = {
|
81
|
+
rows: mockAllUsersRows,
|
82
|
+
};
|
83
|
+
cassandraDBHelpers.paginate = jest.fn().mockResolvedValueOnce(mockResultSet);
|
84
|
+
const testQueryParams = {
|
85
|
+
pageState: 'test-page-state',
|
86
|
+
settingName: 'test-setting-name',
|
87
|
+
fetchSize: 10,
|
88
|
+
appId: TEST_APP_ID,
|
89
|
+
};
|
90
|
+
const response = await settingsRepo.getAllSettings(testQueryParams);
|
91
|
+
expect(response).toBeDefined();
|
92
|
+
expect(response).toMatchObject(mockResultSet);
|
93
|
+
expect(cassandraDBHelpers.paginate).toHaveBeenCalledTimes(1);
|
94
|
+
expect(cassandraDBHelpers.paginate).toHaveBeenCalledWith(
|
95
|
+
srq.allUserSettingsBySettingNameQuery,
|
96
|
+
[testQueryParams.appId, testQueryParams.settingName],
|
97
|
+
{ pageState: testQueryParams.pageState, fetchSize: testQueryParams.fetchSize },
|
98
|
+
);
|
99
|
+
});
|
100
|
+
});
|
@@ -0,0 +1,249 @@
|
|
1
|
+
import { SettingsRepoFactory } from '../../../repo/settingsRepoFactory';
|
2
|
+
import { cassandraDBHelpers } from '../../../repo/cassandraDBHelpers';
|
3
|
+
import { SettingsRepo } from '../../../repo/settingsRepo';
|
4
|
+
import { getUnifiedProfile } from '../../../unified-profile/unifiedProfileUtils';
|
5
|
+
|
6
|
+
jest.mock('../../../unified-profile/unifiedProfileUtils');
|
7
|
+
|
8
|
+
const USER_ID = 'AAABBBCCC';
|
9
|
+
|
10
|
+
const languageAppSettings = {
|
11
|
+
secondaryLanguages: {
|
12
|
+
options: ['en', 'fr', 'sk'],
|
13
|
+
setting_type: 'array',
|
14
|
+
},
|
15
|
+
primaryLanguage: {
|
16
|
+
options: ['en', 'fr', 'sk'],
|
17
|
+
setting_type: 'string',
|
18
|
+
default: 'en',
|
19
|
+
},
|
20
|
+
};
|
21
|
+
|
22
|
+
const settingsRepo: SettingsRepo = SettingsRepoFactory.accessOrCreateSingleton();
|
23
|
+
afterEach(() => {
|
24
|
+
jest.resetAllMocks();
|
25
|
+
});
|
26
|
+
|
27
|
+
describe('getUserSettings backup language', () => {
|
28
|
+
it('should get backup language from unified profile language array when no language found in general settings, looks up via taxonomy peoples array', async () => {
|
29
|
+
settingsRepo.getAppSettings = jest.fn().mockReturnValue(languageAppSettings);
|
30
|
+
const mockUserResultSet = {
|
31
|
+
rows: [],
|
32
|
+
};
|
33
|
+
cassandraDBHelpers.execute = jest.fn().mockResolvedValueOnce(mockUserResultSet);
|
34
|
+
const spyOnUpdateSettings = jest
|
35
|
+
.spyOn(settingsRepo, 'updateUserSettings')
|
36
|
+
.mockResolvedValueOnce(true)
|
37
|
+
.mockResolvedValueOnce(true);
|
38
|
+
|
39
|
+
const mockedProfileCall = getUnifiedProfile as jest.Mock;
|
40
|
+
mockedProfileCall.mockResolvedValueOnce({ content: { languages: ['French (Belgium)'] } });
|
41
|
+
|
42
|
+
const userSettings = await settingsRepo.getUserSettings(USER_ID, 'general');
|
43
|
+
expect(userSettings).toBeDefined();
|
44
|
+
expect(userSettings.primaryLanguage).toBe('fr');
|
45
|
+
expect(spyOnUpdateSettings).toHaveBeenCalled();
|
46
|
+
expect(spyOnUpdateSettings).toHaveBeenCalledTimes(2);
|
47
|
+
expect(spyOnUpdateSettings).toHaveBeenCalledWith(USER_ID, 'general', 'primaryLanguage', 'fr');
|
48
|
+
});
|
49
|
+
it('should get backup language from unified profile language array when no language found in general settings, looks up via taxonomy peoples string instead of array', async () => {
|
50
|
+
settingsRepo.getAppSettings = jest.fn().mockReturnValue(languageAppSettings);
|
51
|
+
const mockUserResultSet = {
|
52
|
+
rows: [],
|
53
|
+
};
|
54
|
+
cassandraDBHelpers.execute = jest.fn().mockResolvedValueOnce(mockUserResultSet);
|
55
|
+
const spyOnUpdateSettings = jest
|
56
|
+
.spyOn(settingsRepo, 'updateUserSettings')
|
57
|
+
.mockResolvedValueOnce(true)
|
58
|
+
.mockResolvedValueOnce(true);
|
59
|
+
|
60
|
+
const mockedProfileCall = getUnifiedProfile as jest.Mock;
|
61
|
+
mockedProfileCall.mockResolvedValueOnce({ content: { languages: ['Finnish'] } });
|
62
|
+
|
63
|
+
const userSettings = await settingsRepo.getUserSettings(USER_ID, 'general');
|
64
|
+
expect(userSettings).toBeDefined();
|
65
|
+
expect(userSettings.primaryLanguage).toBe('fi');
|
66
|
+
expect(spyOnUpdateSettings).toHaveBeenCalled();
|
67
|
+
expect(spyOnUpdateSettings).toHaveBeenCalledTimes(2);
|
68
|
+
expect(spyOnUpdateSettings).toHaveBeenCalledWith(USER_ID, 'general', 'primaryLanguage', 'fi');
|
69
|
+
});
|
70
|
+
it('should get backup language from unified profile preferredLanguage when no language in general settings and there is more than 1 language from UP', async () => {
|
71
|
+
settingsRepo.getAppSettings = jest.fn().mockReturnValue(languageAppSettings);
|
72
|
+
const mockUserResultSet: any = {
|
73
|
+
rows: [],
|
74
|
+
};
|
75
|
+
cassandraDBHelpers.execute = jest.fn().mockResolvedValueOnce(mockUserResultSet);
|
76
|
+
const spyOnUpdateSettings = jest
|
77
|
+
.spyOn(settingsRepo, 'updateUserSettings')
|
78
|
+
.mockResolvedValueOnce(true)
|
79
|
+
.mockResolvedValueOnce(true);
|
80
|
+
|
81
|
+
const mockedProfileCall = getUnifiedProfile as jest.Mock;
|
82
|
+
mockedProfileCall.mockResolvedValueOnce({
|
83
|
+
content: { languages: ['Chinese', 'French (Belgium)'], preferredLanguage: 'French (Belgium)' },
|
84
|
+
});
|
85
|
+
|
86
|
+
const userSettings = await settingsRepo.getUserSettings(USER_ID, 'general');
|
87
|
+
expect(userSettings).toBeDefined();
|
88
|
+
expect(userSettings.primaryLanguage).toBe('fr');
|
89
|
+
expect(spyOnUpdateSettings).toHaveBeenCalled();
|
90
|
+
expect(spyOnUpdateSettings).toHaveBeenCalledTimes(2);
|
91
|
+
expect(spyOnUpdateSettings).toHaveBeenCalledWith(USER_ID, 'general', 'primaryLanguage', 'fr');
|
92
|
+
});
|
93
|
+
it('should return default setting when no preferred language found from Unified Profile', async () => {
|
94
|
+
settingsRepo.getAppSettings = jest.fn().mockReturnValue(languageAppSettings);
|
95
|
+
const mockUserResultSet = {
|
96
|
+
rows: [],
|
97
|
+
};
|
98
|
+
cassandraDBHelpers.execute = jest.fn().mockResolvedValueOnce(mockUserResultSet);
|
99
|
+
const spyOnUpdateSettings = jest
|
100
|
+
.spyOn(settingsRepo, 'updateUserSettings')
|
101
|
+
.mockResolvedValueOnce(true)
|
102
|
+
.mockResolvedValueOnce(true);
|
103
|
+
|
104
|
+
const mockedProfileCall = getUnifiedProfile as jest.Mock;
|
105
|
+
mockedProfileCall.mockResolvedValueOnce({ content: { languages: ['Chinese', 'French (Belgium)'] } });
|
106
|
+
|
107
|
+
const userSettings = await settingsRepo.getUserSettings(USER_ID, 'general');
|
108
|
+
|
109
|
+
expect(userSettings).toBeDefined();
|
110
|
+
expect(userSettings.primaryLanguage).toBe('en');
|
111
|
+
expect(spyOnUpdateSettings).toHaveBeenCalled();
|
112
|
+
expect(spyOnUpdateSettings).toHaveBeenCalledTimes(2);
|
113
|
+
expect(spyOnUpdateSettings).toHaveBeenCalledWith(USER_ID, 'general', 'primaryLanguage', 'en');
|
114
|
+
});
|
115
|
+
it('should return default setting when no language found from Unified Profile', async () => {
|
116
|
+
settingsRepo.getAppSettings = jest.fn().mockReturnValue(languageAppSettings);
|
117
|
+
const mockUserResultSet = {
|
118
|
+
rows: [],
|
119
|
+
};
|
120
|
+
cassandraDBHelpers.execute = jest.fn().mockResolvedValueOnce(mockUserResultSet);
|
121
|
+
const spyOnUpdateSettings = jest
|
122
|
+
.spyOn(settingsRepo, 'updateUserSettings')
|
123
|
+
.mockResolvedValueOnce(true)
|
124
|
+
.mockResolvedValueOnce(true);
|
125
|
+
|
126
|
+
const mockedProfileCall = getUnifiedProfile as jest.Mock;
|
127
|
+
mockedProfileCall.mockResolvedValueOnce({ content: {} });
|
128
|
+
|
129
|
+
const userSettings = await settingsRepo.getUserSettings(USER_ID, 'general');
|
130
|
+
|
131
|
+
expect(userSettings).toBeDefined();
|
132
|
+
expect(userSettings.primaryLanguage).toBe('en');
|
133
|
+
expect(spyOnUpdateSettings).toHaveBeenCalled();
|
134
|
+
expect(spyOnUpdateSettings).toHaveBeenCalledTimes(2);
|
135
|
+
expect(spyOnUpdateSettings).toHaveBeenCalledWith(USER_ID, 'general', 'primaryLanguage', 'en');
|
136
|
+
});
|
137
|
+
it('should return default setting when an unsupported/bad language is found from Unified Profile languages array', async () => {
|
138
|
+
settingsRepo.getAppSettings = jest.fn().mockReturnValue(languageAppSettings);
|
139
|
+
const mockUserResultSet = {
|
140
|
+
rows: [],
|
141
|
+
};
|
142
|
+
cassandraDBHelpers.execute = jest.fn().mockResolvedValueOnce(mockUserResultSet);
|
143
|
+
const spyOnUpdateSettings = jest
|
144
|
+
.spyOn(settingsRepo, 'updateUserSettings')
|
145
|
+
.mockResolvedValueOnce(true)
|
146
|
+
.mockResolvedValueOnce(true);
|
147
|
+
|
148
|
+
const mockedProfileCall = getUnifiedProfile as jest.Mock;
|
149
|
+
mockedProfileCall.mockResolvedValueOnce({ content: { languages: ['UngaBunga'] } });
|
150
|
+
const userSettings = await settingsRepo.getUserSettings(USER_ID, 'general');
|
151
|
+
expect(userSettings).toBeDefined();
|
152
|
+
expect(userSettings.primaryLanguage).toBe('en');
|
153
|
+
expect(spyOnUpdateSettings).toHaveBeenCalled();
|
154
|
+
expect(spyOnUpdateSettings).toHaveBeenCalledTimes(2);
|
155
|
+
expect(spyOnUpdateSettings).toHaveBeenCalledWith(USER_ID, 'general', 'primaryLanguage', 'en');
|
156
|
+
});
|
157
|
+
it('should return default setting when an unsupported/bad language is found', async () => {
|
158
|
+
settingsRepo.getAppSettings = jest.fn().mockReturnValue(languageAppSettings);
|
159
|
+
const mockUserResultSet = {
|
160
|
+
rows: [],
|
161
|
+
};
|
162
|
+
cassandraDBHelpers.execute = jest.fn().mockResolvedValueOnce(mockUserResultSet);
|
163
|
+
const spyOnUpdateSettings = jest
|
164
|
+
.spyOn(settingsRepo, 'updateUserSettings')
|
165
|
+
.mockResolvedValueOnce(true)
|
166
|
+
.mockResolvedValueOnce(true);
|
167
|
+
|
168
|
+
const mockedProfileCall = getUnifiedProfile as jest.Mock;
|
169
|
+
mockedProfileCall.mockResolvedValueOnce({
|
170
|
+
content: { languages: ['UngaBunga', 'French (Belgium)'], preferredLanguage: 'UngaBunga' },
|
171
|
+
});
|
172
|
+
const userSettings = await settingsRepo.getUserSettings(USER_ID, 'general');
|
173
|
+
expect(userSettings).toBeDefined();
|
174
|
+
expect(userSettings.primaryLanguage).toBe('en');
|
175
|
+
expect(spyOnUpdateSettings).toHaveBeenCalled();
|
176
|
+
expect(spyOnUpdateSettings).toHaveBeenCalledTimes(2);
|
177
|
+
expect(spyOnUpdateSettings).toHaveBeenCalledWith(USER_ID, 'general', 'primaryLanguage', 'en');
|
178
|
+
});
|
179
|
+
it('should get backup language from unified profile preferredLanguage when no language in general settings and there is more than 1 language from UP, looks up peoples array', async () => {
|
180
|
+
settingsRepo.getAppSettings = jest.fn().mockReturnValue(languageAppSettings);
|
181
|
+
const mockUserResultSet = {
|
182
|
+
rows: [],
|
183
|
+
};
|
184
|
+
cassandraDBHelpers.execute = jest.fn().mockResolvedValueOnce(mockUserResultSet);
|
185
|
+
const spyOnUpdateSettings = jest
|
186
|
+
.spyOn(settingsRepo, 'updateUserSettings')
|
187
|
+
.mockResolvedValueOnce(true)
|
188
|
+
.mockResolvedValueOnce(true);
|
189
|
+
|
190
|
+
const mockedProfileCall = getUnifiedProfile as jest.Mock;
|
191
|
+
mockedProfileCall.mockResolvedValueOnce({
|
192
|
+
content: { languages: ['Chinese', 'French'], preferredLanguage: 'Portuguese (Brazil)' },
|
193
|
+
});
|
194
|
+
|
195
|
+
const userSettings = await settingsRepo.getUserSettings(USER_ID, 'general');
|
196
|
+
expect(userSettings).toBeDefined();
|
197
|
+
expect(userSettings.primaryLanguage).toBe('pt');
|
198
|
+
expect(spyOnUpdateSettings).toHaveBeenCalled();
|
199
|
+
expect(spyOnUpdateSettings).toHaveBeenCalledTimes(2);
|
200
|
+
expect(spyOnUpdateSettings).toHaveBeenCalledWith(USER_ID, 'general', 'primaryLanguage', 'pt');
|
201
|
+
});
|
202
|
+
it('should get backup language from unified profile preferredLanguage when an unsupported/bad language is found from Unified Profile languages array of size 1, looks up peoples array', async () => {
|
203
|
+
settingsRepo.getAppSettings = jest.fn().mockReturnValue(languageAppSettings);
|
204
|
+
const mockUserResultSet = {
|
205
|
+
rows: [],
|
206
|
+
};
|
207
|
+
cassandraDBHelpers.execute = jest.fn().mockResolvedValueOnce(mockUserResultSet);
|
208
|
+
const spyOnUpdateSettings = jest
|
209
|
+
.spyOn(settingsRepo, 'updateUserSettings')
|
210
|
+
.mockResolvedValueOnce(true)
|
211
|
+
.mockResolvedValueOnce(true);
|
212
|
+
|
213
|
+
const mockedProfileCall = getUnifiedProfile as jest.Mock;
|
214
|
+
mockedProfileCall.mockResolvedValueOnce({
|
215
|
+
content: { languages: ['UngaBunga'], preferredLanguage: 'Portuguese (Brazil)' },
|
216
|
+
});
|
217
|
+
const userSettings = await settingsRepo.getUserSettings(USER_ID, 'general');
|
218
|
+
expect(userSettings).toBeDefined();
|
219
|
+
expect(userSettings.primaryLanguage).toBe('pt');
|
220
|
+
expect(spyOnUpdateSettings).toHaveBeenCalled();
|
221
|
+
expect(spyOnUpdateSettings).toHaveBeenCalledTimes(2);
|
222
|
+
expect(spyOnUpdateSettings).toHaveBeenCalledWith(USER_ID, 'general', 'primaryLanguage', 'pt');
|
223
|
+
});
|
224
|
+
it('should get backup language from unified profile preferredLanguage when an unsupported/bad language is found from Unified Profile languages array, looks up peoples array', async () => {
|
225
|
+
settingsRepo.getAppSettings = jest.fn().mockReturnValue(languageAppSettings);
|
226
|
+
const mockUserResultSet = {
|
227
|
+
rows: [],
|
228
|
+
};
|
229
|
+
cassandraDBHelpers.execute = jest.fn().mockResolvedValueOnce(mockUserResultSet);
|
230
|
+
const spyOnUpdateSettings = jest
|
231
|
+
.spyOn(settingsRepo, 'updateUserSettings')
|
232
|
+
.mockResolvedValueOnce(true)
|
233
|
+
.mockResolvedValueOnce(true);
|
234
|
+
|
235
|
+
const mockedProfileCall = getUnifiedProfile as jest.Mock;
|
236
|
+
mockedProfileCall.mockResolvedValueOnce({
|
237
|
+
content: {
|
238
|
+
languages: ['UngaBunga', 'Portuguese (Brazil)'],
|
239
|
+
preferredLanguage: 'Portuguese (Brazil)',
|
240
|
+
},
|
241
|
+
});
|
242
|
+
const userSettings = await settingsRepo.getUserSettings(USER_ID, 'general');
|
243
|
+
expect(userSettings).toBeDefined();
|
244
|
+
expect(userSettings.primaryLanguage).toBe('pt');
|
245
|
+
expect(spyOnUpdateSettings).toHaveBeenCalled();
|
246
|
+
expect(spyOnUpdateSettings).toHaveBeenCalledTimes(2);
|
247
|
+
expect(spyOnUpdateSettings).toHaveBeenCalledWith(USER_ID, 'general', 'primaryLanguage', 'pt');
|
248
|
+
});
|
249
|
+
});
|