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 {
items: Array<Item>;
@ -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);
}

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', () => {
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');
// });
});