TGD-55
This commit is contained in:
parent
97d6b13541
commit
5fd65e815c
2 changed files with 38 additions and 2 deletions
|
|
@ -4,13 +4,19 @@ import {GuestsService} from "../../guests/guests.service";
|
||||||
import {GuestsServiceMock} from "../../mocks/guests-service.mock";
|
import {GuestsServiceMock} from "../../mocks/guests-service.mock";
|
||||||
import {SharedService} from "../../shared/shared.service";
|
import {SharedService} from "../../shared/shared.service";
|
||||||
import {getModelToken} from "@nestjs/mongoose";
|
import {getModelToken} from "@nestjs/mongoose";
|
||||||
import {Versus} from "../../schemas/versus.schema";
|
import {Versus, VersusDocument} from "../../schemas/versus.schema";
|
||||||
import {Model} from "mongoose";
|
import {Model} from "mongoose";
|
||||||
import {CommandBus, QueryBus} from "@nestjs/cqrs";
|
import {CommandBus, QueryBus} from "@nestjs/cqrs";
|
||||||
import {QueryBusMock} from "../../mocks/querybus.mock";
|
import {QueryBusMock} from "../../mocks/querybus.mock";
|
||||||
|
|
||||||
|
const mockVersusModel = {
|
||||||
|
aggregate: jest.fn().mockReturnThis(),
|
||||||
|
exec: jest.fn(),
|
||||||
|
}
|
||||||
|
|
||||||
describe('VersusService', () => {
|
describe('VersusService', () => {
|
||||||
let service: VersusService;
|
let service: VersusService;
|
||||||
|
let versusModel: Model<Versus>;
|
||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
const module: TestingModule = await Test.createTestingModule({
|
const module: TestingModule = await Test.createTestingModule({
|
||||||
|
|
@ -18,16 +24,38 @@ describe('VersusService', () => {
|
||||||
VersusService,
|
VersusService,
|
||||||
{ provide: GuestsService, useValue: GuestsServiceMock },
|
{ provide: GuestsService, useValue: GuestsServiceMock },
|
||||||
{ provide: SharedService, useValue: SharedService },
|
{ provide: SharedService, useValue: SharedService },
|
||||||
{ provide: getModelToken(Versus.name), useValue: Model },
|
{ provide: getModelToken(Versus.name), useValue: mockVersusModel },
|
||||||
{ provide: CommandBus, useValue: CommandBus },
|
{ provide: CommandBus, useValue: CommandBus },
|
||||||
{ provide: QueryBus, useValue: QueryBusMock },
|
{ provide: QueryBus, useValue: QueryBusMock },
|
||||||
],
|
],
|
||||||
}).compile();
|
}).compile();
|
||||||
|
|
||||||
service = module.get<VersusService>(VersusService);
|
service = module.get<VersusService>(VersusService);
|
||||||
|
versusModel = module.get<Model<VersusDocument>>(getModelToken(Versus.name));
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should be defined', () => {
|
it('should be defined', () => {
|
||||||
expect(service).toBeDefined();
|
expect(service).toBeDefined();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('validateVersusTasksAndResetIfNecessary', () => {
|
||||||
|
it('should reset all tasks if no remaining', async () => {
|
||||||
|
// setup
|
||||||
|
mockVersusModel.exec.mockResolvedValue([]);
|
||||||
|
const markCompletedSpy = jest.spyOn(service, 'markAllAsUncompleted').mockResolvedValue(null);
|
||||||
|
|
||||||
|
// act
|
||||||
|
await service.validateVersusTasksAndResetIfNecessary();
|
||||||
|
|
||||||
|
// validate
|
||||||
|
expect(markCompletedSpy).toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not reset tasks if it is presented', async () => {
|
||||||
|
mockVersusModel.exec.mockReturnValue(['item1', 'item2']);
|
||||||
|
const markCompletedSpy = jest.spyOn(service,'markAllAsUncompleted').mockResolvedValue(null);
|
||||||
|
await service.validateVersusTasksAndResetIfNecessary();
|
||||||
|
expect(markCompletedSpy).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
})
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,15 @@ export class VersusService {
|
||||||
return { result: true };
|
return { result: true };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async validateVersusTasksAndResetIfNecessary() {
|
||||||
|
const versus = await this.versusModel.aggregate([{ $match: { completed: false } }, { $sample: { size: 1 } }]).exec();
|
||||||
|
if(versus.length == 0 ) {
|
||||||
|
await this.markAllAsUncompleted();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async getVersusTask() {
|
async getVersusTask() {
|
||||||
|
await this.validateVersusTasksAndResetIfNecessary();
|
||||||
const rand = await this.versusModel
|
const rand = await this.versusModel
|
||||||
.aggregate([{ $match: { completed: false } }, { $sample: { size: 1 } }])
|
.aggregate([{ $match: { completed: false } }, { $sample: { size: 1 } }])
|
||||||
.exec();
|
.exec();
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue