Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 32 additions & 28 deletions app/gilded-rose.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,47 +19,51 @@ export class GildedRose {

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
if (this.items[i].name == 'Aged Brie') {
if (this.items[i].quality < 50)
this.items[i].quality = this.items[i].quality + 1
} else if (this.items[i].name == 'Backstage passes to a TAFKAL80ETC concert') {
if (this.items[i].quality < 50)
this.items[i].quality = this.items[i].quality + 1
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
}
}
} 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].quality > 0) {
if (this.items[i].name != 'Sulfuras, Hand of Ragnaros') {
this.items[i].quality = this.items[i].quality - 1
if (this.items[i].name == 'Conjured Mana Cake' && this.items[i].quality > 0)
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].name == 'Aged Brie') {
if (this.items[i].quality < 50) {
this.items[i].quality = this.items[i].quality + 1
}
} else if (this.items[i].name == 'Backstage passes to a TAFKAL80ETC concert')
this.items[i].quality = 0
else {
if (this.items[i].quality > 0) {
if (this.items[i].name != 'Sulfuras, Hand of Ragnaros') {
this.items[i].quality = this.items[i].quality - 1
if(this.items[i].name == 'Conjured Mana Cake' && this.items[i].quality > 1)
this.items[i].quality = this.items[i].quality - 1;
}
}
}
}
}
Expand Down
84 changes: 82 additions & 2 deletions test/jest/gilded-rose.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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', () => {
Expand All @@ -20,6 +20,86 @@ describe('Gilded Rose', () => {
const items = gildedRose.updateQuality();

// Assert
expect(items[0].quality).toBe(0);
});

it('quality degrades twice as fast after last sell in day', () => {
const gildedRose = new GildedRose([new Item('Item', 0, 5)]);

const items = gildedRose.updateQuality();

expect(items[0].quality).toBe(3);
});

it('aged brie quality increases by 1', () => {
const gildedRose = new GildedRose([new Item('Aged Brie', 5, 10)]);

const items = gildedRose.updateQuality();

expect(items[0].quality).toBe(11);
});

it('aged brie quality does not increase over 50', () => {
const gildedRose = new GildedRose([new Item('Aged Brie', 5, 50)]);

const items = gildedRose.updateQuality();

expect(items[0].quality).toBe(50);
});

it('backstage passes quality increse by 2 when 10 days or less', () => {
const gildedRose = new GildedRose([new Item('Backstage passes to a TAFKAL80ETC concert', 6, 5)]);

const items = gildedRose.updateQuality();

expect(items[0].quality).toBe(7);
});

it('backstage passes quality increse by 3 when 5 days or less', () => {
const gildedRose = new GildedRose([new Item('Backstage passes to a TAFKAL80ETC concert', 2, 5)]);

const items = gildedRose.updateQuality();

expect(items[0].quality).toBe(8);
});

it('backstage passes quality drop to 0 after final day', () => {
const gildedRose = new GildedRose([new Item('Backstage passes to a TAFKAL80ETC concert', -1, 5)]);

const items = gildedRose.updateQuality();

expect(items[0].quality).toBe(0);
});

it('sulfuras quality remains the same', () => {
const gildedRose = new GildedRose([new Item('Sulfuras, Hand of Ragnaros', -1, 80)]);

const items = gildedRose.updateQuality();

expect(items[0].quality).toBe(80);
});

it('sulfuras sell in days remain the same', () => {
const gildedRose = new GildedRose([new Item('Sulfuras, Hand of Ragnaros', 2, 80)]);

const items = gildedRose.updateQuality();

expect(items[0].sellIn).toBe(2);
});

it('conjured item quality drops twice as fast', () => {
const gildedRose = new GildedRose([new Item('Conjured Mana Cake', 4, 5)]);

const items = gildedRose.updateQuality();

expect(items[0].quality).toBe(3);
});

it('conjured item quality drops twice as fast when sell in days are over', () => {
const gildedRose = new GildedRose([new Item('Conjured Mana Cake', 0, 5)]);

const items = gildedRose.updateQuality();

expect(items[0].quality).toBe(1);
})
});
});