From 5fd65e815c746caf3a6d3a4ff9af9f83abb27168 Mon Sep 17 00:00:00 2001 From: Kirill Ivlev Date: Sun, 24 Nov 2024 18:16:49 +0400 Subject: [PATCH] TGD-55 --- src/game/versus/versus.service.spec.ts | 32 ++++++++++++++++++++++++-- src/game/versus/versus.service.ts | 8 +++++++ 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/src/game/versus/versus.service.spec.ts b/src/game/versus/versus.service.spec.ts index b3725db..ca254b9 100644 --- a/src/game/versus/versus.service.spec.ts +++ b/src/game/versus/versus.service.spec.ts @@ -4,13 +4,19 @@ import {GuestsService} from "../../guests/guests.service"; import {GuestsServiceMock} from "../../mocks/guests-service.mock"; import {SharedService} from "../../shared/shared.service"; import {getModelToken} from "@nestjs/mongoose"; -import {Versus} from "../../schemas/versus.schema"; +import {Versus, VersusDocument} from "../../schemas/versus.schema"; import {Model} from "mongoose"; import {CommandBus, QueryBus} from "@nestjs/cqrs"; import {QueryBusMock} from "../../mocks/querybus.mock"; +const mockVersusModel = { + aggregate: jest.fn().mockReturnThis(), + exec: jest.fn(), +} + describe('VersusService', () => { let service: VersusService; + let versusModel: Model; beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,16 +24,38 @@ describe('VersusService', () => { VersusService, { provide: GuestsService, useValue: GuestsServiceMock }, { provide: SharedService, useValue: SharedService }, - { provide: getModelToken(Versus.name), useValue: Model }, + { provide: getModelToken(Versus.name), useValue: mockVersusModel }, { provide: CommandBus, useValue: CommandBus }, { provide: QueryBus, useValue: QueryBusMock }, ], }).compile(); service = module.get(VersusService); + versusModel = module.get>(getModelToken(Versus.name)); }); it('should be defined', () => { 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(); + }); + }) }); diff --git a/src/game/versus/versus.service.ts b/src/game/versus/versus.service.ts index b4abfaf..a4dbcb4 100644 --- a/src/game/versus/versus.service.ts +++ b/src/game/versus/versus.service.ts @@ -69,7 +69,15 @@ export class VersusService { 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() { + await this.validateVersusTasksAndResetIfNecessary(); const rand = await this.versusModel .aggregate([{ $match: { completed: false } }, { $sample: { size: 1 } }]) .exec();