Last active
September 15, 2022 11:38
-
-
Save franreyes/3110096b92e75c2267937339ac8b1427 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import {Shop} from '../src/Shop'; | |
import {Item} from "../src/Item"; | |
describe('Gilded Rose', () => { | |
const MIN_QUALITY = 0; | |
const MAX_QUALITY = 50; | |
it("regular items' quality decreases every day", () => { | |
const item = regularItem(1, 3); | |
const shop = new Shop([item]); | |
shop.update(); | |
expect(item.quality).toEqual(2); | |
expect(item.sellIn).toEqual(0); | |
}); | |
it("expired regular items' quality decreases twice as fast once sellIn has passed", () => { | |
const item = regularItem(0, 3); | |
const shop = new Shop([item]); | |
shop.update(); | |
expect(item.quality).toEqual(1); | |
expect(item.sellIn).toEqual(-1); | |
}); | |
it("regular items' quality never decreases below the minimum quality", () => { | |
const item = regularItem(5, 0); | |
const shop = new Shop([item]); | |
shop.update(); | |
expect(item.quality).toEqual(MIN_QUALITY); | |
expect(item.sellIn).toEqual(4); | |
}); | |
it("expired regular items' quality never decreases below the minimum quality", () => { | |
const item = regularItem(0, 1); | |
const shop = new Shop([item]); | |
shop.update(); | |
expect(item.quality).toEqual(MIN_QUALITY); | |
expect(item.sellIn).toEqual(-1); | |
}); | |
it("aged brie increases quality by 1", () => { | |
const item = agedBrie(5, 8); | |
const shop = new Shop([item]); | |
shop.update(); | |
expect(item.quality).toEqual(9); | |
expect(item.sellIn).toEqual(4); | |
}); | |
it("aged brie quality never increases over the maximun quality", () => { | |
const item = agedBrie(5, MAX_QUALITY); | |
const shop = new Shop([item]); | |
shop.update(); | |
expect(item.quality).toEqual(MAX_QUALITY); | |
expect(item.sellIn).toEqual(4); | |
}); | |
it("expired aged brie quality never increases over the maximun quality", () => { | |
const item = agedBrie(0, 49); | |
const shop = new Shop([item]); | |
shop.update(); | |
expect(item.quality).toEqual(MAX_QUALITY); | |
expect(item.sellIn).toEqual(-1); | |
}); | |
it("expired aged brie increases quality by 2", () => { | |
const item = agedBrie(0, 8); | |
const shop = new Shop([item]); | |
shop.update(); | |
expect(item.quality).toEqual(10); | |
expect(item.sellIn).toEqual(-1); | |
}); | |
it("sulfuras never changes", () => { | |
const item = sulfuras(1); | |
const shop = new Shop([item]); | |
shop.update(); | |
expect(item.quality).toEqual(80); | |
expect(item.sellIn).toEqual(1); | |
}); | |
it("expired sulfuras never change", () => { | |
const item = sulfuras(-1); | |
const shop = new Shop([item]); | |
shop.update(); | |
expect(item.quality).toEqual(80); | |
expect(item.sellIn).toEqual(-1); | |
}); | |
it("backstage increase quality by 1 when sellIn is greater than 10", () => { | |
const item = backstagePasses(11, 6); | |
const shop = new Shop([item]); | |
shop.update(); | |
expect(item.quality).toEqual(7); | |
expect(item.sellIn).toEqual(10); | |
}); | |
it("backstage increase quality by 2 when sellIn is inside [10, 5)", () => { | |
const item1 = backstagePasses(10, 6); | |
const item2 = backstagePasses(6, 20); | |
const shop = new Shop([item1, item2]); | |
shop.update(); | |
expect(item1.quality).toEqual(8); | |
expect(item2.quality).toEqual(22); | |
}); | |
it("backstage increase quality by 3 when sellIn is inside [5, 0)", () => { | |
const item1 = backstagePasses(5, 6); | |
const item2 = backstagePasses(1, 20); | |
const shop = new Shop([item1, item2]); | |
shop.update(); | |
expect(item1.quality).toEqual(9); | |
expect(item1.sellIn).toEqual(4); | |
expect(item2.quality).toEqual(23); | |
expect(item2.sellIn).toEqual(0); | |
}); | |
it("backstage quality drops to 0 after the concert", () => { | |
const item = backstagePasses(0, 6); | |
const shop = new Shop([item]); | |
shop.update(); | |
expect(item.quality).toEqual(0); | |
expect(item.sellIn).toEqual(-1); | |
}); | |
it("backstage quality never increases over the maximun quality when increasing by 1", () => { | |
const item = backstagePasses(11, MAX_QUALITY); | |
const shop = new Shop([item]); | |
shop.update(); | |
expect(item.quality).toEqual(MAX_QUALITY); | |
expect(item.sellIn).toEqual(10); | |
}); | |
it("backstage quality never increases over the maximun quality when increasing by 2", () => { | |
const item = backstagePasses(8, 49); | |
const shop = new Shop([item]); | |
shop.update(); | |
expect(item.quality).toEqual(MAX_QUALITY); | |
expect(item.sellIn).toEqual(7); | |
}); | |
it("backstage quality never increases over the maximun quality when increasing by 3", () => { | |
const item = backstagePasses(4, 48); | |
const shop = new Shop([item]); | |
shop.update(); | |
expect(item.quality).toEqual(MAX_QUALITY); | |
expect(item.sellIn).toEqual(3); | |
}); | |
function regularItem(sellIn: number, quality: number) { | |
return new Item("foo", sellIn, quality); | |
} | |
function agedBrie(sellIn: number, quality: number) { | |
return new Item("Aged Brie", sellIn, quality); | |
} | |
function sulfuras(sellIn: number) { | |
return new Item("Sulfuras, Hand of Ragnaros", sellIn, 80); | |
} | |
function backstagePasses(sellIn: number, quality: number) { | |
return new Item("Backstage passes to a TAFKAL80ETC concert", sellIn, quality) | |
} | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment