diff --git a/TypeScript/app/gilded-rose.ts b/TypeScript/app/gilded-rose.ts index bd14724d..2ce02115 100644 --- a/TypeScript/app/gilded-rose.ts +++ b/TypeScript/app/gilded-rose.ts @@ -10,6 +10,13 @@ export class Item { } } +export enum ItemType { + Sulfuras = 'Sulfuras, Hand of Ragnaros', + BackstagePass = 'Backstage passes to a TAFKAL80ETC concert', + AgedBrie = 'Aged Brie', + ConjuredItem = 'Conjured', +} + export class GildedRose { items: Array; @@ -38,6 +45,12 @@ export class GildedRose { ++item.quality; } + private static updateConjuredItem(item: Item) { + item.quality -= 2; + if (item.sellIn < 0) + item.quality -= 2; + } + private static updateRegularItem(item: Item) { --item.quality; if (item.sellIn < 0) @@ -54,15 +67,18 @@ export class GildedRose { private updateItemQuality(item: Item) { --item.sellIn; switch (item.name) { - case 'Sulfuras, Hand of Ragnaros': + case ItemType.Sulfuras: GildedRose.updateSulfuras(item); break; - case 'Backstage passes to a TAFKAL80ETC concert': + case ItemType.BackstagePass: GildedRose.updateBackstagePass(item); break; - case 'Aged Brie': + case ItemType.AgedBrie: GildedRose.updateAgedBrie(item); break; + case ItemType.ConjuredItem: + GildedRose.updateConjuredItem(item); + break; default: GildedRose.updateRegularItem(item); } diff --git a/TypeScript/test/mocha/gilded-rose.spec.ts b/TypeScript/test/mocha/gilded-rose.spec.ts index 6d408160..d11e252f 100644 --- a/TypeScript/test/mocha/gilded-rose.spec.ts +++ b/TypeScript/test/mocha/gilded-rose.spec.ts @@ -101,7 +101,45 @@ describe('Gilded Rose', () => { }); }); - describe('Any normal item', () => { + describe('Conjured item', () => { + it('one iteration, not passed sell date', () => { + const gildedRose = new GildedRose([new Item('Conjured', 5, 31)]); + gildedRose.updateQuality(); + expect(gildedRose.items[0].quality).to.equal(29); + }); + + it('one iteration, passed sell date', () => { + const gildedRose = new GildedRose([new Item('Conjured', -1, 31)]); + gildedRose.updateQuality(); + expect(gildedRose.items[0].quality).to.equal(27); + }); + + it('multiple iterations, not reaching negative quality and not passed sell date', () => { + const gildedRose = new GildedRose([new Item('Conjured', 21, 31)]); + for (let i = 0; i < 10; ++i) { + gildedRose.updateQuality(); + } + expect(gildedRose.items[0].quality).to.equal(11); + }); + + it('multiple iterations, not reaching negative quality and passed sell date', () => { + const gildedRose = new GildedRose([new Item('Conjured', 5, 37)]); + for (let i = 0; i < 10; ++i) { + gildedRose.updateQuality(); + } + expect(gildedRose.items[0].quality).to.equal(7); + }); + + it('multiple iterations, reaching negative quality and passed sell date', () => { + const gildedRose = new GildedRose([new Item('Conjured', 5, 12)]); + for (let i = 0; i < 10; ++i) { + gildedRose.updateQuality(); + } + expect(gildedRose.items[0].quality).to.equal(0); + }); + }); + + describe('Regular item', () => { it('one iteration, not passed sell date', () => { const gildedRose = new GildedRose([new Item('Any normal item', 5, 31)]); gildedRose.updateQuality(); @@ -130,7 +168,7 @@ describe('Gilded Rose', () => { expect(gildedRose.items[0].quality).to.equal(15); }); - it('multiple iterations, reaching max quality and passed sell date', () => { + it('multiple iterations, reaching negative quality and passed sell date', () => { const gildedRose = new GildedRose([new Item('Any normal item', 5, 12)]); for (let i = 0; i < 10; ++i) { gildedRose.updateQuality(); @@ -138,10 +176,4 @@ describe('Gilded Rose', () => { expect(gildedRose.items[0].quality).to.equal(0); }); }); - - // it('should foo', () => { - // const gildedRose = new GildedRose([new Item('foo', 0, 0)]); - // const items = gildedRose.updateQuality(); - // expect(items[0].name).to.equal('fixme'); - // }); });