mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-18 07:51:29 +00:00
changes
This commit is contained in:
parent
9b2c97532e
commit
eaa9af0f9b
@ -1,5 +1,3 @@
|
|||||||
import { log } from "console";
|
|
||||||
|
|
||||||
export class Item {
|
export class Item {
|
||||||
name: string;
|
name: string;
|
||||||
sellIn: number;
|
sellIn: number;
|
||||||
@ -19,81 +17,117 @@ export class GildedRose {
|
|||||||
this.items = items;
|
this.items = items;
|
||||||
}
|
}
|
||||||
|
|
||||||
updateQuality() {
|
updateQuality(){
|
||||||
for (let i = 0; i < this.items.length; i++) {
|
for (let i = 0; i < this.items.length; i++){
|
||||||
if (this.items[i].name == 'Elixir of the Mongoose'){
|
this.items[i]= this.updateItemQuality(this.items[i]);
|
||||||
this.items[i].sellIn = this.items[i].sellIn - 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.items[i].name == '+5 Dexterity Vest'){
|
|
||||||
this.items[i].sellIn = this.items[i].sellIn -1;
|
|
||||||
}
|
|
||||||
// Check if item name is "Conjured Mana Cake"
|
|
||||||
if (this.items[i].name == 'Conjured Mana Cake') {
|
|
||||||
console.log('Conjured Mana Cake');
|
|
||||||
|
|
||||||
this.items[i].quality = this.items[i].quality - 2;
|
|
||||||
this.items[i].sellIn = this.items[i].sellIn - 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ITEM NAME CHECK
|
|
||||||
if (this.items[i].name != 'Aged Brie' && this.items[i].name != 'Backstage passes to a TAFKAL80ETC concert') {
|
|
||||||
if (this.items[i].quality > 0) {
|
|
||||||
// Check if item name is not "Sulfuras, Hand of Ragnaros" & "Conjured Mana Cake"
|
|
||||||
if (this.items[i].name != 'Sulfuras, Hand of Ragnaros' && this.items[i].name != 'Conjured Mana Cake') {
|
|
||||||
// Decrease item quality by 1
|
|
||||||
this.items[i].quality = this.items[i].quality - 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// QUALITY CHECK
|
|
||||||
if (this.items[i].quality < 50) {
|
|
||||||
// Increase quality by 1 for 'Aged Brie'
|
|
||||||
if (this.items[i].name == 'Aged Brie') {
|
|
||||||
this.items[i].quality = this.items[i].quality + 1;
|
|
||||||
} else {
|
|
||||||
|
|
||||||
// If sellIn date for tickets is less than 11 & quality is less than 50 increase quality
|
|
||||||
if (this.items[i].name == 'Backstage passes to a TAFKAL80ETC concert') {
|
|
||||||
if (this.items[i].sellIn < 6) {
|
|
||||||
this.items[i].quality = this.items[i].quality + 3
|
|
||||||
} else if (this.items[i].sellIn < 11) {
|
|
||||||
this.items[i].quality = this.items[i].quality + 2
|
|
||||||
}
|
|
||||||
if (this.items[i].quality > 50){
|
|
||||||
this.items[i].quality = 50;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
// console.log(this.items)
|
|
||||||
return this.items;
|
return this.items;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private updateItemQuality(item: Item){
|
||||||
|
let nItem;
|
||||||
|
if(item.name == 'Aged Brie'){
|
||||||
|
nItem = this.updateAgedBrieQuality(item);
|
||||||
|
} else if (item.name == 'Backstage passes to a TAFKAL80ETC concert'){
|
||||||
|
nItem = this.updateBackstagepassesQuality(item);
|
||||||
|
} else if (item.name == 'Conjured Mana Cake'){
|
||||||
|
nItem = this.updateConjuredManaCakeQuality(item)
|
||||||
|
}else if (item.name == 'Elixir of the Mongoose'){
|
||||||
|
nItem = this.updateElixirOfTheMongooseQuality(item);
|
||||||
|
} else if (item.name == '+5 Dexterity Vest') {
|
||||||
|
nItem = this.updatePlus5DexterityVestQuality(item);
|
||||||
|
}else if(item.name ! = 'Sulfuras, Hand of Ragnaros'){
|
||||||
|
nItem = this.updateStandardItemQuality(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
return nItem;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public updateAgedBrieQuality(item: Item){
|
||||||
|
const newItem = new Item(item.name, item.sellIn, item.quality);
|
||||||
|
if (newItem.quality < 50){
|
||||||
|
newItem.quality++
|
||||||
|
}
|
||||||
|
if(newItem.sellIn < 0 && newItem.quality < 50){
|
||||||
|
newItem.quality++
|
||||||
|
}
|
||||||
|
newItem.sellIn--;
|
||||||
|
return this.qualityCeilingCheck(newItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
private qualityCeilingCheck(item: Item) {
|
||||||
|
if (item.quality > 50) {
|
||||||
|
item.quality = 50;
|
||||||
|
}
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
public updateBackstagepassesQuality(item: Item) {
|
||||||
|
const newItem = new Item(item.name, item.sellIn, item.quality);
|
||||||
|
if (newItem.sellIn <= 0) {
|
||||||
|
newItem.quality = 0;
|
||||||
|
} else if (newItem.sellIn <= 5) {
|
||||||
|
newItem.quality += 3;
|
||||||
|
} else if (newItem.sellIn <= 10) {
|
||||||
|
newItem.quality += 2;
|
||||||
|
} else if (newItem.sellIn > 10){
|
||||||
|
newItem.quality ++;
|
||||||
|
}
|
||||||
|
if (newItem.quality > 50) {
|
||||||
|
newItem.quality = 50;
|
||||||
|
}
|
||||||
|
|
||||||
|
newItem.sellIn--;
|
||||||
|
return this.qualityCeilingCheck(newItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
public updateConjuredManaCakeQuality(item: Item){
|
||||||
|
const newItem = new Item(item.name, item.sellIn, item.quality);
|
||||||
|
if (newItem.quality > 0){
|
||||||
|
newItem.quality -= 2;
|
||||||
|
}
|
||||||
|
if(newItem.sellIn < 0 && newItem.quality > 0){
|
||||||
|
newItem.quality -= 2;
|
||||||
|
}
|
||||||
|
newItem.sellIn--;
|
||||||
|
return this.qualityCeilingCheck(newItem);
|
||||||
|
}
|
||||||
|
public updateElixirOfTheMongooseQuality (item: Item){
|
||||||
|
const newItem = new Item(item.name, item.sellIn, item.quality);
|
||||||
|
if(newItem.quality > 0) {
|
||||||
|
newItem.quality--;
|
||||||
|
}
|
||||||
|
if (newItem.sellIn < 0 && newItem.quality > 0){
|
||||||
|
newItem.quality--
|
||||||
|
}
|
||||||
|
newItem.sellIn--;
|
||||||
|
return this.qualityCeilingCheck(newItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
public updatePlus5DexterityVestQuality (item:Item){
|
||||||
|
const newItem = new Item(item.name, item.sellIn, item.quality);
|
||||||
|
if (newItem.quality > 0){
|
||||||
|
newItem.quality--;
|
||||||
|
}
|
||||||
|
if (newItem.sellIn < 0 && newItem.quality > 0){
|
||||||
|
newItem.quality--;
|
||||||
|
}
|
||||||
|
newItem.sellIn--;
|
||||||
|
|
||||||
|
return this.qualityCeilingCheck(newItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
public updateStandardItemQuality(item: Item){
|
||||||
|
const newItem = new Item(item.name, item.sellIn, item.quality);
|
||||||
|
if (newItem.name !== 'Sulfuras, Hand of Ragnaros') {
|
||||||
|
if (newItem.quality > 0) {
|
||||||
|
newItem.quality--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return newItem;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,9 +1,78 @@
|
|||||||
import { Item, GildedRose } from '@/gilded-rose';
|
import { Item, GildedRose } from '@/gilded-rose';
|
||||||
|
|
||||||
describe('Gilded Rose', () => {
|
describe('Gilded Rose', () => {
|
||||||
it('should foo', () => {
|
const gildedRose = new GildedRose([]);
|
||||||
const gildedRose = new GildedRose([new Item('foo', 0, 0)]);
|
it('updateStandardItemQuality should update quality and sell in accordingly', () => {
|
||||||
const items = gildedRose.updateQuality();
|
const oldItem = new Item("Sulfuras, Hand of Ragnaros", 0, 80);
|
||||||
expect(items[0].name).toBe('fixme');
|
const updatedItem = gildedRose.updateStandardItemQuality(oldItem);
|
||||||
|
expect(updatedItem.quality).toEqual(80);
|
||||||
|
expect(updatedItem.sellIn).toEqual(0);
|
||||||
|
expect(oldItem.quality).toEqual(updatedItem.quality);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
it('updateStandardItemQuality should update quality and sell in accordingly', () => {
|
||||||
|
const oldItem = new Item("Sulfuras, Hand of Ragnaros", -1, 80);
|
||||||
|
const updatedItem = gildedRose.updateStandardItemQuality(oldItem);
|
||||||
|
expect(updatedItem.quality).toEqual(80);
|
||||||
|
expect(updatedItem.sellIn).toEqual(-1);
|
||||||
|
expect(oldItem.quality).toEqual(updatedItem.quality);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
it('updatePlus5DexterityVestQuality should update quality and sell in accordingly', () => {
|
||||||
|
const oldItem = new Item("+5 Dexterity Vest", 10, 20);
|
||||||
|
const updatedItem = gildedRose.updatePlus5DexterityVestQuality(oldItem);
|
||||||
|
expect(updatedItem.quality).toEqual(19);
|
||||||
|
expect(updatedItem.sellIn).toEqual(9);
|
||||||
|
expect(oldItem).not.toEqual(updatedItem);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('updateElixirOfTheMongooseQuality should update quality and sell in accordingly', () => {
|
||||||
|
const oldItem = new Item("Elixir of the Mongoose", 5, 7);
|
||||||
|
const updatedItem = gildedRose.updateElixirOfTheMongooseQuality(oldItem);
|
||||||
|
expect(updatedItem.quality).toEqual(6);
|
||||||
|
expect(updatedItem.sellIn).toEqual(4);
|
||||||
|
expect(oldItem).not.toEqual(updatedItem);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('updateBackstagepassesQuality should update quality and sell in accordingly when selling is greater than 10', () => {
|
||||||
|
const oldItem = new Item("Backstage passes to a TAFKAL80ETC concert", 15, 20);
|
||||||
|
const updatedItem = gildedRose.updateBackstagepassesQuality(oldItem);
|
||||||
|
expect(updatedItem.quality).toEqual(21);
|
||||||
|
expect(updatedItem.sellIn).toEqual(14);
|
||||||
|
expect(oldItem).not.toEqual(updatedItem);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('updateConjuredManaCakeQuality should update quality and sell in accordingly', () => {
|
||||||
|
const oldItem = new Item("Conjured Mana Cake", 3, 6);
|
||||||
|
const updatedItem = gildedRose.updateConjuredManaCakeQuality(oldItem);
|
||||||
|
expect(updatedItem.quality).toEqual(4);
|
||||||
|
expect(updatedItem.sellIn).toEqual(2);
|
||||||
|
expect(oldItem).not.toEqual(updatedItem);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('updateBackstagepassesQuality should update quality and sell in accordingly when selling is less than 5', () => {
|
||||||
|
const oldItem = new Item("Backstage passes to a TAFKAL80ETC concert", 5, 49);
|
||||||
|
const updatedItem = gildedRose.updateBackstagepassesQuality(oldItem);
|
||||||
|
expect(updatedItem.quality).toEqual(50);
|
||||||
|
expect(updatedItem.sellIn).toEqual(4);
|
||||||
|
expect(oldItem).not.toEqual(updatedItem);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('updateBackstagepassesQuality should update quality and sell in accordingly when selling is less than 5', () => {
|
||||||
|
const oldItem = new Item("Backstage passes to a TAFKAL80ETC concert", 5, 49);
|
||||||
|
const updatedItem = gildedRose.updateBackstagepassesQuality(oldItem);
|
||||||
|
expect(updatedItem.quality).toEqual(50);
|
||||||
|
expect(updatedItem.sellIn).toEqual(4);
|
||||||
|
expect(oldItem).not.toEqual(updatedItem);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('updateAgedBrieQuality should update quality and sell in accordingly', () => {
|
||||||
|
const oldItem = new Item("Aged Brie", 2, 0);
|
||||||
|
const updatedItem = gildedRose.updateAgedBrieQuality(oldItem);
|
||||||
|
expect(updatedItem.quality).toEqual(1);
|
||||||
|
expect(updatedItem.sellIn).toEqual(1);
|
||||||
|
expect(oldItem).not.toEqual(updatedItem);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user