This commit is contained in:
Sandrine Mang'ong'o Malanga 2023-10-18 15:53:01 +03:00
parent 9b2c97532e
commit eaa9af0f9b
2 changed files with 180 additions and 77 deletions

View File

@ -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;
}
}

View File

@ -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);
});
});