diff --git a/TypeScript/app/gilded-rose.ts b/TypeScript/app/gilded-rose.ts index 757bcca4..faf17748 100644 --- a/TypeScript/app/gilded-rose.ts +++ b/TypeScript/app/gilded-rose.ts @@ -10,10 +10,11 @@ export class Item { } } +export type ConjuredItem = Item & { conjured: true } export class GildedRose { - items: Array + items: Array - constructor(items = [] as Array) { + constructor(items = [] as Array) { this.items = items } diff --git a/TypeScript/test/jest/gilded-rose.spec.ts b/TypeScript/test/jest/gilded-rose.spec.ts index 2b2d2801..a83feeb0 100644 --- a/TypeScript/test/jest/gilded-rose.spec.ts +++ b/TypeScript/test/jest/gilded-rose.spec.ts @@ -1,4 +1,4 @@ -import { Item, GildedRose } from '@/gilded-rose' +import { Item, GildedRose, ConjuredItem } from '@/gilded-rose' /** * A copy of the unrefactored GildedRose class used for acceptance tests @@ -78,3 +78,29 @@ test('acceptance tests', () => { } } }) + +function decayRate(previousValue: number, currentValue: number): number { + const diff = currentValue - previousValue + return diff > 0 ? diff : 0 +} + +test('"Conjured" items degrade in Quality twice as fast as normal items', () => { + for (const name of names) { + for (const sellIn of sellIns) { + for (const quality of qualities) { + const gildedRoseWithConjuredItems = new GildedRose([{ name, sellIn, quality, conjured: true}]) + const gildedRoseWithNormalItems = new GildedRose([new Item(name, sellIn, quality)]) + + const conjuredQualityBefore = gildedRoseWithConjuredItems.items[0].quality + const conjuredQualityAfter = gildedRoseWithConjuredItems.updateQuality()[0].quality + const conjuredQualityDecayRate = decayRate(conjuredQualityBefore, conjuredQualityAfter) + + const normalQualityBefore = gildedRoseWithNormalItems.items[0].quality + const normalQualityAfter = gildedRoseWithNormalItems.updateQuality()[0].quality + const normalQualityDecayRate = decayRate(normalQualityBefore, normalQualityAfter) + + expect(conjuredQualityDecayRate).toEqual(normalQualityDecayRate * 2) + } + } + } +}) \ No newline at end of file