From 17bd28ad2ee841586e0701e1c97c51cbd7be0ae9 Mon Sep 17 00:00:00 2001 From: Dragos Coscodan Date: Sun, 6 Apr 2025 12:35:38 +0300 Subject: [PATCH] - Add new tests that covers all cases for gilded-rose - Change updateQuality() function to meet all requirements - Add a new type of item Files modify: - app/gilded-rose.ts - test/golden-master-text-test.ts - test/jest/gilded-rose.spec.ts Signed-off-by: Dragos Coscodan --- app/gilded-rose.ts | 9 +- test/golden-master-text-test.ts | 4 +- test/jest/gilded-rose.spec.ts | 163 +++++++++++++++++++++++++++++++- 3 files changed, 171 insertions(+), 5 deletions(-) diff --git a/app/gilded-rose.ts b/app/gilded-rose.ts index ee55134..8a38a78 100644 --- a/app/gilded-rose.ts +++ b/app/gilded-rose.ts @@ -21,7 +21,14 @@ export class GildedRose { 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') { + + if (this.items[i].name == 'Golden Sword') { + this.items[i].quality = this.items[i].quality - 0.5 + } + else + if (this.items[i].name == "Conjured Mana Cake") { + this.items[i].quality = this.items[i].quality - 2 + } else if (this.items[i].name != 'Sulfuras, Hand of Ragnaros') { this.items[i].quality = this.items[i].quality - 1 } } diff --git a/test/golden-master-text-test.ts b/test/golden-master-text-test.ts index ff02ea6..15d849b 100644 --- a/test/golden-master-text-test.ts +++ b/test/golden-master-text-test.ts @@ -11,8 +11,8 @@ const items = [ new Item("Backstage passes to a TAFKAL80ETC concert", 15, 20), new Item("Backstage passes to a TAFKAL80ETC concert", 10, 49), new Item("Backstage passes to a TAFKAL80ETC concert", 5, 49), - // this conjured item does not work properly yet - new Item("Conjured Mana Cake", 3, 6)]; + new Item("Conjured Mana Cake", 3, 6), + new Item("Golden Sword", 10, 20)]; const gildedRose = new GildedRose(items); diff --git a/test/jest/gilded-rose.spec.ts b/test/jest/gilded-rose.spec.ts index 613639f..0158f24 100644 --- a/test/jest/gilded-rose.spec.ts +++ b/test/jest/gilded-rose.spec.ts @@ -3,7 +3,7 @@ import { Item, GildedRose } from '@/gilded-rose'; describe('Gilded Rose', () => { it('should foo', () => { // Arrange - const gildedRose = new GildedRose([new Item('foo', 0, 0)]); + const gildedRose = new GildedRose([new Item('bar', 0, 0)]); // Act const items = gildedRose.updateQuality(); @@ -14,7 +14,7 @@ describe('Gilded Rose', () => { it('sword quality drops by 1', () => { // Arrange - const gildedRose = new GildedRose([new Item('Sword', 1, 1)]); + const gildedRose = new GildedRose([new Item('Sword', 1, 2)]); // Act const items = gildedRose.updateQuality(); @@ -22,4 +22,163 @@ describe('Gilded Rose', () => { // Assert expect(items[0].quality).toBe(1); }) + + it('sword quality does not drop below 0', () => { + // Arrange + const gildedRose = new GildedRose([new Item('Sword', 1, 0)]); + + // Act + const items = gildedRose.updateQuality(); + + // Assert + expect(items[0].quality).toBe(0); + }) + + // sell by date passed decrese quality by 2 + it('sword quality drops by 2 when sellIn is negative', () => { + // Arrange + const gildedRose = new GildedRose([new Item('Sword', -1, 2)]); + + // Act + const items = gildedRose.updateQuality(); + + // Assert + expect(items[0].quality).toBe(0); + }) + + // Aged Brie quality increases by 1 when sellIn is positive + it('Aged Brie quality increases by 1 when sellIn is positive', () => { + // Arrange + const gildedRose = new GildedRose([new Item('Aged Brie', 10, 20)]); + + // Act + const items = gildedRose.updateQuality(); + + // Assert + expect(items[0].quality).toBe(21); + } + ) + + it('Aged Brie quality does not exceed 50', () => { + // Arrange + const gildedRose = new GildedRose([new Item('Aged Brie', 10, 50)]); + + // Act + const items = gildedRose.updateQuality(); + + // Assert + expect(items[0].quality).toBe(50); + } + ); + + it('Backstage passes quality increases by 1 when sellIn is positive and more than 10 days', () => { + // Arrange + const gildedRose = new GildedRose([new Item('Backstage passes to a TAFKAL80ETC concert', 15, 20)]); + + // Act + const items = gildedRose.updateQuality(); + + // Assert + expect(items[0].quality).toBe(21); + } + ); + it('Backstage passes quality increases by 2 when sellIn is between 10 and 5 days', () => { + // Arrange + const gildedRose = new GildedRose([new Item('Backstage passes to a TAFKAL80ETC concert', 10, 20)]); + + // Act + const items = gildedRose.updateQuality(); + + // Assert + expect(items[0].quality).toBe(22); + } + ); + it('Backstage passes quality increases by 3 when sellIn is between 5 and 0 days', () => { + // Arrange + const gildedRose = new GildedRose([new Item('Backstage passes to a TAFKAL80ETC concert', 5, 20)]); + + // Act + const items = gildedRose.updateQuality(); + + // Assert + expect(items[0].quality).toBe(23); + } + ); + + it('Backstage passes quality drops to 0 when sellIn is negative', () => { + // Arrange + const gildedRose = new GildedRose([new Item('Backstage passes to a TAFKAL80ETC concert', -1, 20)]); + + // Act + const items = gildedRose.updateQuality(); + + // Assert + expect(items[0].quality).toBe(0); + } + ); + + it('Sulfuras quality does not change', () => { + // Arrange + const gildedRose = new GildedRose([new Item('Sulfuras, Hand of Ragnaros', 0, 80)]); + + // Act + const items = gildedRose.updateQuality(); + + // Assert + expect(items[0].quality).toBe(80); + } + ); + it('Sulfuras quality does not change when sellIn is negative', () => { + // Arrange + const gildedRose = new GildedRose([new Item('Sulfuras, Hand of Ragnaros', -1, 80)]); + + // Act + const items = gildedRose.updateQuality(); + + // Assert + expect(items[0].quality).toBe(80); + } + ); + + it('quality of an item is never negative', () => { + // Arrange + const gildedRose = new GildedRose([new Item('Sword', 0, 0)]); + + // Act + const items = gildedRose.updateQuality(); + + // Assert + expect(items[0].quality).toBe(0); + } + ); + + it('conjured item quality decreases by 2 when sellIn is positive', () => { + // Arrange + const gildedRose = new GildedRose([new Item('Conjured Mana Cake', 1, 10)]); + + // Act + const items = gildedRose.updateQuality(); + + // Assert + expect(items[0].quality).toBe(8); + } + ); + + it('Golden Sword quality decreases by 0.5 when sellIn is positive', () => { + // Arrange + const gildedRose = new GildedRose([new Item('Golden Sword', 1, 10)]); + + // Act + const items = gildedRose.updateQuality(); + + // Assert + expect(items[0].quality).toBe(9.5); + } + ); + + + + + + });