Skip to content

Commit 864dcb0

Browse files
feat: TT-229 [FT] Remove switch-group (#673)
* feat: TT-229 remove code -> FT 'switch group' * fix: TT-229 remove code from users-list.component & user ngrx store
1 parent e526b28 commit 864dcb0

19 files changed

+50
-683
lines changed

src/app/guards/admin-guard/admin.guard.spec.ts

Lines changed: 3 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -2,65 +2,32 @@ import { inject, TestBed } from '@angular/core/testing';
22
import { Router } from '@angular/router';
33
import { RouterTestingModule } from '@angular/router/testing';
44
import { of } from 'rxjs';
5-
import { skip, take } from 'rxjs/operators';
6-
import { FeatureSwitchGroupService } from 'src/app/modules/shared/feature-toggles/switch-group/feature-switch-group.service';
75
import { UserInfoService } from 'src/app/modules/user/services/user-info.service';
8-
import { AzureAdB2CService } from '../../modules/login/services/azure.ad.b2c.service';
96
import { AdminGuard } from './admin.guard';
107

118
describe('AdminGuard', () => {
129
let adminGuard: AdminGuard;
13-
let azureAdB2CService: AzureAdB2CService;
1410
let userInfoService: UserInfoService;
15-
let featureSwitchGroupService: FeatureSwitchGroupService;
16-
const azureAdB2CServiceStub = {
17-
isLogin() {
18-
return true;
19-
},
20-
isAdmin() {
21-
return true;
22-
},
23-
};
2411

2512
const userInfoServiceStub = {
2613
isAdmin: () => of(false),
2714
};
2815

29-
const featureSwitchGroupServiceStub = {
30-
isActivated: () => of(false),
31-
};
32-
3316
beforeEach(() => {
3417
TestBed.configureTestingModule({
3518
imports: [RouterTestingModule],
3619
providers: [
37-
{ provide: AzureAdB2CService, useValue: azureAdB2CServiceStub },
3820
{ provide: UserInfoService, useValue: userInfoServiceStub },
39-
{ provide: FeatureSwitchGroupService, useValue: featureSwitchGroupServiceStub },
4021
],
4122
});
4223
adminGuard = TestBed.inject(AdminGuard);
43-
azureAdB2CService = TestBed.inject(AzureAdB2CService);
4424
userInfoService = TestBed.inject(UserInfoService);
45-
featureSwitchGroupService = TestBed.inject(FeatureSwitchGroupService);
4625
});
4726

4827
it('should be created', () => {
4928
expect(adminGuard).toBeTruthy();
5029
});
5130

52-
const roleParams = [{ bool: false }, { bool: true }];
53-
roleParams.map((param) => {
54-
it(`isAdminBasedInRole return ${param.bool}`, () => {
55-
spyOn(azureAdB2CService, 'isAdmin').and.returnValue(param.bool);
56-
57-
adminGuard.isAdminBasedInRole().subscribe((enabled) => {
58-
expect(azureAdB2CService.isAdmin).toHaveBeenCalled();
59-
expect(enabled).toBe(param.bool);
60-
});
61-
});
62-
});
63-
6431
const groupParams = [{ bool: false }, { bool: true }];
6532
groupParams.map((param) => {
6633
it(`isAdminBasedInGroup return ${param.bool}`, () => {
@@ -73,49 +40,22 @@ describe('AdminGuard', () => {
7340
});
7441
});
7542

76-
const switchToggleParams = [
77-
{ switchGroup: false, chosen: 'isAdminBasedInRole', isAdmin: true },
78-
{ switchGroup: true, chosen: 'isAdminBasedInGroup', isAdmin: false },
79-
];
80-
switchToggleParams.map((param) => {
81-
it(`on switchGroup ${param.switchGroup}, ${param.chosen} should be chosen`, () => {
82-
const switchGroup$ = of(param.switchGroup);
83-
84-
spyOn(featureSwitchGroupService, 'isActivated').and.returnValue(switchGroup$);
85-
86-
const canActivate = adminGuard.canActivate();
87-
88-
featureSwitchGroupService.isActivated().pipe(take(1));
89-
90-
canActivate.subscribe((enabled) => {
91-
expect(featureSwitchGroupService.isActivated).toHaveBeenCalled();
92-
expect(enabled).toBe(param.isAdmin);
93-
});
94-
});
95-
});
96-
9743
const navigateParams = [
98-
{ switchGroup: false, chosen: 'activate the route', isAdmin: true },
99-
{ switchGroup: false, chosen: 'redirect to /login', isAdmin: false },
100-
{ switchGroup: true, chosen: 'activate the route', isAdmin: true },
101-
{ switchGroup: true, chosen: 'redirect to /login', isAdmin: false },
44+
{ chosen: 'activate the route', isAdmin: true },
45+
{ chosen: 'redirect to /login', isAdmin: false }
10246
];
10347
navigateParams.map((param) => {
104-
it(`on isAdmin: ${param.isAdmin} with toggleSwitch: ${param.switchGroup}, should ${param.chosen} `, inject(
48+
it(`on isAdmin: ${param.isAdmin}, should ${param.chosen} `, inject(
10549
[Router],
10650
(router: Router) => {
107-
const switchGroup$ = of(param.switchGroup);
10851
const isAdmin$ = of(param.isAdmin);
10952

110-
spyOn(featureSwitchGroupService, 'isActivated').and.returnValue(switchGroup$);
111-
spyOn(adminGuard, 'isAdminBasedInRole').and.returnValue(isAdmin$);
11253
spyOn(adminGuard, 'isAdminBasedInGroup').and.returnValue(isAdmin$);
11354
spyOn(router, 'navigate').and.stub();
11455

11556
const canActivate = adminGuard.canActivate();
11657

11758
canActivate.subscribe((enabled) => {
118-
expect(featureSwitchGroupService.isActivated).toHaveBeenCalled();
11959
if (!enabled) {
12060
expect(router.navigate).toHaveBeenCalledWith(['login']);
12161
} else {

src/app/guards/admin-guard/admin.guard.ts

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,27 @@
11
import { Injectable } from '@angular/core';
22
import { Router, CanActivate } from '@angular/router';
3-
import { Observable, of } from 'rxjs';
4-
import { map, mergeMap } from 'rxjs/operators';
5-
import { FeatureSwitchGroupService } from 'src/app/modules/shared/feature-toggles/switch-group/feature-switch-group.service';
3+
import { Observable } from 'rxjs';
4+
import { map } from 'rxjs/operators';
65
import { UserInfoService } from 'src/app/modules/user/services/user-info.service';
7-
import { AzureAdB2CService } from '../../modules/login/services/azure.ad.b2c.service';
86

97
@Injectable({
108
providedIn: 'root',
119
})
1210
export class AdminGuard implements CanActivate {
1311
constructor(
14-
private azureAdB2CService: AzureAdB2CService,
1512
private router: Router,
1613
private userInfoService: UserInfoService,
17-
private featureSwitchGroup: FeatureSwitchGroupService
18-
) {}
14+
) { }
1915

2016
canActivate(): Observable<boolean> {
21-
return this.featureSwitchGroup.isActivated().pipe(
22-
mergeMap((enabled: boolean) => {
23-
return enabled ? this.isAdminBasedInGroup() : this.isAdminBasedInRole();
24-
}),
25-
map((isAdmin: boolean): boolean => {
26-
if (!isAdmin) {
27-
this.router.navigate(['login']);
28-
}
17+
return this.isAdminBasedInGroup().pipe(
18+
map((isAdmin: boolean) => {
19+
if (!isAdmin) { this.router.navigate(['login']); }
2920
return isAdmin;
3021
})
3122
);
3223
}
3324

34-
isAdminBasedInRole(): Observable<boolean> {
35-
return of(this.azureAdB2CService.isAdmin());
36-
}
37-
3825
isAdminBasedInGroup(): Observable<boolean> {
3926
return this.userInfoService.isAdmin();
4027
}
Lines changed: 3 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,18 @@
11
import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
22
import { MockStore, provideMockStore } from '@ngrx/store/testing';
3-
import { of } from 'rxjs';
43
import { AzureAdB2CService } from '../login/services/azure.ad.b2c.service';
5-
import { FeatureSwitchGroupService } from '../shared/feature-toggles/switch-group/feature-switch-group.service';
64
import { LoadUser } from '../user/store/user.actions';
75
import { HomeComponent } from './home.component';
86

97
describe('HomeComponent', () => {
108
let component: HomeComponent;
119
let azureAdB2CService: AzureAdB2CService;
12-
let featureSwitchGroupService: FeatureSwitchGroupService;
1310
let store: MockStore;
1411
let fixture: ComponentFixture<HomeComponent>;
1512
const initialState = {};
1613
const azureB2CServiceStub = {
1714
getUserId: () => 'user_id',
1815
};
19-
const featureSwitchGroupServiceStub = {
20-
isActivated: () => of(false),
21-
};
2216

2317
beforeEach(
2418
waitForAsync(() => {
@@ -27,7 +21,6 @@ describe('HomeComponent', () => {
2721
providers: [
2822
provideMockStore({ initialState }),
2923
{ provide: AzureAdB2CService, useValue: azureB2CServiceStub },
30-
{ provide: FeatureSwitchGroupService, useValue: featureSwitchGroupServiceStub },
3124
],
3225
}).compileComponents();
3326
})
@@ -36,7 +29,6 @@ describe('HomeComponent', () => {
3629
beforeEach(() => {
3730
fixture = TestBed.createComponent(HomeComponent);
3831
azureAdB2CService = TestBed.inject(AzureAdB2CService);
39-
featureSwitchGroupService = TestBed.inject(FeatureSwitchGroupService);
4032
store = TestBed.inject(MockStore);
4133

4234
component = fixture.componentInstance;
@@ -48,32 +40,14 @@ describe('HomeComponent', () => {
4840
expect(component).toBeTruthy();
4941
});
5042

51-
it('onInit, if featureSwitchGroup is true LoadUser action is dispatched', () => {
43+
it('onInit, LoadUser action is dispatched', () => {
5244
const userId = 'user_id';
53-
spyOn(featureSwitchGroupService, 'isActivated').and.returnValue(of(true));
5445
spyOn(azureAdB2CService, 'getUserId').and.returnValue(userId);
5546
spyOn(store, 'dispatch');
5647

5748
component.ngOnInit();
5849

59-
featureSwitchGroupService.isActivated().subscribe(() => {
60-
expect(featureSwitchGroupService.isActivated).toHaveBeenCalled();
61-
expect(azureAdB2CService.getUserId).toHaveBeenCalled();
62-
expect(store.dispatch).toHaveBeenCalledWith(new LoadUser(userId));
63-
});
64-
});
65-
66-
it('onInit, if featureSwitchGroup is false nothing happens', () => {
67-
spyOn(featureSwitchGroupService, 'isActivated').and.returnValue(of(false));
68-
spyOn(azureAdB2CService, 'getUserId');
69-
spyOn(store, 'dispatch');
70-
71-
component.ngOnInit();
72-
73-
featureSwitchGroupService.isActivated().subscribe(() => {
74-
expect(featureSwitchGroupService.isActivated).toHaveBeenCalled();
75-
expect(azureAdB2CService.getUserId).not.toHaveBeenCalled();
76-
expect(store.dispatch).not.toHaveBeenCalled();
77-
});
50+
expect(azureAdB2CService.getUserId).toHaveBeenCalled();
51+
expect(store.dispatch).toHaveBeenCalledWith(new LoadUser(userId));
7852
});
7953
});
Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,22 @@
1-
import { Component, OnDestroy, OnInit } from '@angular/core';
1+
import { Component, OnInit } from '@angular/core';
22
import { Store } from '@ngrx/store';
3-
import { Subscription } from 'rxjs';
43
import { LoadUser } from 'src/app/modules/user/store/user.actions';
54
import { AzureAdB2CService } from '../login/services/azure.ad.b2c.service';
6-
import { FeatureSwitchGroupService } from '../shared/feature-toggles/switch-group/feature-switch-group.service';
75

86
@Component({
97
selector: 'app-home',
108
templateUrl: './home.component.html',
119
styleUrls: ['./home.component.scss'],
1210
})
13-
export class HomeComponent implements OnInit, OnDestroy {
14-
FTSwitchGroup$: Subscription;
11+
export class HomeComponent implements OnInit {
1512

1613
constructor(
17-
private featureSwitchGroup: FeatureSwitchGroupService,
1814
private azureAdB2CService: AzureAdB2CService,
1915
private store: Store
20-
) {}
16+
) { }
2117

2218
ngOnInit(): void {
23-
this.FTSwitchGroup$ = this.featureSwitchGroup.isActivated().subscribe((enabled) => {
24-
if (enabled) {
25-
const userId = this.azureAdB2CService.getUserId();
26-
this.store.dispatch(new LoadUser(userId));
27-
}
28-
});
29-
}
30-
31-
ngOnDestroy() {
32-
this.FTSwitchGroup$.unsubscribe();
19+
const userId = this.azureAdB2CService.getUserId();
20+
this.store.dispatch(new LoadUser(userId));
3321
}
3422
}

src/app/modules/login/services/azure.ad.b2c.service.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,13 @@ import { Injectable } from '@angular/core';
22
import { UserAgentApplication } from 'msal';
33
import { from, Observable } from 'rxjs';
44
import { CookieService } from 'ngx-cookie-service';
5-
65
import { AUTHORITY, CLIENT_ID, SCOPES } from '../../../../environments/environment';
7-
import { FeatureSwitchGroupService } from '../../shared/feature-toggles/switch-group/feature-switch-group.service';
86

97
@Injectable({
108
providedIn: 'root',
119
})
1210
export class AzureAdB2CService {
13-
constructor(private cookieService?: CookieService) {}
11+
constructor(private cookieService?: CookieService) { }
1412

1513
msalConfig: any = {
1614
auth: {
@@ -44,6 +42,7 @@ export class AzureAdB2CService {
4442
return this.msal.getAccount().name;
4543
}
4644

45+
// TODO: inused method
4746
isAdmin() {
4847
return this.msal.getAccount()?.idToken?.extension_role === 'time-tracker-admin';
4948
}

src/app/modules/shared/components/sidebar/sidebar.component.spec.ts

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,13 @@ import { Router, Routes } from '@angular/router';
66
import { TimeClockComponent } from '../../../time-clock/pages/time-clock.component';
77
import { of } from 'rxjs';
88
import { FeatureManagerService } from '../../feature-toggles/feature-toggle-manager.service';
9-
import { FeatureSwitchGroupService } from '../../feature-toggles/switch-group/feature-switch-group.service';
109
import { UserInfoService } from 'src/app/modules/user/services/user-info.service';
1110

1211
describe('SidebarComponent', () => {
1312
let component: SidebarComponent;
1413
let fixture: ComponentFixture<SidebarComponent>;
1514
let azureAdB2CServiceStubInjected;
1615
let featureManagerServiceStubInjected: FeatureManagerService;
17-
let featureSwitchGroupService: FeatureSwitchGroupService;
1816
let userInfoService: UserInfoService;
1917
let router;
2018
const routes: Routes = [{ path: 'time-clock', component: TimeClockComponent }];
@@ -32,17 +30,12 @@ describe('SidebarComponent', () => {
3230
isAdmin: () => of(true),
3331
};
3432

35-
const featureSwitchGroupServiceStub = {
36-
isActivated: () => of(true),
37-
};
38-
3933
beforeEach(
4034
waitForAsync(() => {
4135
TestBed.configureTestingModule({
4236
declarations: [SidebarComponent],
4337
providers: [
4438
{ provide: AzureAdB2CService, useValue: azureAdB2CServiceStub },
45-
{ provide: FeatureSwitchGroupService, useValue: featureSwitchGroupServiceStub },
4639
{ provide: UserInfoService, useValue: userInfoServiceStub },
4740
],
4841
imports: [RouterTestingModule.withRoutes(routes)],
@@ -55,7 +48,6 @@ describe('SidebarComponent', () => {
5548
fixture = TestBed.createComponent(SidebarComponent);
5649
azureAdB2CServiceStubInjected = TestBed.inject(AzureAdB2CService);
5750
featureManagerServiceStubInjected = TestBed.inject(FeatureManagerService);
58-
featureSwitchGroupService = TestBed.inject(FeatureSwitchGroupService);
5951
userInfoService = TestBed.inject(UserInfoService);
6052
component = fixture.componentInstance;
6153
fixture.detectChanges();
@@ -67,16 +59,13 @@ describe('SidebarComponent', () => {
6759
});
6860

6961
it('admin users have six menu items', () => {
70-
spyOn(featureSwitchGroupService, 'isActivated').and.returnValue(of(true));
71-
7262
component.getSidebarItems().subscribe(() => {
7363
const menuItems = component.itemsSidebar;
7464
expect(menuItems.length).toBe(6);
7565
});
7666
});
7767

7868
it('non admin users have two menu items', () => {
79-
spyOn(featureSwitchGroupService, 'isActivated').and.returnValue(of(true));
8069
spyOn(userInfoServiceStub, 'isAdmin').and.returnValue(of(false));
8170

8271
component.getSidebarItems().subscribe(() => {

0 commit comments

Comments
 (0)