Add typescript solution & update test

This commit is contained in:
Brandon Walls 2022-12-22 20:33:49 -06:00
parent 7397b893f9
commit 49c88bd039
2 changed files with 84 additions and 45 deletions

View File

@ -3,7 +3,11 @@ export class Item {
sellIn: number;
quality: number;
constructor(name, sellIn, quality) {
constructor(
name: Item["name"],
sellIn: Item["sellIn"],
quality: Item["quality"]
) {
this.name = name;
this.sellIn = sellIn;
this.quality = quality;
@ -19,49 +23,47 @@ 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
}
const itemName = this.items[i].name;
let itemQuality = this.items[i].quality;
let itemSellin = this.items[i].sellIn;
if (itemName.includes("Sulfuras")) {
continue;
} else {
itemSellin -= 1;
}
if (itemName.includes("Aged Brie")) {
itemQuality++;
} else if (itemName.includes("Backstage passes")) {
if (itemSellin < 11) {
itemQuality = itemQuality + 2;
} else if (itemSellin < 6) {
itemQuality = itemQuality + 3;
} else if (itemSellin < 0) {
itemQuality = 0;
} else {
itemQuality++;
}
} else if (itemName.includes("Conjured")) {
if (itemQuality > 0) {
itemQuality = itemQuality - 2;
}
if (itemSellin < 0) {
itemQuality = itemQuality - itemQuality * 2;
}
} 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 (itemQuality > 0) {
itemQuality = itemQuality - 1;
}
if (itemSellin < 0) {
itemQuality = 0;
}
}
this.items[i].quality = itemQuality > 50 ? 50 : itemQuality;
this.items[i].sellIn = itemSellin;
}
return this.items;

View File

@ -1,9 +1,46 @@
import { Item, GildedRose } from '@/gilded-rose';
import { Item, GildedRose } from "@/gilded-rose";
describe('Gilded Rose', () => {
it('should foo', () => {
const gildedRose = new GildedRose([new Item('foo', 0, 0)]);
describe("Gilded Rose", () => {
let gildedRose: GildedRose;
beforeEach(() => {
gildedRose = new GildedRose([
new Item("foo", 0, 0),
new Item("Conjured item", 10, 8),
new Item("Sulfuras item", 0, 80),
new Item("Aged Brie item ", 10, 33),
new Item("Aged Brie item", 0, 50),
new Item("Backstage passes item", 8, 30),
]);
});
it("Should foo", () => {
const items = gildedRose.updateQuality();
expect(items[0].name).toBe('fixme');
expect(items[0].name).toBe("foo");
});
it("The Quality of Backstage passes item increases by 2 when there are 10 days or less", () => {
const items = gildedRose.updateQuality();
expect(items[5].quality).toBe(32);
});
it("The quality of Conjured item should be degraded by twice more than normal items", () => {
const items = gildedRose.updateQuality();
expect(items[1].quality).toBe(6);
});
it("Aged Brie item actually increases in Quality the older it gets", () => {
const items = gildedRose.updateQuality();
expect(items[3].quality).toBe(34);
});
it("The quality of Sulfuras item should remain unchanged", () => {
const items = gildedRose.updateQuality();
expect(items[2].quality).toBe(80);
});
it("The Quality of an item is never more than 50", () => {
const items = gildedRose.updateQuality();
expect(items[4].quality).toBe(50);
});
});