Skip to content

Commit

Permalink
feat(quest-preview-starters): add unit-tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Helias committed Apr 13, 2020
1 parent 218b9e6 commit da5dedc
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 23 deletions.
Expand Up @@ -2,6 +2,7 @@
<perfect-scrollbar class="transparent">
<div class="preview-content quest-preview">
<h5 *ngIf="!!service.title">{{ service.title }}</h5>
<p *ngIf="!!service.level">Level: {{ service.level }}</p>
<p *ngIf="!!service.minLevel">Requires level: {{ service.minLevel }}</p>
<p *ngIf="!!service.side">Side: &nbsp;<span class="side {{ service.side.toLowerCase() }}"></span> {{ service.side }}</p>
<p *ngIf="!service.side && service.races">Races: {{ service.races }}</p>
Expand All @@ -12,24 +13,24 @@ <h5 *ngIf="!!service.title">{{ service.title }}</h5>
<keira-icon [size]="'small'" [itemId]="qitem"></keira-icon>
<strong class="colored">{{ service.questStarterItem | async }}</strong>
</p>
<div *ngIf="service.creatureQueststarterForm.length > 0">
<p *ngFor="let q of service.creatureQueststarterForm">
<div *ngIf="service.creatureQueststarter.length > 0">
<p *ngFor="let q of service.creatureQueststarter">
<img src="assets/img/quest/quest_start.gif"> NPC Start: <strong class="colored">{{ service.mysqlQueryService.getCreatureNameById(q.id) | async }}</strong>
</p>
</div>
<div *ngIf="service.gameobjectQueststarterForm.length > 0">
<p *ngFor="let q of service.gameobjectQueststarterForm">
<div *ngIf="service.gameobjectQueststarter.length > 0">
<p *ngFor="let q of service.gameobjectQueststarter">
<img src="assets/img/quest/quest_start.gif"> GO Start: <strong class="colored">{{ service.mysqlQueryService.getGameObjectNameById(q.id) | async }}</strong>
</p>
</div>
<!-- Quest ender -->
<div *ngIf="service.creatureQuestenderForm.length > 0">
<p *ngFor="let q of service.creatureQuestenderForm">
<div *ngIf="service.creatureQuestender.length > 0">
<p *ngFor="let q of service.creatureQuestender">
<img src="assets/img/quest/quest_end.gif"> NPC End: <strong class="colored">{{ service.mysqlQueryService.getCreatureNameById(q.id) | async }}</strong>
</p>
</div>
<div *ngIf="service.gameobjectQuestenderForm.length > 0">
<p *ngFor="let q of service.gameobjectQuestenderForm">
<div *ngIf="service.gameobjectQuestender.length > 0">
<p *ngFor="let q of service.gameobjectQuestender">
<img src="assets/img/quest/quest_end.gif"> GO End: <strong class="colored">{{ service.mysqlQueryService.getGameObjectNameById(q.id) | async }}</strong>
</p>
</div>
Expand Down
Expand Up @@ -11,6 +11,8 @@ import { GameobjectQuestenderService } from '../gameobject-questender/gameobject
import { CreatureQueststarterService } from '../creature-queststarter/creature-queststarter.service';
import { CreatureQuestenderService } from '../creature-questender/creature-questender.service';
import { QuestHandlerService } from '../quest-handler.service';
import { MysqlQueryService } from '@keira-shared/services/mysql-query.service';
import { of } from 'rxjs';

describe('QuestPreviewService', () => {

Expand All @@ -28,9 +30,10 @@ describe('QuestPreviewService', () => {

const setup = () => {
const service = TestBed.inject(QuestPreviewService);
const mysqlQueryService = TestBed.inject(MysqlQueryService);
const questTemplateService = TestBed.inject(QuestTemplateService);

return { service, questTemplateService };
return { service, mysqlQueryService, questTemplateService };
};

it('handle questTemplate values', () => {
Expand Down Expand Up @@ -63,6 +66,25 @@ describe('QuestPreviewService', () => {
expect(service.sharable).toBe('Not sharable');
});

it('mysqlQuery', async() => {
const { service, mysqlQueryService, questTemplateService } = setup();
const mockID = 123;
const mockItem = '1234';
const mockItemName = 'Helias Item';

spyOn(mysqlQueryService, 'getItemByStartQuest').and.callFake(i => of(mockItem).toPromise());
spyOn(mysqlQueryService, 'getItemNameByStartQuest').and.callFake(i => of(mockItemName).toPromise());
questTemplateService.form.controls.ID.setValue(mockID);

expect(await service.questGivenByItem).toBe(mockItem);
expect(await service.questStarterItem).toBe(mockItemName);

expect(mysqlQueryService.getItemByStartQuest).toHaveBeenCalledTimes(1);
expect(mysqlQueryService.getItemByStartQuest).toHaveBeenCalledWith(mockID);
expect(mysqlQueryService.getItemNameByStartQuest).toHaveBeenCalledTimes(1);
expect(mysqlQueryService.getItemNameByStartQuest).toHaveBeenCalledWith(mockID);
});

it('initializeService', () => {
const { service, questTemplateService } = setup();
const initServiceSpy: Spy = spyOn<any>(service, 'initService').and.callThrough();
Expand Down
27 changes: 13 additions & 14 deletions src/app/features/quest/quest-preview/quest-preview.service.ts
Expand Up @@ -10,7 +10,6 @@ import { CreatureQuestenderService } from '../creature-questender/creature-quest
import { PreviewHelperService } from '@keira-shared/services/preview-helper.service';
import { QUEST_FLAG_SHARABLE } from '@keira-shared/constants/flags/quest-flags';
import { MysqlQueryService } from '@keira-shared/services/mysql-query.service';
import { SqliteQueryService } from '@keira-shared/services/sqlite-query.service';
import { QuestTemplate } from '@keira-shared/types/quest-template.type';
import { CreatureQueststarter } from '@keira-shared/types/creature-queststarter.type';
import { EditorService } from '@keira-shared/abstract/service/editors/editor.service';
Expand All @@ -37,23 +36,23 @@ export class QuestPreviewService {
) { }

// get QuestTemplate values
get title(): string { return this.questTemplateForm.LogTitle; }
get level(): string { return String(this.questTemplateForm.QuestLevel); }
get minLevel(): string { return String(this.questTemplateForm.MinLevel); }
get side(): string { return this.helperService.getFactionFromRace(this.questTemplateForm.AllowableRaces); }
get races(): string { return this.helperService.getRaceString(this.questTemplateForm.AllowableRaces)?.join(','); }
get sharable(): string { return this.questTemplateForm.Flags & QUEST_FLAG_SHARABLE ? 'Sharable' : 'Not sharable'; }
get title(): string { return this.questTemplate.LogTitle; }
get level(): string { return String(this.questTemplate.QuestLevel); }
get minLevel(): string { return String(this.questTemplate.MinLevel); }
get side(): string { return this.helperService.getFactionFromRace(this.questTemplate.AllowableRaces); }
get races(): string { return this.helperService.getRaceString(this.questTemplate.AllowableRaces)?.join(','); }
get sharable(): string { return this.questTemplate.Flags & QUEST_FLAG_SHARABLE ? 'Sharable' : 'Not sharable'; }

// get form value
get questTemplateForm(): QuestTemplate { return this.questTemplateService.form.getRawValue(); }
get creatureQueststarterForm(): CreatureQueststarter[] { return this.creatureQueststarterService.newRows; }
get creatureQuestenderForm(): CreatureQuestender[] { return this.creatureQuestenderService.newRows; }
get gameobjectQueststarterForm(): GameobjectQueststarter[] { return this.gameobjectQueststarterService.newRows; }
get gameobjectQuestenderForm(): GameobjectQuestender[] { return this.gameobjectQuestenderService.newRows; }
get questTemplate(): QuestTemplate { return this.questTemplateService.form.getRawValue(); }
get creatureQueststarter(): CreatureQueststarter[] { return this.creatureQueststarterService.newRows; }
get creatureQuestender(): CreatureQuestender[] { return this.creatureQuestenderService.newRows; }
get gameobjectQueststarter(): GameobjectQueststarter[] { return this.gameobjectQueststarterService.newRows; }
get gameobjectQuestender(): GameobjectQuestender[] { return this.gameobjectQuestenderService.newRows; }

// Item Quest Starter
get questGivenByItem(): Promise<string> { return this.mysqlQueryService.getItemByStartQuest(this.questTemplateForm.ID); }
get questStarterItem(): Promise<string> { return this.mysqlQueryService.getItemNameByStartQuest(this.questTemplateForm.ID); }
get questGivenByItem(): Promise<string> { return this.mysqlQueryService.getItemByStartQuest(this.questTemplate.ID); }
get questStarterItem(): Promise<string> { return this.mysqlQueryService.getItemNameByStartQuest(this.questTemplate.ID); }

initializeServices() {
this.initService(this.questTemplateService);
Expand Down
19 changes: 19 additions & 0 deletions src/app/shared/services/mysql-query.service.spec.ts
Expand Up @@ -922,5 +922,24 @@ describe('MysqlQueryService', () => {
'SELECT `LogTitle` AS "v" FROM `quest_template` WHERE (RequiredNpcOrGo1 = 1)'
);
});

it('getItemByStartQuest', async () => {
expect(await service.getItemByStartQuest(id)).toEqual(result);
expect(await service.getItemByStartQuest(id)).toEqual(result); // check cache
expect(service.queryValue).toHaveBeenCalledTimes(1); // check cache
expect(service.queryValue).toHaveBeenCalledWith(
`SELECT entry AS v FROM item_template WHERE startquest = ${id}`,
);
});

it('getItemNameByStartQuest', async () => {
expect(await service.getItemNameByStartQuest(id)).toEqual(result);
expect(await service.getItemNameByStartQuest(id)).toEqual(result); // check cache
expect(service.queryValue).toHaveBeenCalledTimes(1); // check cache
expect(service.queryValue).toHaveBeenCalledWith(
`SELECT name AS v FROM item_template WHERE startquest = ${id}`,
);
});

});
});

0 comments on commit da5dedc

Please sign in to comment.