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';
|
||||
}
|
||||
|
|
@ -9,4 +9,4 @@ export class CommandsConsts {
|
|||
static GetCards = 'GetCards';
|
||||
static ApplyDebuff = 'ApplyDebuff';
|
||||
static CompleteQueue = 'CompleteQueue';
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,18 +1,49 @@
|
|||
import { Test, TestingModule } from '@nestjs/testing';
|
||||
import { FeatureflagController } from './featureflag.controller';
|
||||
import {FeatureflagService} from "./featureflag.service";
|
||||
import {FeatureflagServiceMock} from "../mocks/featureflag-service.mock";
|
||||
|
||||
describe('FeatureflagController', () => {
|
||||
let controller: FeatureflagController;
|
||||
let featureflagService: FeatureflagService;
|
||||
|
||||
beforeEach(async () => {
|
||||
jest.resetAllMocks();
|
||||
const module: TestingModule = await Test.createTestingModule({
|
||||
controllers: [FeatureflagController],
|
||||
providers: [
|
||||
{ provide: FeatureflagService, useValue: FeatureflagServiceMock },
|
||||
]
|
||||
}).compile();
|
||||
|
||||
controller = module.get<FeatureflagController>(FeatureflagController);
|
||||
featureflagService = module.get<FeatureflagService>(FeatureflagService);
|
||||
});
|
||||
|
||||
it('should be defined', () => {
|
||||
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);
|
||||
}
|
||||
|
||||
@Post(':ffname')
|
||||
async setFeatureFlag(@Param() params: { ffname: string}, @Body() ffState: { name: string, state: boolean }) {
|
||||
return await this.featureflagService.setFeatureFlag(params.ffname, ffState.state );
|
||||
@Post()
|
||||
async setFeatureFlag(@Body() ffState: { name: string, state: boolean }) {
|
||||
return await this.featureflagService.setFeatureFlag(ffState.name, ffState.state );
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,8 +24,6 @@ export class FeatureflagService {
|
|||
async setFeatureFlag(id: string, status: boolean) : Promise<IFeatureFlagStatus> {
|
||||
this.logger.verbose(`Setting feature flag status for ${id} to ${status} `);
|
||||
const result = await this.sharedService.setConfig(`featureflag/${id}`, status.toString());
|
||||
console.log(result.value);
|
||||
console.log(!!result.value);
|
||||
return {
|
||||
name: id,
|
||||
state: result.value !== 'false',
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@ import { StateService } from '../state/state.service';
|
|||
import { QuizService } from '../quiz/quiz.service';
|
||||
import { GiftsService } from '../gifts/gifts.service';
|
||||
import { SharedService } from '../shared/shared.service';
|
||||
import {FeatureflagService} from "../featureflag/featureflag.service";
|
||||
import {FeatureFlagsConsts} from "../Consts/FeatureFlags.consts";
|
||||
|
||||
@Injectable()
|
||||
export class SchedulerService {
|
||||
|
|
@ -16,6 +18,7 @@ export class SchedulerService {
|
|||
private giftsService: GiftsService,
|
||||
private quizService: QuizService,
|
||||
private sharedService: SharedService,
|
||||
private featureFlagService: FeatureflagService,
|
||||
) {}
|
||||
|
||||
@Cron('* * * * *')
|
||||
|
|
@ -31,6 +34,9 @@ export class SchedulerService {
|
|||
async gameStatus() {
|
||||
const giftsLeft = await this.giftsService.getRemainingPrizeCount();
|
||||
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');
|
||||
this.sharedService.sendSocketNotificationToAllClients(
|
||||
'state_changed',
|
||||
|
|
|
|||
Loading…
Reference in a new issue