Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
15 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
perf: TT-317 remove unnecessary features from FeatureManagerService
  • Loading branch information
bytesantiago committed Aug 30, 2021
commit 5cac9d64a87cf52f2b3b4d0ba1f51e35494403c2
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import { ItemSidebar } from './models/item-sidebar.model';
import { NavigationStart, Router } from '@angular/router';
import { Observable, Subscription } from 'rxjs';
import { filter, map } from 'rxjs/operators';
import { FeatureManagerService } from '../../feature-toggles/feature-toggle-manager.service';
import { UserInfoService } from 'src/app/modules/user/services/user-info.service';

@Component({
Expand All @@ -19,7 +18,6 @@ export class SidebarComponent implements OnInit, OnDestroy {
constructor(
private router: Router,
private userInfoService: UserInfoService,
private featureManagerService: FeatureManagerService,
) {
this.navStart = this.router.events.pipe(
filter((evt) => evt instanceof NavigationStart)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,18 +23,6 @@ describe('FeatureToggleGeneralService', () => {
expect(featureToggleGeneralService).toBeTruthy();
});

const params = [{ bool: false }, { bool: true }];
params.map((param) => {
it(`isActivated should return a boolean ${param.bool}`, () => {
const toggleName = FeatureToggle.SWITCH_GROUP;
featureManagerService.isToggleEnabledForUser = () => of(param.bool);

featureToggleGeneralService.isActivated(toggleName).subscribe((enabled) => {
expect(enabled).toBe(param.bool);
});
});
});

it('getActivated return a FeatureToggleModel', () => {
const anyNotMatchingFilter = new TargetingFeatureFilterModel(
{ Audience: { Groups: ['a-group'], Users: ['user-a'] } },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,6 @@ import { FeatureToggleModel } from '../feature-toggle.model';
export class FeatureToggleGeneralService {
constructor(private featureManagerService: FeatureManagerService) {}

isActivated(featureToggle: FeatureToggle): Observable<boolean> {
return this.featureManagerService.isToggleEnabledForUser(featureToggle);
}

getActivated(): Observable<FeatureToggleModel[]>{
return this.featureManagerService.getAllFeatureToggleEnableForUser();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,18 +26,6 @@ describe('FeatureToggleManager', () => {
spyOn(fakeFeatureToggleProvider, 'getFeatureToggle').and.returnValue(of(aFeatureToggle));
service = new FeatureManagerService(fakeFeatureToggleProvider);
});
it('manager uses feature provider to build feature toggle model', async () => {
service.isToggleEnabled(featureToggleKey, featureToggleLabel).subscribe((value) => {

expect(fakeFeatureToggleProvider).toHaveBeenCalledWith(featureToggleKey, featureToggleLabel);
});
});

it('manager extracts enabled attribute from feature toggle model', async () => {
service.isToggleEnabled(featureToggleKey, featureToggleLabel).subscribe((value) => {
expect(value).toEqual(aFeatureToggle.enabled);
});
});
});


Expand All @@ -62,19 +50,6 @@ describe('FeatureToggleManager', () => {
);
getFeatureToggleSpy = spyOn(fakeFeatureToggleProvider, 'getFeatureToggle').and.returnValue(of(aToggleWithFilters));
service = new FeatureManagerService(fakeFeatureToggleProvider);
spyOn(service, 'isToggleEnabled').and.returnValue(of(true));
});

it('manager uses feature provider to build feature toggle model', async () => {
service.isToggleEnabledForUser(featureToggleKey, featureToggleLabel).subscribe((value) => {
expect(getFeatureToggleSpy).toHaveBeenCalledWith(featureToggleKey, featureToggleLabel);
});
});

it('given a feature toggle with filters which match the verification, then the response is true', async () => {
service.isToggleEnabledForUser(featureToggleKey, featureToggleLabel).subscribe((value) => {
expect(value).toEqual(true);
});
});

it('given a feature toggle with filters which do not match the verification, then the response is false', async () => {
Expand All @@ -87,9 +62,6 @@ describe('FeatureToggleManager', () => {
spyOn(fakeFeatureToggleProvider, 'getFeatureToggle').and.returnValue(of(aToggleWithFilters));
service = new FeatureManagerService(fakeFeatureToggleProvider);

service.isToggleEnabledForUser(featureToggleKey, featureToggleLabel).subscribe((value) => {
expect(value).toEqual(false);
});
});

it('Get empty when getAllFeatureToggle() return empty', () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,31 +11,6 @@ export class FeatureManagerService {

constructor(private featureToggleProvider: FeatureToggleProvider) { }

public isToggleEnabled(toggleName: string, toggleLabel?: string): Observable<boolean> {
return this.featureToggleProvider
.getFeatureToggle(toggleName, toggleLabel)
.pipe(map((featureToggle) => featureToggle.enabled));
}

public isToggleEnabledForUser(toggleName: string, toggleLabel?: string): Observable<boolean> {
const matchesFilters$: Observable<boolean> = this.featureToggleProvider
.getFeatureToggle(toggleName, toggleLabel)
.pipe(
map(featureToggle => featureToggle.filters),
map(filters => filters.map(filter => filter.evaluate())),
map(filterEvaluations => filterEvaluations.includes(true))
);

const result$: Observable<boolean> = zip(
this.isToggleEnabled(toggleName, toggleLabel),
matchesFilters$
).pipe(
map(([enabled, enabledForUser]) => enabled && enabledForUser)
);

return result$;
}

public getAllFeatureToggleEnableForUser(): Observable<FeatureToggleModel[]> {
return from(this.featureToggleProvider.getAllFeatureToggle()).pipe(
map((allFeatureToggle) =>
Expand Down