mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-16 06:51:27 +00:00
changes
This commit is contained in:
parent
9b2c97532e
commit
eaa9af0f9b
@ -1,5 +1,3 @@
|
||||
import { log } from "console";
|
||||
|
||||
export class Item {
|
||||
name: string;
|
||||
sellIn: number;
|
||||
@ -19,81 +17,117 @@ export class GildedRose {
|
||||
this.items = items;
|
||||
}
|
||||
|
||||
updateQuality() {
|
||||
for (let i = 0; i < this.items.length; i++) {
|
||||
if (this.items[i].name == 'Elixir of the Mongoose'){
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
updateQuality(){
|
||||
for (let i = 0; i < this.items.length; i++){
|
||||
this.items[i]= this.updateItemQuality(this.items[i]);
|
||||
}
|
||||
// console.log(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';
|
||||
|
||||
describe('Gilded Rose', () => {
|
||||
it('should foo', () => {
|
||||
const gildedRose = new GildedRose([new Item('foo', 0, 0)]);
|
||||
const items = gildedRose.updateQuality();
|
||||
expect(items[0].name).toBe('fixme');
|
||||
const gildedRose = new GildedRose([]);
|
||||
it('updateStandardItemQuality should update quality and sell in accordingly', () => {
|
||||
const oldItem = new Item("Sulfuras, Hand of Ragnaros", 0, 80);
|
||||
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