ngx-feature-toggle-demo
Version:
Your module to handle with feature toggles in Angular applications easier.
152 lines (127 loc) • 3.97 kB
text/typescript
import { NgxFeatureToggleCanLoadGuard } from './ngx-feature-toggle-can-load-guard.router';
import { Route } from '@angular/router';
import { set } from 'feature-toggle-service';
describe('Component: NgxFeatureToggleCanLoadGuard', () => {
beforeEach(() => {
set({ isFirstFeatureEnabled: true, isSecondFeatureEnabled: false });
spyOn(console, 'error');
});
afterEach(() => {
set({ isFirstFeatureEnabled: false, isSecondFeatureEnabled: false });
});
it('should return `false` if feature toggle is not configured in application level', () => {
const instance = new NgxFeatureToggleCanLoadGuard();
expect(
instance.canLoad({
path: 'home',
data: {
featureToggle: ['thisFeatureToggleDoesNotExist'],
},
} as Route)
).toBeFalsy();
expect(
instance.canLoad({
path: 'home',
data: {
featureToggle: 'thisFeatureToggleDoesNotExist',
},
} as Route)
).toBeFalsy();
});
it('should return `false` if feature toggle is not added in route', () => {
const instance = new NgxFeatureToggleCanLoadGuard();
const result = instance.canLoad({
path: 'home',
} as Route);
expect(result).toBeFalsy();
expect(console.error).toHaveBeenCalledWith(
'`NgxFeatureToggleCanLoadGuard` need to receive `featureToggle` as data in your route configuration.'
);
});
it('should return `false` if feature toggle is not added in route', () => {
const instance = new NgxFeatureToggleCanLoadGuard();
const result = instance.canLoad({
data: {
featureToggle: {},
},
} as Route);
expect(result).toBeFalsy();
expect(console.error).toHaveBeenCalledWith(
'`NgxFeatureToggleCanLoadGuard` need to receive `featureToggle` as data as an array or string in your route configuration.'
);
});
it('should return `false` if feature toggle is disabled', () => {
const instance = new NgxFeatureToggleCanLoadGuard();
expect(
instance.canLoad({
data: {
featureToggle: ['isSecondFeatureEnabled'],
},
} as Route)
).toBeFalsy();
expect(
instance.canLoad({
data: {
featureToggle: 'isSecondFeatureEnabled',
},
} as Route)
).toBeFalsy();
});
it('should NOT console errors if code is running in production mode', () => {
const instance = new NgxFeatureToggleCanLoadGuard();
spyOn(instance, 'isDevMode').and.returnValue(false);
instance.canLoad({
data: {
featureToggle: {},
},
} as Route);
instance.canLoad({
data: {},
} as Route);
expect(console.error).not.toHaveBeenCalled();
});
it('should return `true` if feature toggle is enabled', () => {
const instance = new NgxFeatureToggleCanLoadGuard();
expect(
instance.canLoad({
data: {
featureToggle: ['isFirstFeatureEnabled'],
},
} as Route)
).toBeTruthy();
expect(
instance.canLoad({
data: {
featureToggle: 'isFirstFeatureEnabled',
},
} as Route)
).toBeTruthy();
});
it('should return `true` if feature toggle is disabled AND route configuration starts with `!`', () => {
const instance = new NgxFeatureToggleCanLoadGuard();
expect(
instance.canLoad({
data: {
featureToggle: ['!isSecondFeatureEnabled'],
},
} as Route)
).toBeTruthy();
expect(
instance.canLoad({
data: {
featureToggle: '!isSecondFeatureEnabled',
},
} as Route)
).toBeTruthy();
});
it('should return `true` if combination of feature toggles are thruthy', () => {
const instance = new NgxFeatureToggleCanLoadGuard();
expect(
instance.canLoad({
data: {
featureToggle: ['isFirstFeatureEnabled', '!isSecondFeatureEnabled'],
},
} as Route)
).toBeTruthy();
});
});