From 2232d5fa4dfe10fde4b797d4da7ce1ba8c3e3619 Mon Sep 17 00:00:00 2001 From: gege42o Date: Sun, 6 Apr 2025 12:38:35 +0300 Subject: [PATCH] Progress pentru workshop final. --- app/gilded-rose-og.ts | 69 ++++++++++++++++++++++ app/gilded-rose.ts | 107 ++++++++++++++++++---------------- test/jest/gilded-rose.spec.ts | 51 +++++++++++++++- 3 files changed, 175 insertions(+), 52 deletions(-) create mode 100644 app/gilded-rose-og.ts diff --git a/app/gilded-rose-og.ts b/app/gilded-rose-og.ts new file mode 100644 index 0000000..ee55134 --- /dev/null +++ b/app/gilded-rose-og.ts @@ -0,0 +1,69 @@ +export class Item { + name: string; + sellIn: number; + quality: number; + + constructor(name, sellIn, quality) { + this.name = name; + this.sellIn = sellIn; + this.quality = quality; + } +} + +export class GildedRose { + items: Array; + + constructor(items = [] as Array) { + this.items = items; + } + + 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 + } + } + } + } + + return this.items; + } +} \ No newline at end of file diff --git a/app/gilded-rose.ts b/app/gilded-rose.ts index ee55134..4746641 100644 --- a/app/gilded-rose.ts +++ b/app/gilded-rose.ts @@ -11,59 +11,66 @@ export class Item { } export class GildedRose { - items: Array; + constructor(public items: Item[] = []) {} - constructor(items = [] as Array) { - this.items = items; - } - - 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 - } - } - } + updateQuality(): Item[] { + for (const item of this.items) { + this.updateItem(item); } return this.items; } + + private updateItem(item: Item): void { + switch (item.name) { + case 'Aged Brie': + this.updateAgedBrie(item); + break; + + case 'Backstage passes to a TAFKAL80ETC concert': + this.updatePass(item); + break; + + case 'Sulfuras, Hand of Ragnaros': + break; + + default: + this.updateNormalItem(item); + } + if (item.name !== 'Sulfuras, Hand of Ragnaros') { + item.sellIn--; + } + if (item.sellIn < 0) { + this.handleExpired(item); + } + } + private updateAgedBrie(item: Item): void { + if (item.quality < 50) { + item.quality++; + } + } + private updatePass(item: Item): void { + if (item.quality < 50) item.quality++; + if (item.sellIn < 11 && item.quality < 50) item.quality++; + if (item.sellIn < 6 && item.quality < 50) item.quality++; + } + private updateNormalItem(item: Item): void { + if (item.quality > 0) { + item.quality--; + } + } + private handleExpired(item: Item): void { + switch (item.name) { + case 'Aged Brie': + if (item.quality < 50) item.quality++; + break; + case 'Backstage passes to a TAFKAL80ETC concert': + item.quality = 0; + break; + case 'Sulfuras, Hand of Ragnaros': + break; + default: + if (item.quality > 0) item.quality--; + } + } } \ No newline at end of file diff --git a/test/jest/gilded-rose.spec.ts b/test/jest/gilded-rose.spec.ts index 613639f..0aa62fb 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,53 @@ describe('Gilded Rose', () => { const items = gildedRose.updateQuality(); // Assert - expect(items[0].quality).toBe(1); + expect(items[0].quality).toBe(0); + }) + + it('should shaorma', () => { + // Arrange + const gildedRose = new GildedRose([new Item('shaorma', 4, 30),new Item('shaorma2', -1, 30)]); + + // Act + const items = gildedRose.updateQuality(); + + // Assert + expect(items[0].quality).toBeGreaterThan(10); + expect(items[1].quality).toBeGreaterThan(10); + expect(items[0].name).toBe('shaorma'); + expect(items[1].name).toBe('shaorma2'); + }) + it('aaged brie', () => { + // Arrange + const gildedRose = new GildedRose([new Item('Aged Brie', 0, 20)]); + + // Act + const items = gildedRose.updateQuality(); + + // Assert + expect(items[0].quality).toBeGreaterThan(10); + expect(items[0].name).toBe('Aged Brie'); + }) + it('backstage passes', () => { + // Arrange + const gildedRose = new GildedRose([new Item('Backstage passes to a TAFKAL80ETC concert', 0, 20)]); + + // Act + const items = gildedRose.updateQuality(); + + // Assert + expect(items[0].quality).toBe(0); + expect(items[0].name).toBe('Backstage passes to a TAFKAL80ETC concert'); + }) + it('backstage passes 2', () => { + // 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); + expect(items[0].name).toBe('Backstage passes to a TAFKAL80ETC concert'); }) });