TGD-30: FeatureFlags add tests
This commit is contained in:
parent
0d26101948
commit
0a4176aa93
6 changed files with 45 additions and 7 deletions
3
src/Consts/FeatureFlags.consts.ts
Normal file
3
src/Consts/FeatureFlags.consts.ts
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
export class FeatureFlagsConsts {
|
||||||
|
static EnableEndgamePoints = 'EnableEndgamePoints';
|
||||||
|
}
|
||||||
|
|
@ -1,18 +1,49 @@
|
||||||
import { Test, TestingModule } from '@nestjs/testing';
|
import { Test, TestingModule } from '@nestjs/testing';
|
||||||
import { FeatureflagController } from './featureflag.controller';
|
import { FeatureflagController } from './featureflag.controller';
|
||||||
|
import {FeatureflagService} from "./featureflag.service";
|
||||||
|
import {FeatureflagServiceMock} from "../mocks/featureflag-service.mock";
|
||||||
|
|
||||||
describe('FeatureflagController', () => {
|
describe('FeatureflagController', () => {
|
||||||
let controller: FeatureflagController;
|
let controller: FeatureflagController;
|
||||||
|
let featureflagService: FeatureflagService;
|
||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
|
jest.resetAllMocks();
|
||||||
const module: TestingModule = await Test.createTestingModule({
|
const module: TestingModule = await Test.createTestingModule({
|
||||||
controllers: [FeatureflagController],
|
controllers: [FeatureflagController],
|
||||||
|
providers: [
|
||||||
|
{ provide: FeatureflagService, useValue: FeatureflagServiceMock },
|
||||||
|
]
|
||||||
}).compile();
|
}).compile();
|
||||||
|
|
||||||
controller = module.get<FeatureflagController>(FeatureflagController);
|
controller = module.get<FeatureflagController>(FeatureflagController);
|
||||||
|
featureflagService = module.get<FeatureflagService>(FeatureflagService);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should be defined', () => {
|
it('should be defined', () => {
|
||||||
expect(controller).toBeDefined();
|
expect(controller).toBeDefined();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should call feature flag service to get state', async() => {
|
||||||
|
const ffNameToTest = "TestFeature";
|
||||||
|
const getFFMock = jest.spyOn(featureflagService, 'getFeatureFlag')
|
||||||
|
.mockImplementation(
|
||||||
|
(name) => Promise.resolve({ name: name, state: true})
|
||||||
|
);
|
||||||
|
|
||||||
|
await controller.getFeatureFlag({ ffname: ffNameToTest });
|
||||||
|
|
||||||
|
expect(getFFMock).toHaveBeenCalled();
|
||||||
|
expect(getFFMock).toHaveBeenCalledWith(ffNameToTest);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should call feature flag service to set state', async () => {
|
||||||
|
const ffNameToTest = "TestFeature";
|
||||||
|
const setFFMock = jest.spyOn(featureflagService, 'setFeatureFlag')
|
||||||
|
.mockImplementation((id, status) => Promise.resolve({ name: id, state: false}));
|
||||||
|
|
||||||
|
await controller.setFeatureFlag({ name: ffNameToTest, state: true });
|
||||||
|
|
||||||
|
expect(setFFMock).toHaveBeenCalled();
|
||||||
|
expect(setFFMock).toHaveBeenCalledWith(ffNameToTest, true);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -11,8 +11,8 @@ export class FeatureflagController {
|
||||||
return await this.featureflagService.getFeatureFlag(params.ffname);
|
return await this.featureflagService.getFeatureFlag(params.ffname);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Post(':ffname')
|
@Post()
|
||||||
async setFeatureFlag(@Param() params: { ffname: string}, @Body() ffState: { name: string, state: boolean }) {
|
async setFeatureFlag(@Body() ffState: { name: string, state: boolean }) {
|
||||||
return await this.featureflagService.setFeatureFlag(params.ffname, ffState.state );
|
return await this.featureflagService.setFeatureFlag(ffState.name, ffState.state );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,8 +24,6 @@ export class FeatureflagService {
|
||||||
async setFeatureFlag(id: string, status: boolean) : Promise<IFeatureFlagStatus> {
|
async setFeatureFlag(id: string, status: boolean) : Promise<IFeatureFlagStatus> {
|
||||||
this.logger.verbose(`Setting feature flag status for ${id} to ${status} `);
|
this.logger.verbose(`Setting feature flag status for ${id} to ${status} `);
|
||||||
const result = await this.sharedService.setConfig(`featureflag/${id}`, status.toString());
|
const result = await this.sharedService.setConfig(`featureflag/${id}`, status.toString());
|
||||||
console.log(result.value);
|
|
||||||
console.log(!!result.value);
|
|
||||||
return {
|
return {
|
||||||
name: id,
|
name: id,
|
||||||
state: result.value !== 'false',
|
state: result.value !== 'false',
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,8 @@ import { StateService } from '../state/state.service';
|
||||||
import { QuizService } from '../quiz/quiz.service';
|
import { QuizService } from '../quiz/quiz.service';
|
||||||
import { GiftsService } from '../gifts/gifts.service';
|
import { GiftsService } from '../gifts/gifts.service';
|
||||||
import { SharedService } from '../shared/shared.service';
|
import { SharedService } from '../shared/shared.service';
|
||||||
|
import {FeatureflagService} from "../featureflag/featureflag.service";
|
||||||
|
import {FeatureFlagsConsts} from "../Consts/FeatureFlags.consts";
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class SchedulerService {
|
export class SchedulerService {
|
||||||
|
|
@ -16,6 +18,7 @@ export class SchedulerService {
|
||||||
private giftsService: GiftsService,
|
private giftsService: GiftsService,
|
||||||
private quizService: QuizService,
|
private quizService: QuizService,
|
||||||
private sharedService: SharedService,
|
private sharedService: SharedService,
|
||||||
|
private featureFlagService: FeatureflagService,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
@Cron('* * * * *')
|
@Cron('* * * * *')
|
||||||
|
|
@ -31,6 +34,9 @@ export class SchedulerService {
|
||||||
async gameStatus() {
|
async gameStatus() {
|
||||||
const giftsLeft = await this.giftsService.getRemainingPrizeCount();
|
const giftsLeft = await this.giftsService.getRemainingPrizeCount();
|
||||||
if (giftsLeft === 0) {
|
if (giftsLeft === 0) {
|
||||||
|
if(await this.featureFlagService.getFeatureFlag(FeatureFlagsConsts.EnableEndgamePoints)) {
|
||||||
|
this.logger.verbose(`Feature flag ${FeatureFlagsConsts.EnableEndgamePoints} is enabled`);
|
||||||
|
}
|
||||||
const state = await this.stateService.setState('main', 'finish');
|
const state = await this.stateService.setState('main', 'finish');
|
||||||
this.sharedService.sendSocketNotificationToAllClients(
|
this.sharedService.sendSocketNotificationToAllClients(
|
||||||
'state_changed',
|
'state_changed',
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue