Skip to content

Commit 9800cb1

Browse files
committed
feat: TT-190
1 parent de0aaf8 commit 9800cb1

File tree

11 files changed

+29
-741
lines changed

11 files changed

+29
-741
lines changed

src/app/modules/users/components/users-list/users-list.component.html

Lines changed: 5 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<tr class="d-flex flex-wrap">
1111
<th class="col-4">User Email</th>
1212
<th class="col-5">Names</th>
13-
<th class="col-3">{{ isUserGroupsToggleOn ? "Groups" : "Roles" }}</th>
13+
<th class="col-3">{{ isUserGroupsToggleOn ? 'Groups' : 'Roles' }}</th>
1414
</tr>
1515
</thead>
1616
<app-loading-bar *ngIf="isLoading$ | async"></app-loading-bar>
@@ -19,71 +19,31 @@
1919
<td class="col-4 text-break">{{ user.email }}</td>
2020
<td class="col-5 text-break">{{ user.name }}</td>
2121
<td class="col-3 text-center">
22-
<<<<<<< HEAD
23-
<<<<<<< HEAD
2422
<div *ngIf="isUserGroupsToggleOn">
2523
<ui-switch
2624
size="small"
27-
<<<<<<< HEAD
2825
(change)="switchGroup(user.id, user.groups, 'time-tracker-admin')"
2926
[checked]="user.groups.includes('time-tracker-admin')"
3027
></ui-switch>
31-
group admin
32-
<ui-switch
33-
size="small"
34-
(change)="switchGroup(user.id, user.groups, 'time-tracker-tester')"
35-
[checked]="user.groups.includes('time-tracker-tester')"
36-
></ui-switch>
37-
group test
38-
</div>
39-
40-
<div *ngIf="!isUserGroupsToggleOn">
41-
<ui-switch
42-
size="small"
43-
(change)="switchRole(user.id, user.roles, 'admin','time-tracker-admin')"
44-
[checked]="user.roles.includes('time-tracker-admin')"
45-
=======
46-
(change)="switchGroups(user.id, user.groups, 'admin', 'time-tracker-admin')"
47-
=======
48-
<div *ngIf="flakyToggle; else elseBlock">
49-
=======
50-
<div *ngIf="isUserGroupsToggleOn">
51-
>>>>>>> feat: TT-190create feature toggle in azure
52-
<ui-switch
53-
size="small"
54-
(change)="switchGroup(user.id, user.groups, 'time-tracker-admin')"
55-
>>>>>>> feat: TT-190 Use add/remove groups endpoints in users section in UI
56-
[checked]="user.groups.includes('time-tracker-admin')"
57-
>>>>>>> fix: TT-190 use add remove groups
58-
></ui-switch>
59-
group admin
28+
admin
6029
<ui-switch
6130
size="small"
62-
<<<<<<< HEAD
63-
<<<<<<< HEAD
64-
(change)="switchRole(user.id, user.roles,'tester','time-tracker-tester')"
65-
[checked]="user.roles.includes('time-tracker-tester')"
66-
=======
67-
(change)="switchGroups(user.id, user.groups, 'test', 'time-tracker-tester')"
68-
=======
6931
(change)="switchGroup(user.id, user.groups, 'time-tracker-tester')"
70-
>>>>>>> feat: TT-190 Use add/remove groups endpoints in users section in UI
7132
[checked]="user.groups.includes('time-tracker-tester')"
72-
>>>>>>> fix: TT-190 use add remove groups
7333
></ui-switch>
74-
group test
34+
test
7535
</div>
7636

7737
<div *ngIf="!isUserGroupsToggleOn">
7838
<ui-switch
7939
size="small"
80-
(change)="switchRole(user.id, user.roles, 'admin','time-tracker-admin')"
40+
(change)="switchRole(user.id, user.roles, 'admin', 'time-tracker-admin')"
8141
[checked]="user.roles.includes('time-tracker-admin')"
8242
></ui-switch>
8343
admin
8444
<ui-switch
8545
size="small"
86-
(change)="switchRole(user.id, user.roles,'tester','time-tracker-tester')"
46+
(change)="switchRole(user.id, user.roles, 'test', 'time-tracker-tester')"
8747
[checked]="user.roles.includes('time-tracker-tester')"
8848
></ui-switch>
8949
test

src/app/modules/users/components/users-list/users-list.component.spec.ts

Lines changed: 21 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,5 @@
1-
import { HttpClient } from '@angular/common/http';
21
import { FeatureManagerService } from 'src/app/modules/shared/feature-toggles/feature-toggle-manager.service';
3-
<<<<<<< HEAD
4-
import { waitForAsync, ComponentFixture, TestBed, inject } from '@angular/core/testing';
5-
=======
62
import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
7-
>>>>>>> feat: TT-190 mock test
83
import { MockStore, provideMockStore } from '@ngrx/store/testing';
94
import { NgxPaginationModule } from 'ngx-pagination';
105
import { UsersListComponent } from './users-list.component';
@@ -19,28 +14,20 @@ import {
1914
} from '../../store';
2015
import { ActionsSubject } from '@ngrx/store';
2116
import { DataTablesModule } from 'angular-datatables';
22-
import { of } from 'rxjs';
23-
<<<<<<< HEAD
17+
import { Observable, of } from 'rxjs';
2418
import { FeatureToggleProvider } from 'src/app/modules/shared/feature-toggles/feature-toggle-provider.service';
2519
import { AppConfigurationClient } from '@azure/app-configuration';
2620
import { FeatureFilterProvider } from '../../../shared/feature-toggles/filters/feature-filter-provider.service';
2721
import { AzureAdB2CService } from '../../../login/services/azure.ad.b2c.service';
28-
import { FeatureToggleModel } from 'src/app/modules/shared/feature-toggles/feature-toggle.model';
29-
=======
30-
>>>>>>> feat: TT-190 mock test
3122

3223
describe('UsersListComponent', () => {
3324
let component: UsersListComponent;
3425
let fixture: ComponentFixture<UsersListComponent>;
3526
let store: MockStore<UserState>;
3627
const actionSub: ActionsSubject = new ActionsSubject();
37-
<<<<<<< HEAD
3828
const fakeAppConfigurationConnectionString = 'Endpoint=http://fake.foo;Id=fake.id;Secret=fake.secret';
3929
let service: FeatureManagerService;
4030
let fakeFeatureToggleProvider;
41-
=======
42-
let featureManagerService: FeatureManagerService;
43-
>>>>>>> feat: TT-190 mock test
4431

4532
const state: UserState = {
4633
data: [
@@ -60,22 +47,21 @@ describe('UsersListComponent', () => {
6047

6148
beforeEach(
6249
waitForAsync(() => {
63-
6450
fakeFeatureToggleProvider = new FeatureToggleProvider(
6551
new AppConfigurationClient(fakeAppConfigurationConnectionString),
6652
new FeatureFilterProvider(new AzureAdB2CService())
6753
);
68-
//spyOn(fakeFeatureToggleProvider, 'getFeatureToggle').and.returnValue(of(aFeatureToggle));
6954
service = new FeatureManagerService(fakeFeatureToggleProvider);
7055

7156
TestBed.configureTestingModule({
7257
imports: [NgxPaginationModule, DataTablesModule],
7358
declarations: [UsersListComponent],
74-
providers: [provideMockStore({ initialState: state }),
59+
providers: [
60+
provideMockStore({ initialState: state }),
7561
{ provide: ActionsSubject, useValue: actionSub },
76-
{ provide: FeatureManagerService, useValue: service}],
62+
{ provide: FeatureManagerService, useValue: service }
63+
],
7764
}).compileComponents();
78-
featureManagerService = TestBed.inject(FeatureManagerService);
7965
})
8066
);
8167

@@ -218,7 +204,7 @@ describe('UsersListComponent', () => {
218204
];
219205

220206
removeGroupTypes.map((param) => {
221-
it(`When user switchGroup to ${param.groupName} and belongs to group, should remove ${param.groupName} group to user`, () => {
207+
it(`When user switchGroup to ${param.groupName} and belongs to group, should remove ${param.groupName} group from user`, () => {
222208
const groupName = param.groupName;
223209
const userGroups = param.userGroups;
224210
const userId = 'userId';
@@ -245,7 +231,7 @@ describe('UsersListComponent', () => {
245231
});
246232
});
247233

248-
fit('on success load users, the data of groups should be an array', () => {
234+
it('on success load users, the data of groups should be an array', () => {
249235
const actionSubject = TestBed.inject(ActionsSubject) as ActionsSubject;
250236
const action = {
251237
type: UserActionTypes.LOAD_USERS_SUCCESS,
@@ -259,7 +245,7 @@ describe('UsersListComponent', () => {
259245
});
260246
});
261247

262-
fit('on success load users, the datatable should be reloaded', async () => {
248+
it('on success load users, the datatable should be reloaded', async () => {
263249
const actionSubject = TestBed.inject(ActionsSubject);
264250
const action = {
265251
type: UserActionTypes.LOAD_USERS_SUCCESS,
@@ -272,32 +258,30 @@ describe('UsersListComponent', () => {
272258
expect(component.dtElement.dtInstance.then).toHaveBeenCalled();
273259
});
274260

275-
<<<<<<< HEAD
276-
fit('When Component is created, should call the feature toggle method', () => {
261+
it('When Component is created, should call the feature toggle method', () => {
277262
spyOn(component, 'isFeatureToggleActivated').and.returnValue(of(true));
278-
=======
279-
280-
fit('When Component is created, should call the feature toggle method', () => {
281-
282-
// spyOn(service, 'getAll').and.callFake( () => {
283-
// return of(mockUser);
284-
// });
285-
286-
spyOn(component, 'isFeatureToggleActivated').and.callFake(() => {
287-
return of(true);
288-
});
289-
>>>>>>> feat: TT-190 mock test
290263

291264
component.ngOnInit();
292265

293266
expect(component.isFeatureToggleActivated).toHaveBeenCalled();
294267
expect(component.isUserGroupsToggleOn).toBe(true);
295268
});
296269

270+
const toggleValues = [true, false];
271+
toggleValues.map((toggleValue) => {
272+
it(`when FeatureToggle is ${toggleValue} should return ${toggleValue}`, () => {
273+
spyOn(service, 'isToggleEnabledForUser').and.returnValue(of(toggleValue));
274+
275+
const isFeatureToggleActivated: Observable<boolean> = component.isFeatureToggleActivated();
276+
277+
expect(service.isToggleEnabledForUser).toHaveBeenCalled();
278+
isFeatureToggleActivated.subscribe((value) => expect(value).toEqual(toggleValue));
279+
});
280+
});
281+
297282
afterEach(() => {
298283
component.dtTrigger.unsubscribe();
299284
component.loadUsersSubscription.unsubscribe();
300285
fixture.destroy();
301286
});
302-
303287
});
Lines changed: 3 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
import { AfterViewInit, Component, OnDestroy, OnInit, ViewChild } from '@angular/core';
22
import { ActionsSubject, select, Store } from '@ngrx/store';
33
import { DataTableDirective } from 'angular-datatables';
4-
<<<<<<< HEAD
5-
<<<<<<< HEAD
64
import { Observable, Subject, Subscription } from 'rxjs';
75
import { delay, filter, map } from 'rxjs/operators';
86
import { FeatureManagerService } from 'src/app/modules/shared/feature-toggles/feature-toggle-manager.service';
@@ -15,27 +13,6 @@ import {
1513
AddUserToGroup,
1614
RemoveUserFromGroup,
1715
} from '../../store/user.actions';
18-
=======
19-
import { Observable, Subject, Subscription} from 'rxjs';
20-
import { delay, filter, map } from 'rxjs/operators';
21-
import { FeatureManagerService } from 'src/app/modules/shared/feature-toggles/feature-toggle-manager.service';
22-
import { User } from '../../models/users';
23-
import { GrantRoleUser, LoadUsers, RevokeRoleUser, UserActionTypes, AddUserToGroup, RemoveUserToGroup} from '../../store/user.actions';
24-
>>>>>>> fix: TT-190 use add remove groups
25-
=======
26-
import { Observable, Subject, Subscription } from 'rxjs';
27-
import { delay, filter, map } from 'rxjs/operators';
28-
import { FeatureManagerService } from 'src/app/modules/shared/feature-toggles/feature-toggle-manager.service';
29-
import { User } from '../../models/users';
30-
import {
31-
GrantRoleUser,
32-
LoadUsers,
33-
RevokeRoleUser,
34-
UserActionTypes,
35-
AddUserToGroup,
36-
RemoveUserToGroup,
37-
} from '../../store/user.actions';
38-
>>>>>>> feat: TT-190 Use add/remove groups endpoints in users section in UI
3916
import { getIsLoading } from '../../store/user.selectors';
4017

4118
@Component({
@@ -54,25 +31,12 @@ export class UsersListComponent implements OnInit, OnDestroy, AfterViewInit {
5431
dtOptions: any = {};
5532
switchGroupsSubscription: Subscription;
5633
isEnableToggleSubscription: Subscription;
57-
<<<<<<< HEAD
58-
<<<<<<< HEAD
59-
isUserGroupsToggleOn: boolean;
60-
=======
61-
isUserGroupsToggleOn;
62-
<<<<<<< HEAD
63-
flakyToggle: boolean = false; // borrar para implementar feature toggle
64-
>>>>>>> feat: TT-190 Use add/remove groups endpoints in users section in UI
65-
=======
66-
flakyToggle = true; // borrar para implementar feature toggle
67-
>>>>>>> feat: TT-190 Use add/remove groups endpoints in users section in UI
68-
=======
6934
isUserGroupsToggleOn: boolean;
70-
>>>>>>> feat: TT-190create feature toggle in azure
7135

7236
constructor(
7337
private store: Store<User>,
7438
private actionsSubject$: ActionsSubject,
75-
// private featureManagerService: FeatureManagerService
39+
private featureManagerService: FeatureManagerService
7640
) {
7741
this.isLoading$ = store.pipe(delay(0), select(getIsLoading));
7842
}
@@ -86,16 +50,9 @@ export class UsersListComponent implements OnInit, OnDestroy, AfterViewInit {
8650
this.rerenderDataTable();
8751
});
8852

89-
<<<<<<< HEAD
9053
this.isEnableToggleSubscription = this.isFeatureToggleActivated().subscribe((flag) => {
9154
this.isUserGroupsToggleOn = flag;
9255
});
93-
=======
94-
/* this.isEnableToggleSubscription = this.isFeatureToggleActivated().subscribe((flag) => {
95-
this.isUserGroupsToggleOn = flag;
96-
console.log('in subscription', this.isUserGroupsToggleOn);
97-
});*/
98-
>>>>>>> feat: TT-190 Use add/remove groups endpoints in users section in UI
9956

10057
this.switchGroupsSubscription = this.actionsSubject$
10158
.pipe(
@@ -146,8 +103,8 @@ export class UsersListComponent implements OnInit, OnDestroy, AfterViewInit {
146103

147104
switchRole(userId: string, userRoles: string[], roleId: string, roleValue: string) {
148105
userRoles.includes(roleValue)
149-
? this.store.dispatch(new RevokeRoleUser(userId, roleId))
150-
: this.store.dispatch(new GrantRoleUser(userId, roleId));
106+
? this.store.dispatch(new RevokeRoleUser(userId, roleId))
107+
: this.store.dispatch(new GrantRoleUser(userId, roleId));
151108
}
152109

153110
switchGroup(userId: string, userGroups: string[], groupName: string) {
@@ -156,32 +113,11 @@ export class UsersListComponent implements OnInit, OnDestroy, AfterViewInit {
156113
: this.store.dispatch(new AddUserToGroup(userId, groupName));
157114
}
158115

159-
<<<<<<< HEAD
160116
isFeatureToggleActivated() {
161117
return this.featureManagerService.isToggleEnabledForUser('switch-group').pipe(
162-
=======
163-
switchGroup(userId: string, userGroups: string[], groupName: string) {
164-
userGroups.includes(groupName)
165-
? this.store.dispatch(new RemoveUserToGroup(userId, groupName))
166-
: this.store.dispatch(new AddUserToGroup(userId, groupName));
167-
}
168-
169-
/* isFeatureToggleActivated() {
170-
return this.featureManagerService.isToggleEnabledForUser('ui-list-technologies').pipe(
171-
>>>>>>> feat: TT-190 Use add/remove groups endpoints in users section in UI
172118
map((enabled) => {
173119
return enabled === true ? true : false;
174120
})
175121
);
176-
<<<<<<< HEAD
177-
}
178-
179-
switchGroups(userId: string, userGroups: string[], groupname: string, groupValue: string) {
180-
userGroups.includes(groupValue)
181-
? this.store.dispatch(new RemoveUserFromGroup(userId, groupname))
182-
: this.store.dispatch(new AddUserToGroup(userId, groupname));
183122
}
184-
=======
185-
}*/
186-
>>>>>>> feat: TT-190 Use add/remove groups endpoints in users section in UI
187123
}

0 commit comments

Comments
 (0)