Skip to content

Instantly share code, notes, and snippets.

@franreyes
Last active September 15, 2022 11:38
Show Gist options
  • Save franreyes/3110096b92e75c2267937339ac8b1427 to your computer and use it in GitHub Desktop.
Save franreyes/3110096b92e75c2267937339ac8b1427 to your computer and use it in GitHub Desktop.
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