From d5d8163f0db8e72183da2f87d2f0d6602640a3c7 Mon Sep 17 00:00:00 2001 From: Peter Reid Date: Sun, 2 Jan 2022 11:08:11 +0000 Subject: [PATCH] feat(creature): add asMapping method --- .../classes/client_LodestoneClient.default.md | 4 +-- src/entity/Creature.ts | 26 +++++++++++++------ src/entity/__tests__/Creature.test.ts | 16 +++++++----- 3 files changed, 30 insertions(+), 16 deletions(-) diff --git a/docs/api/classes/client_LodestoneClient.default.md b/docs/api/classes/client_LodestoneClient.default.md index 9b8b60f..3bc9221 100644 --- a/docs/api/classes/client_LodestoneClient.default.md +++ b/docs/api/classes/client_LodestoneClient.default.md @@ -30,7 +30,7 @@ Client for interfacing with the Final Fantasy XIV Lodestone. #### Defined in -[client/LodestoneClient.ts:56](https://github.com/XIVStats/lodestone/blob/ad3cb5c/src/client/LodestoneClient.ts#L56) +[client/LodestoneClient.ts:56](https://github.com/XIVStats/lodestone/blob/8f23137/src/client/LodestoneClient.ts#L56) ## Properties @@ -44,4 +44,4 @@ An instance will be generated by default, but as a consumer you can provide your #### Defined in -[client/LodestoneClient.ts:50](https://github.com/XIVStats/lodestone/blob/ad3cb5c/src/client/LodestoneClient.ts#L50) +[client/LodestoneClient.ts:50](https://github.com/XIVStats/lodestone/blob/8f23137/src/client/LodestoneClient.ts#L50) diff --git a/src/entity/Creature.ts b/src/entity/Creature.ts index 62103b2..52acc85 100644 --- a/src/entity/Creature.ts +++ b/src/entity/Creature.ts @@ -28,16 +28,26 @@ import IItem from '../interface/IItem' import CreatureType from './CreatureType' export default class Creature { - constructor(public item: IItem, public creatureType?: CreatureType, public creatureName?: string) {} + constructor(public toolTipId: string, public item: IItem, public type?: CreatureType, public name?: string) {} - static fromToolTip(data: string, cheerio: CheerioAPI, itemIdOnly?: string): Creature { + public asMapping(): { toolTipId: string; itemId: string } { + return { + toolTipId: this.toolTipId, + itemId: this.item.id, + } + } + + static fromToolTip(toolTipId: string, data: string, cheerio: CheerioAPI, itemIdOnly?: boolean): Creature { const $ = cheerio.load(data) - const typeAsString = $('header')[0].attribs.class.replace('__header', '').toUpperCase() - const type = typeAsString as CreatureType - const creatureName = !itemIdOnly ? $('h4').text() : undefined const item = $('a')[0] - const itemName = !itemIdOnly ? item.attribs['data-tooltip'] : undefined - const itemId = item.attribs.href.replace('/lodestone/playguide/db/item/', '').replace('/', '') - return new Creature({ name: itemName, id: itemId }, type, creatureName) + return new Creature( + toolTipId, + { + name: !itemIdOnly ? item.attribs['data-tooltip'] : undefined, + id: item.attribs.href.replace('/lodestone/playguide/db/item/', '').replace('/', ''), + }, + $('header')[0].attribs.class.replace('__header', '').toUpperCase() as CreatureType, + !itemIdOnly ? $('h4').text() : undefined + ) } } diff --git a/src/entity/__tests__/Creature.test.ts b/src/entity/__tests__/Creature.test.ts index 33137ac..9da652b 100644 --- a/src/entity/__tests__/Creature.test.ts +++ b/src/entity/__tests__/Creature.test.ts @@ -31,14 +31,15 @@ import CreatureType from '../CreatureType' describe('Creature', () => { describe('given a mount tooltip is being loaded', () => { - const expectedMountOne: Creature = { - creatureName: 'Company Chocobo', - creatureType: CreatureType.Mount, - item: { + const expectedMountOne: Creature = new Creature( + '9045c5c5d5d181ee495f0e76af07d6d93c9f0f13', + { id: '85f78cb2a87', name: 'Chocobo Whistle', }, - } + CreatureType.Mount, + 'Company Chocobo' + ) // /lodestone/character/11886902/mount/tooltip/9045c5c5d5d181ee495f0e76af07d6d93c9f0f13 describe.each([['9045c5c5d5d181ee495f0e76af07d6d93c9f0f13', "P'tajha Rihll", 'Company Chocobo', expectedMountOne]])( 'for tooltip %s - relating to %s - Mount: %s', @@ -51,7 +52,7 @@ describe('Creature', () => { readFile(join(__dirname, 'resources', 'mount', 'tooltip', `${toolTipId}.html`), 'utf8', (err, data) => { jest.setTimeout(10000) const testString = Buffer.from(data) - resultantCreature = Creature.fromToolTip(testString.toString(), Cheerio) + resultantCreature = Creature.fromToolTip(toolTipId, testString.toString(), Cheerio) done() }) }) @@ -66,6 +67,7 @@ describe('Creature', () => { // @ts-ignore it.each(Object.entries(value))("with key %s equal to '%s'", (lowerKey, lowerValue) => { // @ts-ignore + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access expect(resultantCreature[key][lowerKey]).toEqual(lowerValue) }) }) @@ -73,4 +75,6 @@ describe('Creature', () => { } ) }) + + // TODO: Add minion tooltip tests })