From eaa9af0f9b452798784006140cb941ea203d3749 Mon Sep 17 00:00:00 2001 From: Sandrine Mang'ong'o Malanga Date: Wed, 18 Oct 2023 15:53:01 +0300 Subject: [PATCH] changes --- TypeScript/app/gilded-rose.ts | 180 ++++++++++++++--------- TypeScript/test/jest/gilded-rose.spec.ts | 77 +++++++++- 2 files changed, 180 insertions(+), 77 deletions(-) diff --git a/TypeScript/app/gilded-rose.ts b/TypeScript/app/gilded-rose.ts index 82ef130e..6a5ed47c 100644 --- a/TypeScript/app/gilded-rose.ts +++ b/TypeScript/app/gilded-rose.ts @@ -1,5 +1,3 @@ -import { log } from "console"; - export class Item { name: string; sellIn: number; @@ -19,81 +17,117 @@ export class GildedRose { this.items = items; } - updateQuality() { - for (let i = 0; i < this.items.length; i++) { - if (this.items[i].name == 'Elixir of the Mongoose'){ - this.items[i].sellIn = this.items[i].sellIn - 1; - } - - if (this.items[i].name == '+5 Dexterity Vest'){ - this.items[i].sellIn = this.items[i].sellIn -1; - } - // Check if item name is "Conjured Mana Cake" - if (this.items[i].name == 'Conjured Mana Cake') { - console.log('Conjured Mana Cake'); - - this.items[i].quality = this.items[i].quality - 2; - this.items[i].sellIn = this.items[i].sellIn - 1; - } - - // ITEM NAME CHECK - if (this.items[i].name != 'Aged Brie' && this.items[i].name != 'Backstage passes to a TAFKAL80ETC concert') { - if (this.items[i].quality > 0) { - // Check if item name is not "Sulfuras, Hand of Ragnaros" & "Conjured Mana Cake" - if (this.items[i].name != 'Sulfuras, Hand of Ragnaros' && this.items[i].name != 'Conjured Mana Cake') { - // Decrease item quality by 1 - this.items[i].quality = this.items[i].quality - 1 - } - } - } else { - // QUALITY CHECK - if (this.items[i].quality < 50) { - // Increase quality by 1 for 'Aged Brie' - if (this.items[i].name == 'Aged Brie') { - this.items[i].quality = this.items[i].quality + 1; - } else { - - // If sellIn date for tickets is less than 11 & quality is less than 50 increase quality - if (this.items[i].name == 'Backstage passes to a TAFKAL80ETC concert') { - if (this.items[i].sellIn < 6) { - this.items[i].quality = this.items[i].quality + 3 - } else if (this.items[i].sellIn < 11) { - this.items[i].quality = this.items[i].quality + 2 - } - if (this.items[i].quality > 50){ - this.items[i].quality = 50; - } - } - } - } - - 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 - } - } - } - } - + updateQuality(){ + for (let i = 0; i < this.items.length; i++){ + this.items[i]= this.updateItemQuality(this.items[i]); } - // console.log(this.items) return this.items; } + private updateItemQuality(item: Item){ + let nItem; + if(item.name == 'Aged Brie'){ + nItem = this.updateAgedBrieQuality(item); + } else if (item.name == 'Backstage passes to a TAFKAL80ETC concert'){ + nItem = this.updateBackstagepassesQuality(item); + } else if (item.name == 'Conjured Mana Cake'){ + nItem = this.updateConjuredManaCakeQuality(item) + }else if (item.name == 'Elixir of the Mongoose'){ + nItem = this.updateElixirOfTheMongooseQuality(item); + } else if (item.name == '+5 Dexterity Vest') { + nItem = this.updatePlus5DexterityVestQuality(item); + }else if(item.name ! = 'Sulfuras, Hand of Ragnaros'){ + nItem = this.updateStandardItemQuality(item); + } + + return nItem; + + } + public updateAgedBrieQuality(item: Item){ + const newItem = new Item(item.name, item.sellIn, item.quality); + if (newItem.quality < 50){ + newItem.quality++ + } + if(newItem.sellIn < 0 && newItem.quality < 50){ + newItem.quality++ + } + newItem.sellIn--; + return this.qualityCeilingCheck(newItem); + } + private qualityCeilingCheck(item: Item) { + if (item.quality > 50) { + item.quality = 50; + } + return item; + } + + public updateBackstagepassesQuality(item: Item) { + const newItem = new Item(item.name, item.sellIn, item.quality); + if (newItem.sellIn <= 0) { + newItem.quality = 0; + } else if (newItem.sellIn <= 5) { + newItem.quality += 3; + } else if (newItem.sellIn <= 10) { + newItem.quality += 2; + } else if (newItem.sellIn > 10){ + newItem.quality ++; + } + if (newItem.quality > 50) { + newItem.quality = 50; + } + + newItem.sellIn--; + return this.qualityCeilingCheck(newItem); + } + + public updateConjuredManaCakeQuality(item: Item){ + const newItem = new Item(item.name, item.sellIn, item.quality); + if (newItem.quality > 0){ + newItem.quality -= 2; + } + if(newItem.sellIn < 0 && newItem.quality > 0){ + newItem.quality -= 2; + } + newItem.sellIn--; + return this.qualityCeilingCheck(newItem); + } + public updateElixirOfTheMongooseQuality (item: Item){ + const newItem = new Item(item.name, item.sellIn, item.quality); + if(newItem.quality > 0) { + newItem.quality--; + } + if (newItem.sellIn < 0 && newItem.quality > 0){ + newItem.quality-- + } + newItem.sellIn--; + return this.qualityCeilingCheck(newItem); + } + + public updatePlus5DexterityVestQuality (item:Item){ + const newItem = new Item(item.name, item.sellIn, item.quality); + if (newItem.quality > 0){ + newItem.quality--; + } + if (newItem.sellIn < 0 && newItem.quality > 0){ + newItem.quality--; + } + newItem.sellIn--; + + return this.qualityCeilingCheck(newItem); + } + + public updateStandardItemQuality(item: Item){ + const newItem = new Item(item.name, item.sellIn, item.quality); + if (newItem.name !== 'Sulfuras, Hand of Ragnaros') { + if (newItem.quality > 0) { + newItem.quality--; + } + } + return newItem; } +} + + + diff --git a/TypeScript/test/jest/gilded-rose.spec.ts b/TypeScript/test/jest/gilded-rose.spec.ts index 65330750..15799970 100644 --- a/TypeScript/test/jest/gilded-rose.spec.ts +++ b/TypeScript/test/jest/gilded-rose.spec.ts @@ -1,9 +1,78 @@ import { Item, GildedRose } from '@/gilded-rose'; describe('Gilded Rose', () => { - it('should foo', () => { - const gildedRose = new GildedRose([new Item('foo', 0, 0)]); - const items = gildedRose.updateQuality(); - expect(items[0].name).toBe('fixme'); + const gildedRose = new GildedRose([]); + it('updateStandardItemQuality should update quality and sell in accordingly', () => { + const oldItem = new Item("Sulfuras, Hand of Ragnaros", 0, 80); + const updatedItem = gildedRose.updateStandardItemQuality(oldItem); + expect(updatedItem.quality).toEqual(80); + expect(updatedItem.sellIn).toEqual(0); + expect(oldItem.quality).toEqual(updatedItem.quality); + + }); + + it('updateStandardItemQuality should update quality and sell in accordingly', () => { + const oldItem = new Item("Sulfuras, Hand of Ragnaros", -1, 80); + const updatedItem = gildedRose.updateStandardItemQuality(oldItem); + expect(updatedItem.quality).toEqual(80); + expect(updatedItem.sellIn).toEqual(-1); + expect(oldItem.quality).toEqual(updatedItem.quality); + + }); + + it('updatePlus5DexterityVestQuality should update quality and sell in accordingly', () => { + const oldItem = new Item("+5 Dexterity Vest", 10, 20); + const updatedItem = gildedRose.updatePlus5DexterityVestQuality(oldItem); + expect(updatedItem.quality).toEqual(19); + expect(updatedItem.sellIn).toEqual(9); + expect(oldItem).not.toEqual(updatedItem); + }); + + it('updateElixirOfTheMongooseQuality should update quality and sell in accordingly', () => { + const oldItem = new Item("Elixir of the Mongoose", 5, 7); + const updatedItem = gildedRose.updateElixirOfTheMongooseQuality(oldItem); + expect(updatedItem.quality).toEqual(6); + expect(updatedItem.sellIn).toEqual(4); + expect(oldItem).not.toEqual(updatedItem); + }); + + it('updateBackstagepassesQuality should update quality and sell in accordingly when selling is greater than 10', () => { + const oldItem = new Item("Backstage passes to a TAFKAL80ETC concert", 15, 20); + const updatedItem = gildedRose.updateBackstagepassesQuality(oldItem); + expect(updatedItem.quality).toEqual(21); + expect(updatedItem.sellIn).toEqual(14); + expect(oldItem).not.toEqual(updatedItem); + }); + + it('updateConjuredManaCakeQuality should update quality and sell in accordingly', () => { + const oldItem = new Item("Conjured Mana Cake", 3, 6); + const updatedItem = gildedRose.updateConjuredManaCakeQuality(oldItem); + expect(updatedItem.quality).toEqual(4); + expect(updatedItem.sellIn).toEqual(2); + expect(oldItem).not.toEqual(updatedItem); + }); + + it('updateBackstagepassesQuality should update quality and sell in accordingly when selling is less than 5', () => { + const oldItem = new Item("Backstage passes to a TAFKAL80ETC concert", 5, 49); + const updatedItem = gildedRose.updateBackstagepassesQuality(oldItem); + expect(updatedItem.quality).toEqual(50); + expect(updatedItem.sellIn).toEqual(4); + expect(oldItem).not.toEqual(updatedItem); + }); + + it('updateBackstagepassesQuality should update quality and sell in accordingly when selling is less than 5', () => { + const oldItem = new Item("Backstage passes to a TAFKAL80ETC concert", 5, 49); + const updatedItem = gildedRose.updateBackstagepassesQuality(oldItem); + expect(updatedItem.quality).toEqual(50); + expect(updatedItem.sellIn).toEqual(4); + expect(oldItem).not.toEqual(updatedItem); + }); + + it('updateAgedBrieQuality should update quality and sell in accordingly', () => { + const oldItem = new Item("Aged Brie", 2, 0); + const updatedItem = gildedRose.updateAgedBrieQuality(oldItem); + expect(updatedItem.quality).toEqual(1); + expect(updatedItem.sellIn).toEqual(1); + expect(oldItem).not.toEqual(updatedItem); }); });