From 157a646abb3dbf77867ba1b88e5b994ca5b0d485 Mon Sep 17 00:00:00 2001 From: Alexandra Stroiu Date: Fri, 11 Apr 2025 19:14:55 +0300 Subject: [PATCH 1/4] Fix tests in the gilded-rose.spec.ts file Fix the two tests for the updateQuality function in the gilded-rose.spec.ts file. Signed-off-by: Alexandra Stroiu --- test/jest/gilded-rose.spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/jest/gilded-rose.spec.ts b/test/jest/gilded-rose.spec.ts index 613639f..fb71fd5 100644 --- a/test/jest/gilded-rose.spec.ts +++ b/test/jest/gilded-rose.spec.ts @@ -9,7 +9,7 @@ describe('Gilded Rose', () => { const items = gildedRose.updateQuality(); // Assert - expect(items[0].name).toBe('bar'); + expect(items[0].name).toBe('foo'); }); it('sword quality drops by 1', () => { @@ -20,6 +20,6 @@ describe('Gilded Rose', () => { const items = gildedRose.updateQuality(); // Assert - expect(items[0].quality).toBe(1); + expect(items[0].quality).toBe(0); }) }); From 1229de8f796e582fa36da0b4bb504db7260901ba Mon Sep 17 00:00:00 2001 From: Alexandra Stroiu Date: Fri, 11 Apr 2025 19:31:47 +0300 Subject: [PATCH 2/4] Add new tests in the gilded-rose.spec.ts file - Ensure the quality of an item is never negative. - Ensure the quality of Aged Brie or Backstage Passes never exceeds 50. - Verify that the quality increases for Aged Brie and Backstage Passes as the SellIn approaches. - Verify that the quality for Backstage Passes drops to 0 after the concert. - Ensure the quality of Sulfuras is 80 and never alters. - Ensure SellIn value for Sulfuras never alters. - Ensure SellIn value decreases by 1 for all items except Sulfuras. - Add two more test cases to validate that the quality of Backstage Passes increases. - Ensure the quality is not above 50 using a single test. - Add test to verify quality degrading twice as fast once the SellIn date has passed. - Add tests for Conjured items. - Verify SellIn and quality values in Backstage Passes test. Signed-off-by: Alexandra Stroiu --- test/jest/gilded-rose.spec.ts | 121 ++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) diff --git a/test/jest/gilded-rose.spec.ts b/test/jest/gilded-rose.spec.ts index fb71fd5..9b5d728 100644 --- a/test/jest/gilded-rose.spec.ts +++ b/test/jest/gilded-rose.spec.ts @@ -12,6 +12,41 @@ describe('Gilded Rose', () => { expect(items[0].name).toBe('foo'); }); + it('Sulfuras quality is 80 and it never alters', () => { + // Arrange + const gildedRose = new GildedRose([new Item('Sulfuras', 1, 80)]); + + // Act + const items = gildedRose.updateQuality(); + + // Assert + expect(items[0].quality).toBe(80); + }) + + it('Sulfuras SellIn date never alters', () => { + // Arrange + const gildedRose = new GildedRose([new Item('Sulfuras', 8, 80)]); + + // Act + const items = gildedRose.updateQuality(); + + // Assert + expect(items[0].sellIn).toBe(8); + }) + + it('SellIn date for items except Sulfuras decreases by 1', () => { + // Arrange + const gildedRose = new GildedRose([new Item('Sword', 0, 80), new Item('Aged Brie', 4, 3), new Item('Backstage passes to a TAFKAL80ETC concert', 5, 5)]); + + // Act + const items = gildedRose.updateQuality(); + + // Assert + expect(items[0].sellIn).toBe(-1); + expect(items[1].sellIn).toBe(3); + expect(items[2].sellIn).toBe(4); + }) + it('sword quality drops by 1', () => { // Arrange const gildedRose = new GildedRose([new Item('Sword', 1, 1)]); @@ -22,4 +57,90 @@ describe('Gilded Rose', () => { // Assert expect(items[0].quality).toBe(0); }) + + it('Aged Brie quality increases', () => { + + const gildedRose = new GildedRose([new Item('Aged Brie', 1, 0)]); + + const items = gildedRose.updateQuality(); + + expect(items[0].quality).toBe(1); + }) + + it('Backstage Pass quality increases by 2 when there are 10 days or less', () => { + + const gildedRose = new GildedRose([new Item('Backstage passes to a TAFKAL80ETC concert', 10, 5), new Item('Backstage passes to a TAFKAL80ETC concert', 7, 5)]); + + const items = gildedRose.updateQuality(); + + expect(items[0].quality).toBe(7); + expect(items[1].quality).toBe(7); + }) + + it('Backstage Pass quality increases by 3 when there are 5 days or less', () => { + + const gildedRose = new GildedRose([new Item('Backstage passes to a TAFKAL80ETC concert', 5, 5), new Item('Backstage passes to a TAFKAL80ETC concert', 3, 5)]); + + const items = gildedRose.updateQuality(); + + expect(items[0].quality).toBe(8); + expect(items[1].quality).toBe(8); + }) + + it('Backstage Pass item quality drops to 0 after the concert', () => { + + const gildedRose = new GildedRose([new Item('Backstage passes to a TAFKAL80ETC concert', 0, 5)]); + + const items = gildedRose.updateQuality(); + + expect(items[0].sellIn).toBe(-1); + expect(items[0].quality).toBe(0); + }) + + it('quality is never negative', () => { + + const gildedRose = new GildedRose([new Item('Sword', 1, 0), new Item("Conjured Mana Cake", -3, 0)]); + + const items = gildedRose.updateQuality(); + + expect(items[0].quality).toBe(0); + expect(items[1].quality).toBe(0); + }) + + it('Aged Brie quality and Backstage Pass quality are never more than 50', () => { + + const gildedRose = new GildedRose([new Item('Aged Brie', 1, 50), new Item('Backstage passes to a TAFKAL80ETC concert', 1, 50)]); + + const items = gildedRose.updateQuality(); + + expect(items[0].quality).toBe(50); + expect(items[1].quality).toBe(50); + }) + + it('Once the sell by date has passed, Quality degrades twice as fast.', () => { + + const gildedRose = new GildedRose([new Item('Aged Brie', -2, 6), new Item('Backstage passes to a TAFKAL80ETC concert', 0, 50), new Item('Sword', 0, 2), new Item("Sword", 0, 3), new Item("Sword", -1, 1)]); + + const items = gildedRose.updateQuality(); + + expect(items[0].quality).toBe(8); + expect(items[1].quality).toBe(0); + expect(items[2].quality).toBe(0); + expect(items[3].quality).toBe(1); + expect(items[4].quality).toBe(0); + }) + + it('"Conjured" items degrade in Quality twice as fast as normal items.', () => { + const gildedRose = new GildedRose([new Item("Conjured Mana Cake", 3, 6), new Item("Conjured Mana Cake", 0, 4), new Item("Conjured Mana Cake", -3, 3)]); + + const items = gildedRose.updateQuality(); + + expect(items[0].sellIn).toBe(2); + expect(items[0].quality).toBe(4); + expect(items[2].sellIn).toBe(-1); + expect(items[2].quality).toBe(0); + expect(items[3].sellIn).toBe(-4); + expect(items[3].quality).toBe(0); + }) + }); From 04a6437b70c0406de1e346a7d3a66dffc5e6d9a9 Mon Sep 17 00:00:00 2001 From: Alexandra Stroiu Date: Fri, 11 Apr 2025 21:22:26 +0300 Subject: [PATCH 3/4] Format code in the gilded-rose.spec.ts file Format code in the gilded-rose.spec.ts file. Signed-off-by: Alexandra Stroiu --- test/jest/gilded-rose.spec.ts | 148 +++++++++++++++++++--------------- 1 file changed, 84 insertions(+), 64 deletions(-) diff --git a/test/jest/gilded-rose.spec.ts b/test/jest/gilded-rose.spec.ts index 9b5d728..71e1a1b 100644 --- a/test/jest/gilded-rose.spec.ts +++ b/test/jest/gilded-rose.spec.ts @@ -1,42 +1,46 @@ -import { Item, GildedRose } from '@/gilded-rose'; +import { Item, GildedRose } from "@/gilded-rose"; -describe('Gilded Rose', () => { - it('should foo', () => { - // Arrange - const gildedRose = new GildedRose([new Item('foo', 0, 0)]); +describe("Gilded Rose", () => { + it("should foo", () => { + // Arrange + const gildedRose = new GildedRose([new Item("foo", 0, 0)]); - // Act - const items = gildedRose.updateQuality(); + // Act + const items = gildedRose.updateQuality(); - // Assert - expect(items[0].name).toBe('foo'); - }); + // Assert + expect(items[0].name).toBe("foo"); + }); - it('Sulfuras quality is 80 and it never alters', () => { + it("Sulfuras quality is 80 and it never alters", () => { // Arrange - const gildedRose = new GildedRose([new Item('Sulfuras', 1, 80)]); + const gildedRose = new GildedRose([new Item("Sulfuras", 1, 80)]); // Act const items = gildedRose.updateQuality(); // Assert expect(items[0].quality).toBe(80); - }) + }); - it('Sulfuras SellIn date never alters', () => { + it("Sulfuras SellIn date never alters", () => { // Arrange - const gildedRose = new GildedRose([new Item('Sulfuras', 8, 80)]); + const gildedRose = new GildedRose([new Item("Sulfuras", 8, 80)]); // Act const items = gildedRose.updateQuality(); // Assert expect(items[0].sellIn).toBe(8); - }) + }); - it('SellIn date for items except Sulfuras decreases by 1', () => { + it("SellIn date for items except Sulfuras decreases by 1", () => { // Arrange - const gildedRose = new GildedRose([new Item('Sword', 0, 80), new Item('Aged Brie', 4, 3), new Item('Backstage passes to a TAFKAL80ETC concert', 5, 5)]); + const gildedRose = new GildedRose([ + new Item("Sword", 0, 80), + new Item("Aged Brie", 4, 3), + new Item("Backstage passes to a TAFKAL80ETC concert", 5, 5), + ]); // Act const items = gildedRose.updateQuality(); @@ -45,81 +49,94 @@ describe('Gilded Rose', () => { expect(items[0].sellIn).toBe(-1); expect(items[1].sellIn).toBe(3); expect(items[2].sellIn).toBe(4); - }) - - it('sword quality drops by 1', () => { - // Arrange - const gildedRose = new GildedRose([new Item('Sword', 1, 1)]); + }); - // Act - const items = gildedRose.updateQuality(); + it("sword quality drops by 1", () => { + // Arrange + const gildedRose = new GildedRose([new Item("Sword", 1, 1)]); - // Assert - expect(items[0].quality).toBe(0); - }) + // Act + const items = gildedRose.updateQuality(); - it('Aged Brie quality increases', () => { + // Assert + expect(items[0].quality).toBe(0); + }); - const gildedRose = new GildedRose([new Item('Aged Brie', 1, 0)]); + it("Aged Brie quality increases", () => { + const gildedRose = new GildedRose([new Item("Aged Brie", 1, 0)]); const items = gildedRose.updateQuality(); expect(items[0].quality).toBe(1); - }) - - it('Backstage Pass quality increases by 2 when there are 10 days or less', () => { + }); - const gildedRose = new GildedRose([new Item('Backstage passes to a TAFKAL80ETC concert', 10, 5), new Item('Backstage passes to a TAFKAL80ETC concert', 7, 5)]); + it("Backstage Pass quality increases by 2 when there are 10 days or less", () => { + const gildedRose = new GildedRose([ + new Item("Backstage passes to a TAFKAL80ETC concert", 10, 5), + new Item("Backstage passes to a TAFKAL80ETC concert", 7, 5), + ]); const items = gildedRose.updateQuality(); expect(items[0].quality).toBe(7); expect(items[1].quality).toBe(7); - }) + }); - it('Backstage Pass quality increases by 3 when there are 5 days or less', () => { - - const gildedRose = new GildedRose([new Item('Backstage passes to a TAFKAL80ETC concert', 5, 5), new Item('Backstage passes to a TAFKAL80ETC concert', 3, 5)]); + it("Backstage Pass quality increases by 3 when there are 5 days or less", () => { + const gildedRose = new GildedRose([ + new Item("Backstage passes to a TAFKAL80ETC concert", 5, 5), + new Item("Backstage passes to a TAFKAL80ETC concert", 3, 5), + ]); const items = gildedRose.updateQuality(); expect(items[0].quality).toBe(8); expect(items[1].quality).toBe(8); - }) - - it('Backstage Pass item quality drops to 0 after the concert', () => { + }); - const gildedRose = new GildedRose([new Item('Backstage passes to a TAFKAL80ETC concert', 0, 5)]); + it("Backstage Pass item quality drops to 0 after the concert", () => { + const gildedRose = new GildedRose([ + new Item("Backstage passes to a TAFKAL80ETC concert", 0, 5), + ]); const items = gildedRose.updateQuality(); expect(items[0].sellIn).toBe(-1); expect(items[0].quality).toBe(0); - }) - - it('quality is never negative', () => { - - const gildedRose = new GildedRose([new Item('Sword', 1, 0), new Item("Conjured Mana Cake", -3, 0)]); - - const items = gildedRose.updateQuality(); + }); - expect(items[0].quality).toBe(0); - expect(items[1].quality).toBe(0); - }) + it("quality is never negative", () => { + const gildedRose = new GildedRose([ + new Item("Sword", 1, 0), + new Item("Conjured Mana Cake", -3, 0), + ]); - it('Aged Brie quality and Backstage Pass quality are never more than 50', () => { + const items = gildedRose.updateQuality(); - const gildedRose = new GildedRose([new Item('Aged Brie', 1, 50), new Item('Backstage passes to a TAFKAL80ETC concert', 1, 50)]); + expect(items[0].quality).toBe(0); + expect(items[1].quality).toBe(0); + }); - const items = gildedRose.updateQuality(); + it("Aged Brie quality and Backstage Pass quality are never more than 50", () => { + const gildedRose = new GildedRose([ + new Item("Aged Brie", 1, 50), + new Item("Backstage passes to a TAFKAL80ETC concert", 1, 50), + ]); - expect(items[0].quality).toBe(50); - expect(items[1].quality).toBe(50); - }) + const items = gildedRose.updateQuality(); - it('Once the sell by date has passed, Quality degrades twice as fast.', () => { + expect(items[0].quality).toBe(50); + expect(items[1].quality).toBe(50); + }); - const gildedRose = new GildedRose([new Item('Aged Brie', -2, 6), new Item('Backstage passes to a TAFKAL80ETC concert', 0, 50), new Item('Sword', 0, 2), new Item("Sword", 0, 3), new Item("Sword", -1, 1)]); + it("Once the sell by date has passed, Quality degrades twice as fast.", () => { + const gildedRose = new GildedRose([ + new Item("Aged Brie", -2, 6), + new Item("Backstage passes to a TAFKAL80ETC concert", 0, 50), + new Item("Sword", 0, 2), + new Item("Sword", 0, 3), + new Item("Sword", -1, 1), + ]); const items = gildedRose.updateQuality(); @@ -128,10 +145,14 @@ describe('Gilded Rose', () => { expect(items[2].quality).toBe(0); expect(items[3].quality).toBe(1); expect(items[4].quality).toBe(0); - }) + }); it('"Conjured" items degrade in Quality twice as fast as normal items.', () => { - const gildedRose = new GildedRose([new Item("Conjured Mana Cake", 3, 6), new Item("Conjured Mana Cake", 0, 4), new Item("Conjured Mana Cake", -3, 3)]); + const gildedRose = new GildedRose([ + new Item("Conjured Mana Cake", 3, 6), + new Item("Conjured Mana Cake", 0, 4), + new Item("Conjured Mana Cake", -3, 3), + ]); const items = gildedRose.updateQuality(); @@ -141,6 +162,5 @@ describe('Gilded Rose', () => { expect(items[2].quality).toBe(0); expect(items[3].sellIn).toBe(-4); expect(items[3].quality).toBe(0); - }) - + }); }); From bdac765d471d5c712d8904f50e47be9e75b966bb Mon Sep 17 00:00:00 2001 From: Alexandra Stroiu Date: Fri, 11 Apr 2025 22:41:25 +0300 Subject: [PATCH 4/4] Modify updateQuality method in the gilded-rose.ts file Change the test for the Suflura item in the gilded-rose.spec.ts file: fix the name of the item. Modify the updateQuality method in the gilded-rose.ts file. Also change the test for Conjured items in the gilded-rose.spec.ts file. Signed-off-by: Alexandra Stroiu --- app/gilded-rose.ts | 104 +++++++++++++++------------------- test/jest/gilded-rose.spec.ts | 16 +++--- 2 files changed, 52 insertions(+), 68 deletions(-) diff --git a/app/gilded-rose.ts b/app/gilded-rose.ts index ee55134..06f0222 100644 --- a/app/gilded-rose.ts +++ b/app/gilded-rose.ts @@ -1,69 +1,55 @@ 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; - } + constructor(name, sellIn, quality) { + this.name = name; + this.sellIn = sellIn; + this.quality = quality; + } } export class GildedRose { - items: Array; + items: Array; - constructor(items = [] as Array) { - this.items = items; - } + constructor(items = [] as Array) { + this.items = items; + } + + updateQuality() { + for (let i = 0; i < this.items.length; i++) { + if (this.items[i].name != "Sulfuras, Hand of Ragnaros") { + let qualityDifference = 1; + if (this.items[i].name.includes("Conjured")) { + qualityDifference = 2; + } + if (this.items[i].sellIn <= 0) { + qualityDifference *= 2; + } - 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 - } - } - } 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 (this.items[i].name != "Aged Brie" && this.items[i].name != "Backstage passes to a TAFKAL80ETC concert" && this.items[i].quality > 0) { + this.items[i].quality = this.items[i].quality >= qualityDifference ? (this.items[i].quality - qualityDifference) : 0; } - return this.items; + if (this.items[i].name == "Aged Brie" && this.items[i].quality < 50) { + this.items[i].quality = (this.items[i].quality + qualityDifference) <= 50 ? (this.items[i].quality + qualityDifference) : 50; + } + + if (this.items[i].name == "Backstage passes to a TAFKAL80ETC concert" && this.items[i].quality < 50) { + if (this.items[i].sellIn > 10) { + this.items[i].quality += qualityDifference; + } else if (5 < this.items[i].sellIn && this.items[i].sellIn <= 10) { + this.items[i].quality = (this.items[i].quality + 2 * qualityDifference) <= 50 ? (this.items[i].quality + 2 * qualityDifference) : 50; + } else if (0 < this.items[i].sellIn && this.items[i].sellIn <= 5) { + this.items[i].quality = (this.items[i].quality + 3 * qualityDifference) <= 50 ? (this.items[i].quality + 3 * qualityDifference) : 50; + } else { + this.items[i].quality = 0; + } + } + this.items[i].sellIn -= 1; + } } -} \ No newline at end of file + return this.items; + } +} diff --git a/test/jest/gilded-rose.spec.ts b/test/jest/gilded-rose.spec.ts index 71e1a1b..938c1f2 100644 --- a/test/jest/gilded-rose.spec.ts +++ b/test/jest/gilded-rose.spec.ts @@ -14,7 +14,7 @@ describe("Gilded Rose", () => { it("Sulfuras quality is 80 and it never alters", () => { // Arrange - const gildedRose = new GildedRose([new Item("Sulfuras", 1, 80)]); + const gildedRose = new GildedRose([new Item("Sulfuras, Hand of Ragnaros", 1, 80)]); // Act const items = gildedRose.updateQuality(); @@ -25,7 +25,7 @@ describe("Gilded Rose", () => { it("Sulfuras SellIn date never alters", () => { // Arrange - const gildedRose = new GildedRose([new Item("Sulfuras", 8, 80)]); + const gildedRose = new GildedRose([new Item("Sulfuras, Hand of Ragnaros", 8, 80)]); // Act const items = gildedRose.updateQuality(); @@ -132,7 +132,6 @@ describe("Gilded Rose", () => { it("Once the sell by date has passed, Quality degrades twice as fast.", () => { const gildedRose = new GildedRose([ new Item("Aged Brie", -2, 6), - new Item("Backstage passes to a TAFKAL80ETC concert", 0, 50), new Item("Sword", 0, 2), new Item("Sword", 0, 3), new Item("Sword", -1, 1), @@ -142,9 +141,8 @@ describe("Gilded Rose", () => { expect(items[0].quality).toBe(8); expect(items[1].quality).toBe(0); - expect(items[2].quality).toBe(0); - expect(items[3].quality).toBe(1); - expect(items[4].quality).toBe(0); + expect(items[2].quality).toBe(1); + expect(items[3].quality).toBe(0); }); it('"Conjured" items degrade in Quality twice as fast as normal items.', () => { @@ -158,9 +156,9 @@ describe("Gilded Rose", () => { expect(items[0].sellIn).toBe(2); expect(items[0].quality).toBe(4); - expect(items[2].sellIn).toBe(-1); + expect(items[1].sellIn).toBe(-1); + expect(items[1].quality).toBe(0); + expect(items[2].sellIn).toBe(-4); expect(items[2].quality).toBe(0); - expect(items[3].sellIn).toBe(-4); - expect(items[3].quality).toBe(0); }); });