diff --git a/src/app/features/quest/quest-preview/quest-preview.service.spec.ts b/src/app/features/quest/quest-preview/quest-preview.service.spec.ts index 5f9e9d00db..26e115a5b9 100644 --- a/src/app/features/quest/quest-preview/quest-preview.service.spec.ts +++ b/src/app/features/quest/quest-preview/quest-preview.service.spec.ts @@ -14,7 +14,7 @@ import { QuestHandlerService } from '../quest-handler.service'; import { MysqlQueryService } from '@keira-shared/services/mysql-query.service'; import { of } from 'rxjs'; -fdescribe('QuestPreviewService', () => { +describe('QuestPreviewService', () => { beforeEach(() => { TestBed.configureTestingModule({ @@ -33,11 +33,17 @@ fdescribe('QuestPreviewService', () => { const mysqlQueryService = TestBed.inject(MysqlQueryService); const questTemplateService = TestBed.inject(QuestTemplateService); const questTemplateAddonService = TestBed.inject(QuestTemplateAddonService); + const MAX_NEXT_QUEST_ID = 7; - spyOn(mysqlQueryService, 'getPrevQuestById').and.callFake((id: number) => of(String(id > 0 ? (id - 1) : 0)).toPromise()); - spyOn(mysqlQueryService, 'getNextQuestById').and.callFake((id: number) => of(String(id < 6 ? (id + 1) : 0)).toPromise()); + spyOn(mysqlQueryService, 'getQuestTitleById').and.callFake(i => of('Title' + i).toPromise()); + spyOn(mysqlQueryService, 'getPrevQuestById').and.callFake( + (id: number) => of(String(id > 0 ? (id - 1) : 0)).toPromise() + ); + spyOn(mysqlQueryService, 'getNextQuestById').and.callFake( + (id: number) => of(String(id < MAX_NEXT_QUEST_ID ? (id + 1) : 0)).toPromise() + ); - return { service, mysqlQueryService, questTemplateService, questTemplateAddonService }; + return { service, mysqlQueryService, questTemplateService, questTemplateAddonService, MAX_NEXT_QUEST_ID }; }; it('handle questTemplate values', () => { @@ -133,10 +139,80 @@ fdescribe('QuestPreviewService', () => { }); describe('prevQuestList', () => { + it('should correctly work when PrevQuestID is set', async () => { + const { service, mysqlQueryService, questTemplateService, questTemplateAddonService } = setup(); + questTemplateService.form.controls.ID.setValue(4); + questTemplateAddonService.form.controls.PrevQuestID.setValue(3); + + expect(await service.prevQuestList).toEqual([ + { id: 1, title: 'Title1' }, + { id: 2, title: 'Title2' }, + { id: 3, title: 'Title3' }, + ]); + expect(await service.prevQuestList).toEqual([ // check cache + { id: 1, title: 'Title1' }, + { id: 2, title: 'Title2' }, + { id: 3, title: 'Title3' }, + ]); + expect(mysqlQueryService.getPrevQuestById).toHaveBeenCalledTimes(3); + expect(mysqlQueryService.getPrevQuestById).toHaveBeenCalledWith(3); + expect(mysqlQueryService.getPrevQuestById).toHaveBeenCalledWith(2); + expect(mysqlQueryService.getPrevQuestById).toHaveBeenCalledWith(1); + }); + + it('should correctly work when PrevQuestID is NOT set', async () => { + const { service, mysqlQueryService, questTemplateService, questTemplateAddonService } = setup(); + questTemplateService.form.controls.ID.setValue(4); + questTemplateAddonService.form.controls.PrevQuestID.setValue(0); + expect(await service.prevQuestList).toEqual([]); + expect(await service.prevQuestList).toEqual([]); // check cache + expect(mysqlQueryService.getPrevQuestById).toHaveBeenCalledTimes(0); + }); }); describe('nextQuestList', () => { - // TODO + it('should correctly work when NextQuestID is set', async () => { + const { service, mysqlQueryService, questTemplateService, questTemplateAddonService } = setup(); + questTemplateService.form.controls.ID.setValue(4); + questTemplateAddonService.form.controls.NextQuestID.setValue(5); + + expect(await service.nextQuestList).toEqual([ + { id: 5, title: 'Title5' }, + { id: 6, title: 'Title6' }, + { id: 7, title: 'Title7' }, + ]); + expect(await service.nextQuestList).toEqual([ // check cache + { id: 5, title: 'Title5' }, + { id: 6, title: 'Title6' }, + { id: 7, title: 'Title7' }, + ]); + expect(mysqlQueryService.getNextQuestById).toHaveBeenCalledTimes(3); + expect(mysqlQueryService.getNextQuestById).toHaveBeenCalledWith(5); + expect(mysqlQueryService.getNextQuestById).toHaveBeenCalledWith(6); + expect(mysqlQueryService.getNextQuestById).toHaveBeenCalledWith(7); + }); + + it('should correctly work when NextQuestID is NOT set', async () => { + const { service, mysqlQueryService, questTemplateService, questTemplateAddonService } = setup(); + questTemplateService.form.controls.ID.setValue(4); + questTemplateAddonService.form.controls.NextQuestID.setValue(0); + + expect(await service.nextQuestList).toEqual([ + { id: 5, title: 'Title5' }, + { id: 6, title: 'Title6' }, + { id: 7, title: 'Title7' }, + ]); + expect(await service.nextQuestList).toEqual([ // check cache + { id: 5, title: 'Title5' }, + { id: 6, title: 'Title6' }, + { id: 7, title: 'Title7' }, + ]); + expect(mysqlQueryService.getNextQuestById).toHaveBeenCalledTimes(4); + expect(mysqlQueryService.getNextQuestById).toHaveBeenCalledWith(4, true); + expect(mysqlQueryService.getNextQuestById).toHaveBeenCalledWith(5, true); + expect(mysqlQueryService.getNextQuestById).toHaveBeenCalledWith(6, true); + expect(mysqlQueryService.getNextQuestById).toHaveBeenCalledWith(7, true); + }); }); });