diff --git a/TypeScript/app/gilded-rose.ts b/TypeScript/app/gilded-rose.ts index 81408a21..58d3a475 100644 --- a/TypeScript/app/gilded-rose.ts +++ b/TypeScript/app/gilded-rose.ts @@ -1,37 +1,37 @@ export class Item { - name: string; - sellIn: number; - quality: number; + name: string + sellIn: number + quality: number constructor(name, sellIn, quality) { - this.name = name; - this.sellIn = sellIn; - this.quality = quality; + this.name = name + this.sellIn = sellIn + this.quality = quality } } export class GildedRose { - items: Array; + items: Array constructor(items = [] as Array) { - this.items = items; + this.items = items } updateQuality() { - this.items = updateItems(this.items) - return this.items; + this.items = [...updateItems(this.items)] + return this.items } } -function updateItems(items: Item[]): Item[] { +function updateItems(items: readonly Readonly[]): readonly Readonly[] { return items .map(item => ({ ...item, quality: updateItemQuality(item) })) .map(item => ({ ...item, sellIn: updateItemSellIn(item) })) .map(item => ({ ...item, quality: updateExpiredItemQuality(item) })) } -function updateItemQuality({ name, quality, sellIn, ...rest }: Item): number { +function updateItemQuality({ name, quality, sellIn, ...rest }: Readonly): number { switch (name) { case 'Sulfuras, Hand of Ragnaros': return quality case 'Aged Brie': return incrementQuality({ quality }); @@ -46,14 +46,14 @@ function updateItemQuality({ name, quality, sellIn, ...rest }: Item): number { } } -function updateItemSellIn({ name, sellIn }: Item) { +function updateItemSellIn({ name, sellIn }: Readonly) { switch (name) { case 'Sulfuras, Hand of Ragnaros': return sellIn default: return sellIn - 1 } } -function updateExpiredItemQuality({ quality, name, sellIn }: Item): number { +function updateExpiredItemQuality({ quality, name, sellIn }: Readonly): number { const isExpired = sellIn < 0 if (!isExpired) return quality @@ -65,12 +65,12 @@ function updateExpiredItemQuality({ quality, name, sellIn }: Item): number { } } -function decrementQuality({ quality }: Pick): number { +function decrementQuality({ quality }: Readonly>): number { if (quality < 1) return quality return quality - 1 } -function incrementQuality({ quality }: Pick): number { +function incrementQuality({ quality }: Readonly>): number { if (quality >= 50) return quality return quality + 1 } \ No newline at end of file diff --git a/TypeScript/test/jest/gilded-rose.spec.ts b/TypeScript/test/jest/gilded-rose.spec.ts index 5790821c..0391b119 100644 --- a/TypeScript/test/jest/gilded-rose.spec.ts +++ b/TypeScript/test/jest/gilded-rose.spec.ts @@ -61,10 +61,11 @@ export class AcceptanceGildedRose { } } +const names = ['Aged Brie', 'Backstage passes to a TAFKAL80ETC concert', 'Sulfuras, Hand of Ragnaros', 'Other'] +const sellIns = [-1, 0, 1, 2, 5, 6, 7, 10, 11, 12, 13, 14, 15] +const qualities = [-1, 1, 2, 48, 49, 50, 51] + test('acceptance tests', () => { - const names = ['Aged Brie', 'Backstage passes to a TAFKAL80ETC concert', 'Sulfuras, Hand of Ragnaros', 'Other'] - const sellIns = [-1, 0, 1, 2, 5, 6, 7, 10, 11, 12, 13, 14, 15] - const qualities = [-1, 1, 2, 48, 49, 50, 51] for (const name of names) { for (const sellIn of sellIns) {