mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-15 22:41:30 +00:00
implement conjured item
This commit is contained in:
parent
e19e99800c
commit
bbeaef456a
@ -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;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@ -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);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Loading…
Reference in New Issue
Block a user