diff --git a/app/gilded-rose.ts b/app/gilded-rose.ts index ee55134..283531d 100644 --- a/app/gilded-rose.ts +++ b/app/gilded-rose.ts @@ -19,47 +19,51 @@ export class GildedRose { updateQuality() { for (let i = 0; i < this.items.length; i++) { - if (this.items[i].name != 'Aged Brie' && this.items[i].name != 'Backstage passes to a TAFKAL80ETC concert') { - if (this.items[i].quality > 0) { - if (this.items[i].name != 'Sulfuras, Hand of Ragnaros') { - this.items[i].quality = this.items[i].quality - 1 + if (this.items[i].name == 'Aged Brie') { + if (this.items[i].quality < 50) + this.items[i].quality = this.items[i].quality + 1 + } else if (this.items[i].name == 'Backstage passes to a TAFKAL80ETC concert') { + if (this.items[i].quality < 50) + this.items[i].quality = this.items[i].quality + 1 + if (this.items[i].sellIn < 11) { + if (this.items[i].quality < 50) { + this.items[i].quality = this.items[i].quality + 1 + } + } + if (this.items[i].sellIn < 6) { + if (this.items[i].quality < 50) { + this.items[i].quality = this.items[i].quality + 1 } } } else { - if (this.items[i].quality < 50) { - this.items[i].quality = this.items[i].quality + 1 - if (this.items[i].name == 'Backstage passes to a TAFKAL80ETC concert') { - if (this.items[i].sellIn < 11) { - if (this.items[i].quality < 50) { - this.items[i].quality = this.items[i].quality + 1 - } - } - if (this.items[i].sellIn < 6) { - if (this.items[i].quality < 50) { - this.items[i].quality = this.items[i].quality + 1 - } - } + if (this.items[i].quality > 0) { + if (this.items[i].name != 'Sulfuras, Hand of Ragnaros') { + this.items[i].quality = this.items[i].quality - 1 + if (this.items[i].name == 'Conjured Mana Cake' && this.items[i].quality > 0) + this.items[i].quality = this.items[i].quality - 1 } } } + if (this.items[i].name != 'Sulfuras, Hand of Ragnaros') { this.items[i].sellIn = this.items[i].sellIn - 1; } + if (this.items[i].sellIn < 0) { - if (this.items[i].name != 'Aged Brie') { - if (this.items[i].name != 'Backstage passes to a TAFKAL80ETC concert') { - if (this.items[i].quality > 0) { - if (this.items[i].name != 'Sulfuras, Hand of Ragnaros') { - this.items[i].quality = this.items[i].quality - 1 - } - } - } else { - this.items[i].quality = this.items[i].quality - this.items[i].quality - } - } else { + if (this.items[i].name == 'Aged Brie') { if (this.items[i].quality < 50) { this.items[i].quality = this.items[i].quality + 1 } + } else if (this.items[i].name == 'Backstage passes to a TAFKAL80ETC concert') + this.items[i].quality = 0 + else { + if (this.items[i].quality > 0) { + if (this.items[i].name != 'Sulfuras, Hand of Ragnaros') { + this.items[i].quality = this.items[i].quality - 1 + if(this.items[i].name == 'Conjured Mana Cake' && this.items[i].quality > 1) + this.items[i].quality = this.items[i].quality - 1; + } + } } } } diff --git a/test/jest/gilded-rose.spec.ts b/test/jest/gilded-rose.spec.ts index 613639f..387dae9 100644 --- a/test/jest/gilded-rose.spec.ts +++ b/test/jest/gilded-rose.spec.ts @@ -9,7 +9,7 @@ describe('Gilded Rose', () => { const items = gildedRose.updateQuality(); // Assert - expect(items[0].name).toBe('bar'); + expect(items[0].name).toBe('foo'); }); it('sword quality drops by 1', () => { @@ -20,6 +20,86 @@ describe('Gilded Rose', () => { const items = gildedRose.updateQuality(); // Assert + expect(items[0].quality).toBe(0); + }); + + it('quality degrades twice as fast after last sell in day', () => { + const gildedRose = new GildedRose([new Item('Item', 0, 5)]); + + const items = gildedRose.updateQuality(); + + expect(items[0].quality).toBe(3); + }); + + it('aged brie quality increases by 1', () => { + const gildedRose = new GildedRose([new Item('Aged Brie', 5, 10)]); + + const items = gildedRose.updateQuality(); + + expect(items[0].quality).toBe(11); + }); + + it('aged brie quality does not increase over 50', () => { + const gildedRose = new GildedRose([new Item('Aged Brie', 5, 50)]); + + const items = gildedRose.updateQuality(); + + expect(items[0].quality).toBe(50); + }); + + it('backstage passes quality increse by 2 when 10 days or less', () => { + const gildedRose = new GildedRose([new Item('Backstage passes to a TAFKAL80ETC concert', 6, 5)]); + + const items = gildedRose.updateQuality(); + + expect(items[0].quality).toBe(7); + }); + + it('backstage passes quality increse by 3 when 5 days or less', () => { + const gildedRose = new GildedRose([new Item('Backstage passes to a TAFKAL80ETC concert', 2, 5)]); + + const items = gildedRose.updateQuality(); + + expect(items[0].quality).toBe(8); + }); + + it('backstage passes quality drop to 0 after final day', () => { + const gildedRose = new GildedRose([new Item('Backstage passes to a TAFKAL80ETC concert', -1, 5)]); + + const items = gildedRose.updateQuality(); + + expect(items[0].quality).toBe(0); + }); + + it('sulfuras quality remains the same', () => { + const gildedRose = new GildedRose([new Item('Sulfuras, Hand of Ragnaros', -1, 80)]); + + const items = gildedRose.updateQuality(); + + expect(items[0].quality).toBe(80); + }); + + it('sulfuras sell in days remain the same', () => { + const gildedRose = new GildedRose([new Item('Sulfuras, Hand of Ragnaros', 2, 80)]); + + const items = gildedRose.updateQuality(); + + expect(items[0].sellIn).toBe(2); + }); + + it('conjured item quality drops twice as fast', () => { + const gildedRose = new GildedRose([new Item('Conjured Mana Cake', 4, 5)]); + + const items = gildedRose.updateQuality(); + + expect(items[0].quality).toBe(3); + }); + + it('conjured item quality drops twice as fast when sell in days are over', () => { + const gildedRose = new GildedRose([new Item('Conjured Mana Cake', 0, 5)]); + + const items = gildedRose.updateQuality(); + expect(items[0].quality).toBe(1); - }) + }); });