.
This commit is contained in:
Emmanuel 2021-04-27 23:54:10 +02:00
parent b6536a2cfc
commit 9202855a5d
4 changed files with 144 additions and 70 deletions

View File

@ -1,8 +1,17 @@
using System.Collections.Generic; using System;
using System.Collections.Generic;
namespace csharp namespace csharp
{ {
public class GildedRose interface IUpdateMethods
{
void CalculateQuality(Item item, int decrementValue, int incrementValue);
void AgedBrie(Item item);
void MinMaxRules(Item item);
void ReduceSellIn(Item item);
}
public class GildedRose : IUpdateMethods
{ {
IList<Item> Items; IList<Item> Items;
public GildedRose(IList<Item> Items) public GildedRose(IList<Item> Items)
@ -10,80 +19,89 @@ namespace csharp
this.Items = Items; this.Items = Items;
} }
enum Limit
{
RegularMin = 0,
RegularMax = 50,
LegendaryMax = 80
}
public void UpdateQuality() public void UpdateQuality()
{ {
foreach(var Item in Items) // Changed this to a simpler loop foreach(var Item in Items) // Changed this to a simpler loop
{ {
if (Item.Name != "Aged Brie" && Item.Name != "Backstage passes to a TAFKAL80ETC concert") //Console.WriteLine(Item.Name);
if(Item.Name == "Aged Brie")
{ {
if (Item.Quality > 0) AgedBrie(Item);
{ MinMaxRules(Item);
if (Item.Name != "Sulfuras, Hand of Ragnaros") //return;
{
Item.Quality = Item.Quality - 1;
} }
else if (Item.Name == "Sulfuras, Hand of Ragnaros")
{
//CalculateQuality(Item, 0, 0);
//return;
} }
else if(Item.Name == "Conjured Mana Cake")
{
CalculateQuality(Item, 4, 0);
//return;
} }
else else
{ {
if (Item.Quality < 50) CalculateQuality(Item, 2, 0);
{ //return;
Item.Quality = Item.Quality + 1;
if (Item.Name == "Backstage passes to a TAFKAL80ETC concert")
{
if (Item.SellIn < 11)
{
if (Item.Quality < 50)
{
Item.Quality = Item.Quality + 1;
}
}
if (Item.SellIn < 6)
{
if (Item.Quality < 50)
{
Item.Quality = Item.Quality + 1;
}
}
} }
} }
} }
if (Item.Name != "Sulfuras, Hand of Ragnaros") public void CalculateQuality(Item item, int decrementValue, int IncrementValue)
{ {
Item.SellIn = Item.SellIn - 1; if (item.SellIn <= 50)
{
item.Quality = item.Quality - decrementValue;
}
MinMaxRules(item);
ReduceSellIn(item);
}
public void AgedBrie(Item item)
{
if (item.SellIn == 0)
{
item.Quality = 0;
} }
if (Item.SellIn < 0) if (item.SellIn <= 10 && item.SellIn > 5 && item.SellIn > 0)
{ {
if (Item.Name != "Aged Brie") item.Quality = item.Quality + 2;
}
if (item.SellIn <= 5 && item.SellIn > 0)
{ {
if (Item.Name != "Backstage passes to a TAFKAL80ETC concert") item.Quality = item.Quality + 3;
}
ReduceSellIn(item);
}
public void MinMaxRules(Item item)
{ {
if (Item.Quality > 0) if(item.Quality <= (int)Limit.RegularMin)
{ {
if (Item.Name != "Sulfuras, Hand of Ragnaros") item.Quality = (int)Limit.RegularMin;
}
if(item.Quality >= (int)Limit.RegularMax)
{ {
Item.Quality = Item.Quality - 1; item.Quality = (int)Limit.RegularMax;
} }
} }
}
else public void ReduceSellIn(Item item)
{ {
Item.Quality = Item.Quality - Item.Quality; if (item.SellIn >= 1)
}
}
else
{ {
if (Item.Quality < 50) item.SellIn = item.SellIn - 1;
{
Item.Quality = Item.Quality + 1;
}
}
}
} }
} }
} }
} }

View File

@ -40,7 +40,7 @@ namespace csharp
var app = new GildedRose(Items); var app = new GildedRose(Items);
for (var i = 0; i < 31; i++) for (var i = 0; i < 11; i++)
{ {
Console.WriteLine("-------- day " + i + " --------"); Console.WriteLine("-------- day " + i + " --------");
Console.WriteLine("name, sellIn, quality"); Console.WriteLine("name, sellIn, quality");

View File

@ -24,9 +24,9 @@ namespace csharp.Tests
} }
[TestMethod()] [TestMethod()]
public void UpdateQualityTestForAgedBrie_SellDatePassed_IncreaseQualityByTwo() public void UpdateQualityTestForAgedBrie_SellDateIsLessThan10ButGreaterThan5_IncreaseQualityByTwo()
{ {
IList<Item> Items = new List<Item> { new Item { Name = "Aged Brie", SellIn = 0, Quality = 0 } }; IList<Item> Items = new List<Item> { new Item { Name = "Aged Brie", SellIn = 10, Quality = 0 } };
GildedRose app = new GildedRose(Items); GildedRose app = new GildedRose(Items);
app.UpdateQuality(); app.UpdateQuality();
@ -34,6 +34,28 @@ namespace csharp.Tests
Assert.AreEqual(2, Items[0].Quality); Assert.AreEqual(2, Items[0].Quality);
} }
[TestMethod()]
public void UpdateQualityTestForAgedBrie_SellDateIsLessThan5_IncreaseQualityByThree()
{
IList<Item> Items = new List<Item> { new Item { Name = "Aged Brie", SellIn = 5, Quality = 0 } };
GildedRose app = new GildedRose(Items);
app.UpdateQuality();
Assert.AreEqual(3, Items[0].Quality);
}
[TestMethod()]
public void UpdateQualityTestForAgedBrie_AfterConcert_DropToZero()
{
IList<Item> Items = new List<Item> { new Item { Name = "Aged Brie", SellIn = 0, Quality = 10 }};
GildedRose app = new GildedRose(Items);
app.UpdateQuality();
Assert.AreEqual(0, Items[0].Quality);
}
[TestMethod()] [TestMethod()]
public void UpdateQualityTest_SellDatePassed_DecreaseQualityTwice() public void UpdateQualityTest_SellDatePassed_DecreaseQualityTwice()
{ {
@ -46,7 +68,7 @@ namespace csharp.Tests
} }
[TestMethod()] [TestMethod()]
public void UpdateQualityTest_QualityOfItemIsNeverNegative_MinimumValue() public void UpdateQualityTest_QualityOfItemIsNeverNegative_MinimumValue0()
{ {
IList<Item> Items = new List<Item> { new Item { Name = "+5 Dexterity Vest", SellIn = 0, Quality = 0 } }; IList<Item> Items = new List<Item> { new Item { Name = "+5 Dexterity Vest", SellIn = 0, Quality = 0 } };
GildedRose app = new GildedRose(Items); GildedRose app = new GildedRose(Items);
@ -56,14 +78,48 @@ namespace csharp.Tests
Assert.AreEqual(0, Items[0].Quality); Assert.AreEqual(0, Items[0].Quality);
} }
public void UpdateQualityTest_QualityOfItemNeverAboveDefinedValue_MaximumValue() [TestMethod()]
public void UpdateQualityTest_QualityOfItemNeverAboveDefinedValue_MaximumValue50()
{ {
IList<Item> Items = new List<Item> { new Item { Name = "+5 Dexterity Vest", SellIn = 0, Quality = 0 } }; IList<Item> Items = new List<Item> { new Item { Name = "Aged Brie", SellIn = 1, Quality = 49 } };
GildedRose app = new GildedRose(Items); GildedRose app = new GildedRose(Items);
app.UpdateQuality(); app.UpdateQuality();
Assert.AreEqual(0, Items[0].Quality); Assert.AreEqual(50, Items[0].Quality);
}
[TestMethod()]
public void UpdateQualityTest_LegendaryItems_NeverAltar()
{
IList<Item> Items = new List<Item> { new Item { Name = "Sulfuras, Hand of Ragnaros", SellIn = 0, Quality = 80 } };
GildedRose app = new GildedRose(Items);
app.UpdateQuality();
Assert.AreEqual(80, Items[0].Quality);
}
[TestMethod()]
public void UpdateQualityTest_LegendaryItems_MaximumValue80()
{
IList<Item> Items = new List<Item> { new Item { Name = "Sulfuras, Hand of Ragnaros", SellIn = 1, Quality = 80} };
GildedRose app = new GildedRose(Items);
app.UpdateQuality();
Assert.AreEqual(80, Items[0].Quality);
}
[TestMethod()]
public void UpdateQualityTest_ReduceSellIn_By1Daily()
{
IList<Item> Items = new List<Item> { new Item { Name = "Aged Brie", SellIn = 1, Quality = 30 } };
GildedRose app = new GildedRose(Items);
app.UpdateQuality();
Assert.AreEqual(0, Items[0].SellIn);
} }
} }
} }