few more tests

This commit is contained in:
Stuart Kolodner 2020-01-31 01:20:18 -05:00
parent 20b66ae5b7
commit cf0972f5bd
2 changed files with 28 additions and 8 deletions

View File

@ -11,6 +11,10 @@ class Shop {
this.items = items; this.items = items;
} }
isSulfuras(item) {
return item.name == 'Sulfuras, Hand of Ragnaros';
}
// Should really be method on Item, but I don't want to offend the goblins. // Should really be method on Item, but I don't want to offend the goblins.
isAgedBrie(item) { isAgedBrie(item) {
return item.name.startsWith('Aged Brie'); return item.name.startsWith('Aged Brie');
@ -28,22 +32,23 @@ class Shop {
updateQuality() { updateQuality() {
for (let item of this.items) { for (let item of this.items) {
if (item.name == 'Sulfuras, Hand of Ragnaros') {
continue;
}
let qualityChange = 0; let qualityChange = 0;
if(this.isAgedBrie(item)) { let sellInChange = -1;
if (this.isSulfuras(item)) {
sellInChange = 0;
} else if(this.isAgedBrie(item)) {
// Does conjured cheese quality increase twice as much? Assume not, but // Does conjured cheese quality increase twice as much? Assume not, but
// statement of problem doesn't say cheese quality doubles twice as fast after // statement of problem doesn't say cheese quality doubles twice as fast after
// the sell by date, but the code implements it that way. // the sell by date, but the code implements it that way.
qualityChange = item.sellIn <= 0 ? 2 : 1; qualityChange = item.sellIn <= 0 ? 2 : 1;
} else if (this.isConcertTicket(item)) { } else if (this.isConcertTicket(item)) {
if(item.sellIn <= 0) { if(item.sellIn <= 0) {
// This will set quality to 0
qualityChange = -1 * item.quality; qualityChange = -1 * item.quality;
} else if(item.sellIn < 6) { } else if(item.sellIn <= 5) {
qualityChange = 3; qualityChange = 3;
} else if(item.sellIn < 11) { } else if(item.sellIn <= 10) {
qualityChange = 2; qualityChange = 2;
} else { } else {
qualityChange = 1; qualityChange = 1;
@ -55,7 +60,7 @@ class Shop {
} }
} }
item.sellIn--; item.sellIn = item.sellIn + sellInChange;
item.quality = Math.min(Math.max(item.quality + qualityChange, 0), 50); item.quality = Math.min(Math.max(item.quality + qualityChange, 0), 50);
} }

View File

@ -16,11 +16,26 @@ describe("Gilded Rose", function() {
const items = gildedRose.updateQuality(); const items = gildedRose.updateQuality();
expect(items[0].quality).toBe(0); expect(items[0].quality).toBe(0);
}); });
it("foo quality should be 0", function() {
const gildedRose = new Shop([new Item("foo", 0, 1)]);
const items = gildedRose.updateQuality();
expect(items[0].quality).toBe(0);
});
it("foo quality should be 8", function() {
const gildedRose = new Shop([new Item("foo", 0, 10)]);
const items = gildedRose.updateQuality();
expect(items[0].quality).toBe(8);
});
it("foo quality should be 0", function() { it("foo quality should be 0", function() {
const gildedRose = new Shop([new Item("foo", 10, 10)]); const gildedRose = new Shop([new Item("foo", 10, 10)]);
const items = gildedRose.updateQuality(); const items = gildedRose.updateQuality();
expect(items[0].quality).toBe(9); expect(items[0].quality).toBe(9);
}); });
it("conjured quality should be 6", function() {
const gildedRose = new Shop([new Item("Conjured foo", 0, 10)]);
const items = gildedRose.updateQuality();
expect(items[0].quality).toBe(6);
});
it("conjured quality should be 8", function() { it("conjured quality should be 8", function() {
const gildedRose = new Shop([new Item("Conjured foo", 10, 10)]); const gildedRose = new Shop([new Item("Conjured foo", 10, 10)]);
const items = gildedRose.updateQuality(); const items = gildedRose.updateQuality();