implement conjured item

This commit is contained in:
kiwioyster 2023-06-22 12:34:31 +12:00
parent e19e99800c
commit bbeaef456a
2 changed files with 44 additions and 5 deletions

View File

@ -40,13 +40,15 @@ export class GildedRose {
private _isBackstagePass = (name: string): boolean =>
name === "Backstage passes to a TAFKAL80ETC concert";
private _isConjured = (name: string): boolean => name.includes("Conjured");
private _decayGeneralItem = (item: Item): Item => {
const qualityDecay = item.sellIn > 0 ? 1 : 2;
return {
const newItem = {
name: item.name,
quality: item.quality > 0 ? item.quality - qualityDecay : 0,
quality: item.quality - this._getDecayAmount(item),
sellIn: item.sellIn - 1,
};
return this._applyQualityLimitation(newItem);
};
private _decayLegendaryItem = (item: Item): Item => {
@ -82,11 +84,25 @@ export class GildedRose {
};
private _applyQualityLimitation = (item: Item): Item => {
let newQuality = item.quality;
if (item.quality > this.QUALITY_LIM) {
newQuality = this.QUALITY_LIM;
} else if (item.quality < 0) {
newQuality = 0;
}
return {
name: item.name,
quality:
item.quality > this.QUALITY_LIM ? this.QUALITY_LIM : item.quality,
quality: newQuality,
sellIn: item.sellIn,
};
};
private _getDecayAmount = (item: Item): number => {
const decayAmount = item.sellIn > 0 ? 1 : 2;
if (this._isConjured(item.name)) {
return decayAmount * 2;
} else {
return decayAmount;
}
};
}

View File

@ -8,6 +8,8 @@ const legendaryItem = (sellIn: number, quality: number) =>
new Item("Sulfuras, Hand of Ragnaros", sellIn, quality);
const backstagePassItem = (sellIn: number, quality: number) =>
new Item("Backstage passes to a TAFKAL80ETC concert", sellIn, quality);
const conjuredItem = (sellIn: number, quality: number) =>
new Item("Conjured test item", sellIn, quality);
describe("Gilded Rose", () => {
it("should degrade quality", () => {
@ -102,4 +104,25 @@ describe("Gilded Rose", () => {
expect(items[0].quality).toBe(50);
});
});
describe("conjured", () => {
it("should degrade quality", () => {
const gildedRose = new GildedRose([conjuredItem(1, 3)]);
const items = gildedRose.updateQuality();
expect(items[0].sellIn).toBe(0);
expect(items[0].quality).toBe(1);
});
it("should degrade quality twice as fast past sell in date", () => {
const gildedRose = new GildedRose([conjuredItem(0, 4)]);
const items = gildedRose.updateQuality();
expect(items[0].sellIn).toBe(-1);
expect(items[0].quality).toBe(0);
});
it("should not degrade quality past 0", () => {
const gildedRose = new GildedRose([conjuredItem(0, 1)]);
const items = gildedRose.updateQuality();
expect(items[0].sellIn).toBe(-1);
expect(items[0].quality).toBe(0);
});
});
});