Add enum for item types

This commit is contained in:
EmanuelDicu 2022-06-29 12:51:23 +01:00
parent 31c3d16ad6
commit 2e8b239f54
2 changed files with 59 additions and 11 deletions

View File

@ -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 { export class GildedRose {
items: Array<Item>; items: Array<Item>;
@ -38,6 +45,12 @@ export class GildedRose {
++item.quality; ++item.quality;
} }
private static updateConjuredItem(item: Item) {
item.quality -= 2;
if (item.sellIn < 0)
item.quality -= 2;
}
private static updateRegularItem(item: Item) { private static updateRegularItem(item: Item) {
--item.quality; --item.quality;
if (item.sellIn < 0) if (item.sellIn < 0)
@ -54,15 +67,18 @@ export class GildedRose {
private updateItemQuality(item: Item) { private updateItemQuality(item: Item) {
--item.sellIn; --item.sellIn;
switch (item.name) { switch (item.name) {
case 'Sulfuras, Hand of Ragnaros': case ItemType.Sulfuras:
GildedRose.updateSulfuras(item); GildedRose.updateSulfuras(item);
break; break;
case 'Backstage passes to a TAFKAL80ETC concert': case ItemType.BackstagePass:
GildedRose.updateBackstagePass(item); GildedRose.updateBackstagePass(item);
break; break;
case 'Aged Brie': case ItemType.AgedBrie:
GildedRose.updateAgedBrie(item); GildedRose.updateAgedBrie(item);
break; break;
case ItemType.ConjuredItem:
GildedRose.updateConjuredItem(item);
break;
default: default:
GildedRose.updateRegularItem(item); GildedRose.updateRegularItem(item);
} }

View File

@ -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', () => { it('one iteration, not passed sell date', () => {
const gildedRose = new GildedRose([new Item('Any normal item', 5, 31)]); const gildedRose = new GildedRose([new Item('Any normal item', 5, 31)]);
gildedRose.updateQuality(); gildedRose.updateQuality();
@ -130,7 +168,7 @@ describe('Gilded Rose', () => {
expect(gildedRose.items[0].quality).to.equal(15); 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)]); const gildedRose = new GildedRose([new Item('Any normal item', 5, 12)]);
for (let i = 0; i < 10; ++i) { for (let i = 0; i < 10; ++i) {
gildedRose.updateQuality(); gildedRose.updateQuality();
@ -138,10 +176,4 @@ describe('Gilded Rose', () => {
expect(gildedRose.items[0].quality).to.equal(0); 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');
// });
}); });