mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-18 07:51:29 +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 =>
|
private _isBackstagePass = (name: string): boolean =>
|
||||||
name === "Backstage passes to a TAFKAL80ETC concert";
|
name === "Backstage passes to a TAFKAL80ETC concert";
|
||||||
|
|
||||||
|
private _isConjured = (name: string): boolean => name.includes("Conjured");
|
||||||
|
|
||||||
private _decayGeneralItem = (item: Item): Item => {
|
private _decayGeneralItem = (item: Item): Item => {
|
||||||
const qualityDecay = item.sellIn > 0 ? 1 : 2;
|
const newItem = {
|
||||||
return {
|
|
||||||
name: item.name,
|
name: item.name,
|
||||||
quality: item.quality > 0 ? item.quality - qualityDecay : 0,
|
quality: item.quality - this._getDecayAmount(item),
|
||||||
sellIn: item.sellIn - 1,
|
sellIn: item.sellIn - 1,
|
||||||
};
|
};
|
||||||
|
return this._applyQualityLimitation(newItem);
|
||||||
};
|
};
|
||||||
|
|
||||||
private _decayLegendaryItem = (item: Item): Item => {
|
private _decayLegendaryItem = (item: Item): Item => {
|
||||||
@ -82,11 +84,25 @@ export class GildedRose {
|
|||||||
};
|
};
|
||||||
|
|
||||||
private _applyQualityLimitation = (item: Item): Item => {
|
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 {
|
return {
|
||||||
name: item.name,
|
name: item.name,
|
||||||
quality:
|
quality: newQuality,
|
||||||
item.quality > this.QUALITY_LIM ? this.QUALITY_LIM : item.quality,
|
|
||||||
sellIn: item.sellIn,
|
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);
|
new Item("Sulfuras, Hand of Ragnaros", sellIn, quality);
|
||||||
const backstagePassItem = (sellIn: number, quality: number) =>
|
const backstagePassItem = (sellIn: number, quality: number) =>
|
||||||
new Item("Backstage passes to a TAFKAL80ETC concert", sellIn, quality);
|
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", () => {
|
describe("Gilded Rose", () => {
|
||||||
it("should degrade quality", () => {
|
it("should degrade quality", () => {
|
||||||
@ -102,4 +104,25 @@ describe("Gilded Rose", () => {
|
|||||||
expect(items[0].quality).toBe(50);
|
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