Refactor: add item classes

This commit is contained in:
Gayun00 2023-09-25 22:34:24 +09:00
parent 60aafd40e1
commit 5d670ac672
3 changed files with 71 additions and 21 deletions

View File

@ -0,0 +1,59 @@
export class Item {
name: string;
sellIn: number;
quality: number;
constructor(name, sellIn, quality) {
this.name = name;
this.sellIn = sellIn;
this.quality = quality;
}
handleQuality() {
//
}
handleSellIn() {
//
}
}
export class AgedBrie extends Item {
constructor(sellIn, quality) {
super("Aged Brie", sellIn, quality);
}
handleQuality() {
//
}
handleSellIn() {
//
}
}
export class Passes extends Item {
constructor(sellIn, quality) {
super("Backstage passes to a TAFKAL80ETC concert", sellIn, quality);
}
handleQuality() {
//
}
handleSellIn() {
//
}
}
export class Surfras extends Item {
constructor(sellIn, quality) {
super("Sulfuras, Hand of Ragnaros", sellIn, quality);
}
handleQuality() {
//
}
handleSellIn() {
//
}
}

View File

@ -1,4 +1,5 @@
import { Item, GildedRose } from "../app/gilded-rose"; import { Item } from "@/itemClasses";
import { GildedRose } from "../app/gilded-rose";
const items = [ const items = [
new Item("+5 Dexterity Vest", 10, 20), // new Item("+5 Dexterity Vest", 10, 20), //

View File

@ -1,11 +1,11 @@
import { GildedRose } from "@/gilded-rose"; import { GildedRose } from "@/gilded-rose";
import { Item } from "@/itemClasses"; import { AgedBrie, Passes, Surfras } from "@/itemClasses";
describe("Aged Brie 테스트", () => { describe("Aged Brie 테스트", () => {
let gildedRose = new GildedRose([new Item("Aged Brie", 1, 0)]); let gildedRose = new GildedRose([new AgedBrie(1, 0)]);
beforeEach(() => { beforeEach(() => {
gildedRose = new GildedRose([new Item("Aged Brie", 2, 3)]); gildedRose = new GildedRose([new AgedBrie(2, 3)]);
}); });
it("Aged Brie의 quality는 1 증가, sellIn은 1 감소", () => { it("Aged Brie의 quality는 1 증가, sellIn은 1 감소", () => {
@ -16,7 +16,7 @@ describe("Aged Brie 테스트", () => {
}); });
it("quality는 50을 초과할 수 없음", () => { it("quality는 50을 초과할 수 없음", () => {
const gildedRose = new GildedRose([new Item("Aged Brie", 2, 50)]); const gildedRose = new GildedRose([new AgedBrie(2, 50)]);
const items = gildedRose.updateQuality(); const items = gildedRose.updateQuality();
expect(items[0].sellIn).toBe(1); expect(items[0].sellIn).toBe(1);
@ -25,12 +25,10 @@ describe("Aged Brie 테스트", () => {
}); });
describe("Surfras 테스트", () => { describe("Surfras 테스트", () => {
let gildedRose = new GildedRose([ let gildedRose = new GildedRose([new Surfras(1, 0)]);
new Item("Sulfuras, Hand of Ragnaros", 1, 0),
]);
beforeEach(() => { beforeEach(() => {
gildedRose = new GildedRose([new Item("Sulfuras, Hand of Ragnaros", 2, 3)]); gildedRose = new GildedRose([new Surfras(2, 3)]);
}); });
it("Surfras의 quality는 변하지 않음, sellIn 변하지 않음", () => { it("Surfras의 quality는 변하지 않음, sellIn 변하지 않음", () => {
@ -42,14 +40,10 @@ describe("Surfras 테스트", () => {
}); });
describe("Backstage passes 테스트", () => { describe("Backstage passes 테스트", () => {
let gildedRose = new GildedRose([ let gildedRose = new GildedRose([new Passes(1, 0)]);
new Item("Backstage passes to a TAFKAL80ETC concert", 1, 0),
]);
beforeEach(() => { beforeEach(() => {
gildedRose = new GildedRose([ gildedRose = new GildedRose([new Passes(2, 3)]);
new Item("Backstage passes to a TAFKAL80ETC concert", 2, 3),
]);
}); });
it("Backstage passes의 sellIn값 1감소, quality 1증가", () => { it("Backstage passes의 sellIn값 1감소, quality 1증가", () => {
@ -60,9 +54,7 @@ describe("Backstage passes 테스트", () => {
}); });
it("Backstage passes의 sellIn값 10일부터, quality 2증가", () => { it("Backstage passes의 sellIn값 10일부터, quality 2증가", () => {
const gildedRose = new GildedRose([ const gildedRose = new GildedRose([new Passes(10, 3)]);
new Item("Backstage passes to a TAFKAL80ETC concert", 10, 3),
]);
const items = gildedRose.updateQuality(); const items = gildedRose.updateQuality();
expect(items[0].sellIn).toBe(9); expect(items[0].sellIn).toBe(9);
@ -70,9 +62,7 @@ describe("Backstage passes 테스트", () => {
}); });
it("Backstage passes의 sellIn값 5일부터, quality 3증가", () => { it("Backstage passes의 sellIn값 5일부터, quality 3증가", () => {
const gildedRose = new GildedRose([ const gildedRose = new GildedRose([new Passes(5, 3)]);
new Item("Backstage passes to a TAFKAL80ETC concert", 5, 3),
]);
const items = gildedRose.updateQuality(); const items = gildedRose.updateQuality();
expect(items[0].sellIn).toBe(4); expect(items[0].sellIn).toBe(4);