Skip to content

Commit 564fca9

Browse files
committed
feat: implement luigi routing config service
1 parent 768d4a8 commit 564fca9

File tree

4 files changed

+110
-35
lines changed

4 files changed

+110
-35
lines changed

src/lib/services/luigi-config/luigi-config.service.spec.ts

Lines changed: 19 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { LuigiConfigService } from './luigi-config.service';
33
import { EnvConfigService } from '../env-config.service';
44
import { AuthConfigService } from './auth-config.service';
55
import { ClientEnvironment } from '../../model/env';
6+
import { RoutingConfigService } from './routing-config.service';
67
import { StaticSettingsConfigService } from './static-settings-config.service';
78

89
describe('LuigiConfigService', () => {
@@ -11,6 +12,7 @@ describe('LuigiConfigService', () => {
1112
let authConfigServiceMock: jest.Mocked<AuthConfigService>;
1213
let staticSettingsConfigServiceMock: jest.Mocked<StaticSettingsConfigService>;
1314
let communicationConfigServiceMock: jest.Mocked<CommunicationConfigService>;
15+
let routingConfigServiceMock: jest.Mocked<RoutingConfigService>;
1416

1517
beforeEach(() => {
1618
envConfigServiceMock = {
@@ -29,9 +31,15 @@ describe('LuigiConfigService', () => {
2931
getCommunicationConfig: jest.fn(),
3032
} as any;
3133

34+
routingConfigServiceMock = {
35+
getInitialRoutingConfig: jest.fn(),
36+
getRoutingConfig: jest.fn(),
37+
} as any;
38+
3239
service = new LuigiConfigService(
3340
envConfigServiceMock,
3441
authConfigServiceMock,
42+
routingConfigServiceMock,
3543
staticSettingsConfigServiceMock,
3644
communicationConfigServiceMock
3745
);
@@ -60,6 +68,13 @@ describe('LuigiConfigService', () => {
6068
customMessagesListeners: { '43545': () => {} },
6169
};
6270

71+
const mockRoutingConfig = {
72+
useHashRouting: false,
73+
showModalPathInUrl: false,
74+
modalPathParam: 'modalPathParamDisabled',
75+
skipRoutingForUrlPatterns: [/.*/],
76+
};
77+
6378
envConfigServiceMock.getEnvConfig.mockResolvedValue(mockEnvConfig);
6479
authConfigServiceMock.getAuthConfig.mockReturnValue(mockAuthConfig);
6580
staticSettingsConfigServiceMock.getInitialStaticSettingsConfig.mockReturnValue(
@@ -68,6 +83,9 @@ describe('LuigiConfigService', () => {
6883
communicationConfigServiceMock.getCommunicationConfig.mockReturnValue(
6984
mockCommunicationConfig
7085
);
86+
routingConfigServiceMock.getInitialRoutingConfig.mockReturnValue(
87+
mockRoutingConfig
88+
);
7189

7290
const config = await service.getLuigiConfiguration();
7391

@@ -82,33 +100,10 @@ describe('LuigiConfigService', () => {
82100

83101
expect(config).toEqual({
84102
auth: mockAuthConfig,
85-
routing: expect.any(Object),
103+
routing: mockRoutingConfig,
86104
settings: mockStaticSettings,
87105
communication: mockCommunicationConfig,
88106
});
89-
90-
// Check routing config
91-
expect(config.routing).toEqual({
92-
useHashRouting: false,
93-
showModalPathInUrl: false,
94-
modalPathParam: 'modalPathParamDisabled',
95-
skipRoutingForUrlPatterns: [/.*/],
96-
pageNotFoundHandler: expect.any(Function),
97-
});
98-
});
99-
});
100-
101-
describe('getInitialRoutingConfig', () => {
102-
it('should return the correct routing configuration', () => {
103-
const routingConfig = (service as any).getInitialRoutingConfig();
104-
105-
expect(routingConfig).toEqual({
106-
useHashRouting: false,
107-
showModalPathInUrl: false,
108-
modalPathParam: 'modalPathParamDisabled',
109-
skipRoutingForUrlPatterns: [/.*/],
110-
pageNotFoundHandler: expect.any(Function),
111-
});
112107
});
113108
});
114109
});

src/lib/services/luigi-config/luigi-config.service.ts

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { ClientEnvironment } from '../../model/env';
77
import { AuthConfigService } from './auth-config.service';
88
import { EnvConfigService } from '../env-config.service';
99
import { CommunicationConfigService } from './communication-config.service';
10+
import { RoutingConfigService } from './routing-config.service';
1011
import { StaticSettingsConfigService } from './static-settings-config.service';
1112

1213
@Injectable({
@@ -16,6 +17,7 @@ export class LuigiConfigService {
1617
constructor(
1718
private envConfigService: EnvConfigService,
1819
private authConfigService: AuthConfigService,
20+
private routingConfigService: RoutingConfigService,
1921
@Inject(LUIGI_STATIC_SETTINGS_CONFIG_SERVICE_INJECTION_TOKEN)
2022
private staticSettingsConfigService: StaticSettingsConfigService,
2123
@Inject(LUIGI_COMMUNICATION_CONFIG_SERVICE_INJECTION_TOKEN)
@@ -30,20 +32,10 @@ export class LuigiConfigService {
3032
envConfig.oauthServerUrl,
3133
envConfig.clientId
3234
),
33-
routing: this.getInitialRoutingConfig(),
35+
routing: this.routingConfigService.getInitialRoutingConfig(),
3436
communication: this.communicationConfigService.getCommunicationConfig(),
3537
settings:
3638
this.staticSettingsConfigService.getInitialStaticSettingsConfig(),
3739
};
3840
}
39-
40-
private getInitialRoutingConfig() {
41-
return {
42-
useHashRouting: false,
43-
showModalPathInUrl: false,
44-
modalPathParam: 'modalPathParamDisabled',
45-
skipRoutingForUrlPatterns: [/.*/],
46-
pageNotFoundHandler: () => {},
47-
};
48-
}
4941
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import { RoutingConfigService } from './routing-config.service';
2+
3+
describe('RoutingConfigService', () => {
4+
let service: RoutingConfigService;
5+
6+
beforeEach(() => {
7+
service = new RoutingConfigService();
8+
});
9+
10+
it('should be created', () => {
11+
expect(service).toBeTruthy();
12+
});
13+
14+
describe('getInitialRoutingConfig', () => {
15+
it('should return the correct initial configuration', () => {
16+
const config = service.getInitialRoutingConfig();
17+
18+
expect(config).toEqual({
19+
useHashRouting: false,
20+
showModalPathInUrl: false,
21+
modalPathParam: 'modalPathParamDisabled',
22+
skipRoutingForUrlPatterns: expect.arrayContaining([expect.any(RegExp)]),
23+
pageNotFoundHandler: expect.any(Function),
24+
});
25+
});
26+
27+
it('should have a skipRoutingForUrlPatterns that matches any string', () => {
28+
const config = service.getInitialRoutingConfig();
29+
expect(
30+
config.skipRoutingForUrlPatterns[0].test('any string')
31+
).toBeTruthy();
32+
});
33+
});
34+
35+
describe('getRoutingConfig', () => {
36+
it('should return the correct routing configuration', () => {
37+
const config = service.getRoutingConfig();
38+
39+
expect(config).toEqual({
40+
useHashRouting: false,
41+
showModalPathInUrl: true,
42+
modalPathParam: 'modal',
43+
pageNotFoundHandler: expect.any(Function),
44+
});
45+
});
46+
47+
it('pageNotFoundHandler should return the correct object', () => {
48+
const config = service.getRoutingConfig();
49+
const result = config.pageNotFoundHandler('some/path', true);
50+
51+
expect(result).toEqual({
52+
redirectTo: 'error/404',
53+
keepURL: true,
54+
});
55+
});
56+
});
57+
});
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import { Injectable } from '@angular/core';
2+
3+
@Injectable({ providedIn: 'root' })
4+
export class RoutingConfigService {
5+
getInitialRoutingConfig(): any {
6+
return {
7+
useHashRouting: false,
8+
showModalPathInUrl: false,
9+
modalPathParam: 'modalPathParamDisabled',
10+
skipRoutingForUrlPatterns: [/.*/],
11+
pageNotFoundHandler: () => {},
12+
};
13+
}
14+
15+
getRoutingConfig(): any {
16+
return {
17+
useHashRouting: false,
18+
showModalPathInUrl: true,
19+
modalPathParam: 'modal',
20+
pageNotFoundHandler: (
21+
notFoundPath: string,
22+
isAnyPathMatched: boolean
23+
) => {
24+
return {
25+
redirectTo: 'error/404',
26+
keepURL: true,
27+
};
28+
},
29+
};
30+
}
31+
}

0 commit comments

Comments
 (0)