Skip to content

Commit 1846934

Browse files
BREAKING-CHANGE: the frameContext to portalContext for PortalConfig #25
- removing tenant id from the library - changing the frameContext to portalContext for PortalConfig - optimize some imports Co-authored-by: Grzegorz Krajniak <[email protected]>
1 parent ba58995 commit 1846934

13 files changed

+55
-158
lines changed

integration-tests/config.integration-spec.ts

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,14 @@ import { mock } from 'jest-mock-extended';
33
import { Test, TestingModule } from '@nestjs/testing';
44
import request from 'supertest';
55
import { INestApplication, ValidationPipe } from '@nestjs/common';
6-
import { LuigiConfigNodesService } from '../src/config/luigi/luigi-config-nodes/luigi-config-nodes.service';
7-
import { TenantService } from '../src/auth/tenant.service';
8-
import { HeaderParserService } from '../src/services/header-parser.service';
9-
import { FeatureTogglesProvider } from '../src/config/context/feature-toggles-provider';
106
import {
7+
LuigiConfigNodesService,
8+
HeaderParserService,
9+
FeatureTogglesProvider,
10+
ServiceProvider,
1111
FEATURE_TOGGLES_INJECTION_TOKEN,
1212
PortalModule,
13-
TENANT_PROVIDER_INJECTION_TOKEN,
1413
} from '../src';
15-
import { ServiceProvider } from '../src/config/model/luigi.node';
1614

1715
const MockEntityProvider = 'MockEntityProvider';
1816
const entityContext = { abc: 'def' };
@@ -24,7 +22,6 @@ describe('ConfigController', () => {
2422
let nodesService: LuigiConfigNodesService;
2523
let getEntityContextMock: jest.Mock;
2624
let requestMock: Request;
27-
let tenantProvider: TenantService;
2825
let headerParserService: HeaderParserService;
2926
let featureTogglesProvider: FeatureTogglesProvider;
3027
const mockTenant = '01emp2m3v3batersxj73qhm5zq';
@@ -54,16 +51,11 @@ describe('ConfigController', () => {
5451
featureTogglesProvider = module.get<FeatureTogglesProvider>(
5552
FEATURE_TOGGLES_INJECTION_TOKEN
5653
);
57-
tenantProvider = module.get<TenantService>(TENANT_PROVIDER_INJECTION_TOKEN);
5854

5955
jest
6056
.spyOn(featureTogglesProvider, 'getFeatureToggles')
6157
.mockResolvedValue({});
6258

63-
jest
64-
.spyOn(tenantProvider, 'provideTenant')
65-
.mockReturnValue(Promise.resolve(mockTenant));
66-
6759
jest
6860
.spyOn(headerParserService, 'extractBearerToken')
6961
.mockReturnValue(token);

package-lock.json

Lines changed: 22 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
"prettier": "@openmfp/config-prettier",
1616
"scripts": {
1717
"build": "nest build",
18-
"build:watch": "mkdir dist && nodemon --ignore dist --ext js,yml,yaml,ts,html,css,scss,json,md --exec \"rimraf dist && npm run build && yalc publish --push --sig\"",
18+
"build:watch": "mkdirp dist && nodemon --ignore dist --ext js,yml,yaml,ts,html,css,scss,json,md --exec \"rimraf dist && npm run build && yalc publish --push --sig\"",
1919
"lint": "eslint \"./**/*.ts\"",
2020
"lint:fix": "eslint \"./**/*.ts\" --fix",
2121
"test": "npm run test:unit && npm run test:integration",
@@ -61,6 +61,7 @@
6161
"jest": "29.7.0",
6262
"jest-junit": "16.0.0",
6363
"jest-mock-extended": "3.0.5",
64+
"mkdirp": "^3.0.1",
6465
"nock": "13.5.4",
6566
"nodemon": "^3.1.4",
6667
"prettier": "^3.2.0",

src/auth/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,3 @@ export { AuthController } from './auth.controller';
33
export * from './auth.callback';
44
export { AuthTokenService, AuthTokenData } from './auth-token.service';
55
export { AuthCallback } from './auth.callback';
6-
export { TenantService, EmptyTenantService } from './tenant.service';

src/auth/tenant.service.spec.ts

Lines changed: 0 additions & 20 deletions
This file was deleted.

src/auth/tenant.service.ts

Lines changed: 0 additions & 13 deletions
This file was deleted.

src/config/config.controller.spec.ts

Lines changed: 7 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,12 @@ import { Test, TestingModule } from '@nestjs/testing';
44
import { ConfigController } from './config.controller';
55
import { PortalModule } from '../portal.module';
66
import { LuigiConfigNodesService } from './luigi/luigi-config-nodes/luigi-config-nodes.service';
7-
import { TenantService } from '../auth/tenant.service';
87
import {
98
FEATURE_TOGGLES_INJECTION_TOKEN,
109
PORTAL_CONTEXT_INJECTION_TOKEN,
11-
TENANT_PROVIDER_INJECTION_TOKEN,
1210
} from '../injection-tokens';
1311
import { FeatureTogglesProvider } from './context/feature-toggles-provider';
14-
import { HeaderParserService } from '../services/header-parser.service';
12+
import { HeaderParserService } from '../services';
1513
import { ServiceProvider } from './model/luigi.node';
1614
import { PortalContextProvider } from './context/portal-context-provider';
1715
import {
@@ -31,8 +29,7 @@ describe('ConfigController', () => {
3129
let getEntityContextMock: jest.Mock;
3230
let requestMock: Request;
3331
let responseMock: Response;
34-
let tenantProvider: TenantService;
35-
let frameContextProvider: PortalContextProvider;
32+
let portalContextProvider: PortalContextProvider;
3633
let headerParserService: HeaderParserService;
3734
let featureTogglesProvider: FeatureTogglesProvider;
3835
let entityContextProviders: EntityContextProviders;
@@ -65,19 +62,14 @@ describe('ConfigController', () => {
6562
featureTogglesProvider = module.get<FeatureTogglesProvider>(
6663
FEATURE_TOGGLES_INJECTION_TOKEN
6764
);
68-
tenantProvider = module.get<TenantService>(TENANT_PROVIDER_INJECTION_TOKEN);
69-
frameContextProvider = module.get<PortalContextProvider>(
65+
portalContextProvider = module.get<PortalContextProvider>(
7066
PORTAL_CONTEXT_INJECTION_TOKEN
7167
);
7268

7369
jest
7470
.spyOn(featureTogglesProvider, 'getFeatureToggles')
7571
.mockResolvedValue({});
7672

77-
jest
78-
.spyOn(tenantProvider, 'provideTenant')
79-
.mockReturnValue(Promise.resolve(mockTenant));
80-
8173
jest
8274
.spyOn(headerParserService, 'extractBearerToken')
8375
.mockReturnValue(token);
@@ -106,12 +98,10 @@ describe('ConfigController', () => {
10698
);
10799

108100
expect(config.providers).toBe(resultingNodes);
109-
expect(getNodesMock).toHaveBeenCalledWith(token, [], acceptLanguage, {
110-
tenant: mockTenant,
111-
});
101+
expect(getNodesMock).toHaveBeenCalledWith(token, [], acceptLanguage);
112102
});
113103

114-
it('should handle frameContextProvider error', async () => {
104+
it('should handle portalContextProvider error', async () => {
115105
// Arrange
116106
const error = new Error('this is a test error');
117107

@@ -124,7 +114,7 @@ describe('ConfigController', () => {
124114
);
125115

126116
jest
127-
.spyOn(frameContextProvider, 'getContextValues')
117+
.spyOn(portalContextProvider, 'getContextValues')
128118
.mockRejectedValue(error);
129119

130120
// Act
@@ -154,7 +144,7 @@ describe('ConfigController', () => {
154144
);
155145

156146
jest
157-
.spyOn(frameContextProvider, 'getContextValues')
147+
.spyOn(portalContextProvider, 'getContextValues')
158148
.mockImplementation(
159149
() => new Promise((resolve) => setTimeout(resolve, 0))
160150
);
@@ -169,45 +159,6 @@ describe('ConfigController', () => {
169159
// Assert
170160
await expect(result).rejects.toEqual(error);
171161
});
172-
173-
it('should handle tenantProvider error', async () => {
174-
// Arrange
175-
const forbiddenException = new ForbiddenException('you shall not pass');
176-
177-
jest.spyOn(luigiConfigNodesService, 'getNodes').mockResolvedValue([]);
178-
179-
jest
180-
.spyOn(tenantProvider, 'provideTenant')
181-
.mockImplementation(
182-
() =>
183-
new Promise((resolve, reject) =>
184-
setTimeout(reject.bind(reject, forbiddenException), 0)
185-
)
186-
);
187-
188-
jest
189-
.spyOn(featureTogglesProvider, 'getFeatureToggles')
190-
.mockImplementation(
191-
() => new Promise((resolve) => setTimeout(resolve, 0))
192-
);
193-
194-
jest
195-
.spyOn(frameContextProvider, 'getContextValues')
196-
.mockImplementation(
197-
() => new Promise((resolve) => setTimeout(resolve, 0))
198-
);
199-
200-
// Act
201-
const result = controller.getConfig(
202-
requestMock,
203-
responseMock,
204-
acceptLanguage
205-
);
206-
207-
// Assert
208-
await expect(result).resolves.toBeUndefined();
209-
expect(responseMock.status).toHaveBeenCalledWith(HttpStatus.FORBIDDEN);
210-
});
211162
});
212163

213164
describe('getEntityConfig', () => {

src/config/config.controller.ts

Lines changed: 15 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,12 @@ import {
1313
} from '@nestjs/common';
1414
import { LuigiConfigNodesService } from './luigi/luigi-config-nodes/luigi-config-nodes.service';
1515
import { Request, Response } from 'express';
16-
import { HeaderParserService } from '../services/header-parser.service';
16+
import { HeaderParserService } from '../services';
1717
import {
1818
ENTITY_CONTEXT_INJECTION_TOKEN,
1919
FEATURE_TOGGLES_INJECTION_TOKEN,
2020
PORTAL_CONTEXT_INJECTION_TOKEN,
21-
TENANT_PROVIDER_INJECTION_TOKEN,
2221
} from '../injection-tokens';
23-
import { TenantService } from '../auth/tenant.service';
2422
import { PortalContextProvider } from './context/portal-context-provider';
2523
import { EntityParams } from './model/entity';
2624
import { FeatureTogglesProvider } from './context/feature-toggles-provider';
@@ -40,8 +38,6 @@ export class ConfigController {
4038
private logger: Logger,
4139
private luigiConfigNodesService: LuigiConfigNodesService,
4240
private headerParser: HeaderParserService,
43-
@Inject(TENANT_PROVIDER_INJECTION_TOKEN)
44-
private tenantProvider: TenantService,
4541
@Inject(PORTAL_CONTEXT_INJECTION_TOKEN)
4642
private portalContextProvider: PortalContextProvider,
4743
@Inject(ENTITY_CONTEXT_INJECTION_TOKEN)
@@ -61,13 +57,12 @@ export class ConfigController {
6157
@Res({ passthrough: true }) response: Response,
6258
@Headers('Accept-language') acceptLanguage: string
6359
): Promise<PortalConfig> {
64-
const providersAndTenantPromise = this.getProvidersAndTenant(
65-
request,
66-
acceptLanguage
67-
).catch((e: Error) => {
68-
this.logger.error(e);
69-
return e;
70-
});
60+
const providersPromise = this.getProviders(request, acceptLanguage).catch(
61+
(e: Error) => {
62+
this.logger.error(e);
63+
return e;
64+
}
65+
);
7166
const featureTogglePromise = this.featureTogglesProvider
7267
.getFeatureToggles()
7368
.catch((e: Error) => {
@@ -76,7 +71,7 @@ export class ConfigController {
7671
});
7772

7873
const portalContextPromise = this.portalContextProvider
79-
.getContextValues(request, response, providersAndTenantPromise)
74+
.getContextValues(request, response, providersPromise)
8075
.catch((e: Error) => {
8176
this.logger.error(e);
8277
return e;
@@ -86,17 +81,14 @@ export class ConfigController {
8681
const featureToggles = ConfigController.getOrThrow(
8782
await featureTogglePromise
8883
);
89-
const frameContext = ConfigController.getOrThrow(
84+
const portalContext = ConfigController.getOrThrow(
9085
await portalContextPromise
9186
);
92-
const { tenantId, providers } = ConfigController.getOrThrow(
93-
await providersAndTenantPromise
94-
);
87+
const providers = ConfigController.getOrThrow(await providersPromise);
9588

9689
return {
9790
providers,
98-
tenantId,
99-
frameContext,
91+
portalContext,
10092
featureToggles,
10193
};
10294
} catch (e) {
@@ -108,20 +100,18 @@ export class ConfigController {
108100
}
109101
}
110102

111-
private async getProvidersAndTenant(
103+
private async getProviders(
112104
request: Request,
113105
acceptLanguage: string
114-
) {
106+
): Promise<ServiceProvider[]> {
115107
const token = this.headerParser.extractBearerToken(request);
116-
const tenantId = await this.tenantProvider.provideTenant(request);
117108

118109
const providers = await this.luigiConfigNodesService.getNodes(
119110
token,
120111
[],
121-
acceptLanguage,
122-
{ tenant: tenantId }
112+
acceptLanguage
123113
);
124-
return { tenantId, providers };
114+
return providers;
125115
}
126116

127117
@Get(':entity')
Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
11
import { Request, Response } from 'express';
22
import { ServiceProvider } from '../model/luigi.node';
33

4-
export interface ProvidersResult {
5-
providers: ServiceProvider[];
6-
}
7-
84
export interface PortalContextProvider {
95
getContextValues(
106
request: Request,
117
response: Response,
12-
providersPromise: Promise<ProvidersResult | Error>
8+
providersPromise: Promise<ServiceProvider[] | Error>
139
): Promise<Record<string, any>>;
1410
}

0 commit comments

Comments
 (0)