From 49c88bd039fe97b7cab55867bde972bea17541ba Mon Sep 17 00:00:00 2001 From: Brandon Walls Date: Thu, 22 Dec 2022 20:33:49 -0600 Subject: [PATCH] Add typescript solution & update test --- TypeScript/app/gilded-rose.ts | 82 ++++++++++++------------ TypeScript/test/jest/gilded-rose.spec.ts | 47 ++++++++++++-- 2 files changed, 84 insertions(+), 45 deletions(-) diff --git a/TypeScript/app/gilded-rose.ts b/TypeScript/app/gilded-rose.ts index db58d678..2317506a 100644 --- a/TypeScript/app/gilded-rose.ts +++ b/TypeScript/app/gilded-rose.ts @@ -3,7 +3,11 @@ export class Item { sellIn: number; quality: number; - constructor(name, sellIn, quality) { + constructor( + name: Item["name"], + sellIn: Item["sellIn"], + quality: Item["quality"] + ) { this.name = name; this.sellIn = sellIn; this.quality = quality; @@ -19,49 +23,47 @@ export class GildedRose { updateQuality() { for (let i = 0; i < this.items.length; i++) { - if (this.items[i].name != 'Aged Brie' && this.items[i].name != 'Backstage passes to a TAFKAL80ETC concert') { - if (this.items[i].quality > 0) { - if (this.items[i].name != 'Sulfuras, Hand of Ragnaros') { - this.items[i].quality = this.items[i].quality - 1 - } + const itemName = this.items[i].name; + let itemQuality = this.items[i].quality; + let itemSellin = this.items[i].sellIn; + + if (itemName.includes("Sulfuras")) { + continue; + } else { + itemSellin -= 1; + } + + if (itemName.includes("Aged Brie")) { + itemQuality++; + } else if (itemName.includes("Backstage passes")) { + if (itemSellin < 11) { + itemQuality = itemQuality + 2; + } else if (itemSellin < 6) { + itemQuality = itemQuality + 3; + } else if (itemSellin < 0) { + itemQuality = 0; + } else { + itemQuality++; + } + } else if (itemName.includes("Conjured")) { + if (itemQuality > 0) { + itemQuality = itemQuality - 2; + } + if (itemSellin < 0) { + itemQuality = itemQuality - itemQuality * 2; } } else { - if (this.items[i].quality < 50) { - this.items[i].quality = this.items[i].quality + 1 - if (this.items[i].name == 'Backstage passes to a TAFKAL80ETC concert') { - if (this.items[i].sellIn < 11) { - if (this.items[i].quality < 50) { - this.items[i].quality = this.items[i].quality + 1 - } - } - if (this.items[i].sellIn < 6) { - if (this.items[i].quality < 50) { - this.items[i].quality = this.items[i].quality + 1 - } - } - } - } - } - if (this.items[i].name != 'Sulfuras, Hand of Ragnaros') { - this.items[i].sellIn = this.items[i].sellIn - 1; - } - if (this.items[i].sellIn < 0) { - if (this.items[i].name != 'Aged Brie') { - if (this.items[i].name != 'Backstage passes to a TAFKAL80ETC concert') { - if (this.items[i].quality > 0) { - if (this.items[i].name != 'Sulfuras, Hand of Ragnaros') { - this.items[i].quality = this.items[i].quality - 1 - } - } - } else { - this.items[i].quality = this.items[i].quality - this.items[i].quality - } - } else { - if (this.items[i].quality < 50) { - this.items[i].quality = this.items[i].quality + 1 - } + if (itemQuality > 0) { + itemQuality = itemQuality - 1; + } + + if (itemSellin < 0) { + itemQuality = 0; } } + + this.items[i].quality = itemQuality > 50 ? 50 : itemQuality; + this.items[i].sellIn = itemSellin; } return this.items; diff --git a/TypeScript/test/jest/gilded-rose.spec.ts b/TypeScript/test/jest/gilded-rose.spec.ts index 65330750..827ae041 100644 --- a/TypeScript/test/jest/gilded-rose.spec.ts +++ b/TypeScript/test/jest/gilded-rose.spec.ts @@ -1,9 +1,46 @@ -import { Item, GildedRose } from '@/gilded-rose'; +import { Item, GildedRose } from "@/gilded-rose"; -describe('Gilded Rose', () => { - it('should foo', () => { - const gildedRose = new GildedRose([new Item('foo', 0, 0)]); +describe("Gilded Rose", () => { + let gildedRose: GildedRose; + + beforeEach(() => { + gildedRose = new GildedRose([ + new Item("foo", 0, 0), + new Item("Conjured item", 10, 8), + new Item("Sulfuras item", 0, 80), + new Item("Aged Brie item ", 10, 33), + new Item("Aged Brie item", 0, 50), + new Item("Backstage passes item", 8, 30), + ]); + }); + + it("Should foo", () => { const items = gildedRose.updateQuality(); - expect(items[0].name).toBe('fixme'); + expect(items[0].name).toBe("foo"); + }); + + it("The Quality of Backstage passes item increases by 2 when there are 10 days or less", () => { + const items = gildedRose.updateQuality(); + expect(items[5].quality).toBe(32); + }); + + it("The quality of Conjured item should be degraded by twice more than normal items", () => { + const items = gildedRose.updateQuality(); + expect(items[1].quality).toBe(6); + }); + + it("Aged Brie item actually increases in Quality the older it gets", () => { + const items = gildedRose.updateQuality(); + expect(items[3].quality).toBe(34); + }); + + it("The quality of Sulfuras item should remain unchanged", () => { + const items = gildedRose.updateQuality(); + expect(items[2].quality).toBe(80); + }); + + it("The Quality of an item is never more than 50", () => { + const items = gildedRose.updateQuality(); + expect(items[4].quality).toBe(50); }); });