diff --git a/GildedRoseTest.cs b/GildedRoseTest.cs deleted file mode 100644 index aa64b0b..0000000 --- a/GildedRoseTest.cs +++ /dev/null @@ -1,17 +0,0 @@ -using Xunit; -using System.Collections.Generic; - -namespace csharpcore -{ - public class GildedRoseTest - { - [Fact] - public void foo() - { - IList Items = new List { new Item { Name = "foo", SellIn = 0, Quality = 0 } }; - GildedRose app = new GildedRose(Items); - app.UpdateQuality(); - Assert.Equal("fixme", Items[0].Name); - } - } -} \ No newline at end of file diff --git a/Program.cs b/Program.cs index ebe4da4..5f587ef 100644 --- a/Program.cs +++ b/Program.cs @@ -44,9 +44,9 @@ namespace csharpcore { Console.WriteLine("-------- day " + i + " --------"); Console.WriteLine("name, sellIn, quality"); - for (var j = 0; j < Items.Count; j++) + foreach (var item in Items) { - System.Console.WriteLine(Items[j].Name + ", " + Items[j].SellIn + ", " + Items[j].Quality); + Console.WriteLine(item.Name + ", " + item.SellIn + ", " + item.Quality); } Console.WriteLine(""); app.UpdateQuality(); diff --git a/test/AgedBrieTest.cs b/test/AgedBrieTest.cs new file mode 100644 index 0000000..d63da77 --- /dev/null +++ b/test/AgedBrieTest.cs @@ -0,0 +1,41 @@ +using System.Collections.Generic; +using Xunit; + +namespace csharpcore +{ + public class AgedBrieTest + { + [Theory] + [MemberData(nameof(AgedBrieData))] + public void ShouldIncreaseQuality(int sellIn, int quality, int expectedQuality) + { + var item = new Item {Name = "Aged Brie", SellIn = sellIn, Quality = quality}; + var app = new GildedRose(new List {item}); + + app.UpdateQuality(); + Assert.Equal("Aged Brie", item.Name); + Assert.Equal(sellIn - 1, item.SellIn); + Assert.Equal(expectedQuality, item.Quality); + } + + public static object[][] AgedBrieData => new[] + { + /* sellIn, quality, expectedQuality*/ + new object[]{ 1, 1, 2 }, + new object[]{ 0, 1, 3 }, + new object[]{ -1, 1, 3 }, + }; + + [Fact] + public void ShouldNotIncreaseQualityMoreThan50() + { + var item = new Item {Name = "Aged Brie", SellIn = 1, Quality = 50}; + var app = new GildedRose(new List {item}); + + app.UpdateQuality(); + Assert.Equal("Aged Brie", item.Name); + Assert.Equal(0, item.SellIn); + Assert.Equal(50, item.Quality); + } + } +} \ No newline at end of file diff --git a/test/ApprovalTest.ThirtyDays.approved.txt b/test/ApprovalTest.ThirtyDays.approved.txt new file mode 100644 index 0000000..cd66984 --- /dev/null +++ b/test/ApprovalTest.ThirtyDays.approved.txt @@ -0,0 +1,373 @@ +OMGHAI! +-------- day 0 -------- +name, sellIn, quality ++5 Dexterity Vest, 10, 20 +Aged Brie, 2, 0 +Elixir of the Mongoose, 5, 7 +Sulfuras, Hand of Ragnaros, 0, 80 +Sulfuras, Hand of Ragnaros, -1, 80 +Backstage passes to a TAFKAL80ETC concert, 15, 20 +Backstage passes to a TAFKAL80ETC concert, 10, 49 +Backstage passes to a TAFKAL80ETC concert, 5, 49 +Conjured Mana Cake, 3, 6 + +-------- day 1 -------- +name, sellIn, quality ++5 Dexterity Vest, 9, 19 +Aged Brie, 1, 1 +Elixir of the Mongoose, 4, 6 +Sulfuras, Hand of Ragnaros, 0, 80 +Sulfuras, Hand of Ragnaros, -1, 80 +Backstage passes to a TAFKAL80ETC concert, 14, 21 +Backstage passes to a TAFKAL80ETC concert, 9, 50 +Backstage passes to a TAFKAL80ETC concert, 4, 50 +Conjured Mana Cake, 2, 5 + +-------- day 2 -------- +name, sellIn, quality ++5 Dexterity Vest, 8, 18 +Aged Brie, 0, 2 +Elixir of the Mongoose, 3, 5 +Sulfuras, Hand of Ragnaros, 0, 80 +Sulfuras, Hand of Ragnaros, -1, 80 +Backstage passes to a TAFKAL80ETC concert, 13, 22 +Backstage passes to a TAFKAL80ETC concert, 8, 50 +Backstage passes to a TAFKAL80ETC concert, 3, 50 +Conjured Mana Cake, 1, 4 + +-------- day 3 -------- +name, sellIn, quality ++5 Dexterity Vest, 7, 17 +Aged Brie, -1, 4 +Elixir of the Mongoose, 2, 4 +Sulfuras, Hand of Ragnaros, 0, 80 +Sulfuras, Hand of Ragnaros, -1, 80 +Backstage passes to a TAFKAL80ETC concert, 12, 23 +Backstage passes to a TAFKAL80ETC concert, 7, 50 +Backstage passes to a TAFKAL80ETC concert, 2, 50 +Conjured Mana Cake, 0, 3 + +-------- day 4 -------- +name, sellIn, quality ++5 Dexterity Vest, 6, 16 +Aged Brie, -2, 6 +Elixir of the Mongoose, 1, 3 +Sulfuras, Hand of Ragnaros, 0, 80 +Sulfuras, Hand of Ragnaros, -1, 80 +Backstage passes to a TAFKAL80ETC concert, 11, 24 +Backstage passes to a TAFKAL80ETC concert, 6, 50 +Backstage passes to a TAFKAL80ETC concert, 1, 50 +Conjured Mana Cake, -1, 1 + +-------- day 5 -------- +name, sellIn, quality ++5 Dexterity Vest, 5, 15 +Aged Brie, -3, 8 +Elixir of the Mongoose, 0, 2 +Sulfuras, Hand of Ragnaros, 0, 80 +Sulfuras, Hand of Ragnaros, -1, 80 +Backstage passes to a TAFKAL80ETC concert, 10, 25 +Backstage passes to a TAFKAL80ETC concert, 5, 50 +Backstage passes to a TAFKAL80ETC concert, 0, 50 +Conjured Mana Cake, -2, 0 + +-------- day 6 -------- +name, sellIn, quality ++5 Dexterity Vest, 4, 14 +Aged Brie, -4, 10 +Elixir of the Mongoose, -1, 0 +Sulfuras, Hand of Ragnaros, 0, 80 +Sulfuras, Hand of Ragnaros, -1, 80 +Backstage passes to a TAFKAL80ETC concert, 9, 27 +Backstage passes to a TAFKAL80ETC concert, 4, 50 +Backstage passes to a TAFKAL80ETC concert, -1, 0 +Conjured Mana Cake, -3, 0 + +-------- day 7 -------- +name, sellIn, quality ++5 Dexterity Vest, 3, 13 +Aged Brie, -5, 12 +Elixir of the Mongoose, -2, 0 +Sulfuras, Hand of Ragnaros, 0, 80 +Sulfuras, Hand of Ragnaros, -1, 80 +Backstage passes to a TAFKAL80ETC concert, 8, 29 +Backstage passes to a TAFKAL80ETC concert, 3, 50 +Backstage passes to a TAFKAL80ETC concert, -2, 0 +Conjured Mana Cake, -4, 0 + +-------- day 8 -------- +name, sellIn, quality ++5 Dexterity Vest, 2, 12 +Aged Brie, -6, 14 +Elixir of the Mongoose, -3, 0 +Sulfuras, Hand of Ragnaros, 0, 80 +Sulfuras, Hand of Ragnaros, -1, 80 +Backstage passes to a TAFKAL80ETC concert, 7, 31 +Backstage passes to a TAFKAL80ETC concert, 2, 50 +Backstage passes to a TAFKAL80ETC concert, -3, 0 +Conjured Mana Cake, -5, 0 + +-------- day 9 -------- +name, sellIn, quality ++5 Dexterity Vest, 1, 11 +Aged Brie, -7, 16 +Elixir of the Mongoose, -4, 0 +Sulfuras, Hand of Ragnaros, 0, 80 +Sulfuras, Hand of Ragnaros, -1, 80 +Backstage passes to a TAFKAL80ETC concert, 6, 33 +Backstage passes to a TAFKAL80ETC concert, 1, 50 +Backstage passes to a TAFKAL80ETC concert, -4, 0 +Conjured Mana Cake, -6, 0 + +-------- day 10 -------- +name, sellIn, quality ++5 Dexterity Vest, 0, 10 +Aged Brie, -8, 18 +Elixir of the Mongoose, -5, 0 +Sulfuras, Hand of Ragnaros, 0, 80 +Sulfuras, Hand of Ragnaros, -1, 80 +Backstage passes to a TAFKAL80ETC concert, 5, 35 +Backstage passes to a TAFKAL80ETC concert, 0, 50 +Backstage passes to a TAFKAL80ETC concert, -5, 0 +Conjured Mana Cake, -7, 0 + +-------- day 11 -------- +name, sellIn, quality ++5 Dexterity Vest, -1, 8 +Aged Brie, -9, 20 +Elixir of the Mongoose, -6, 0 +Sulfuras, Hand of Ragnaros, 0, 80 +Sulfuras, Hand of Ragnaros, -1, 80 +Backstage passes to a TAFKAL80ETC concert, 4, 38 +Backstage passes to a TAFKAL80ETC concert, -1, 0 +Backstage passes to a TAFKAL80ETC concert, -6, 0 +Conjured Mana Cake, -8, 0 + +-------- day 12 -------- +name, sellIn, quality ++5 Dexterity Vest, -2, 6 +Aged Brie, -10, 22 +Elixir of the Mongoose, -7, 0 +Sulfuras, Hand of Ragnaros, 0, 80 +Sulfuras, Hand of Ragnaros, -1, 80 +Backstage passes to a TAFKAL80ETC concert, 3, 41 +Backstage passes to a TAFKAL80ETC concert, -2, 0 +Backstage passes to a TAFKAL80ETC concert, -7, 0 +Conjured Mana Cake, -9, 0 + +-------- day 13 -------- +name, sellIn, quality ++5 Dexterity Vest, -3, 4 +Aged Brie, -11, 24 +Elixir of the Mongoose, -8, 0 +Sulfuras, Hand of Ragnaros, 0, 80 +Sulfuras, Hand of Ragnaros, -1, 80 +Backstage passes to a TAFKAL80ETC concert, 2, 44 +Backstage passes to a TAFKAL80ETC concert, -3, 0 +Backstage passes to a TAFKAL80ETC concert, -8, 0 +Conjured Mana Cake, -10, 0 + +-------- day 14 -------- +name, sellIn, quality ++5 Dexterity Vest, -4, 2 +Aged Brie, -12, 26 +Elixir of the Mongoose, -9, 0 +Sulfuras, Hand of Ragnaros, 0, 80 +Sulfuras, Hand of Ragnaros, -1, 80 +Backstage passes to a TAFKAL80ETC concert, 1, 47 +Backstage passes to a TAFKAL80ETC concert, -4, 0 +Backstage passes to a TAFKAL80ETC concert, -9, 0 +Conjured Mana Cake, -11, 0 + +-------- day 15 -------- +name, sellIn, quality ++5 Dexterity Vest, -5, 0 +Aged Brie, -13, 28 +Elixir of the Mongoose, -10, 0 +Sulfuras, Hand of Ragnaros, 0, 80 +Sulfuras, Hand of Ragnaros, -1, 80 +Backstage passes to a TAFKAL80ETC concert, 0, 50 +Backstage passes to a TAFKAL80ETC concert, -5, 0 +Backstage passes to a TAFKAL80ETC concert, -10, 0 +Conjured Mana Cake, -12, 0 + +-------- day 16 -------- +name, sellIn, quality ++5 Dexterity Vest, -6, 0 +Aged Brie, -14, 30 +Elixir of the Mongoose, -11, 0 +Sulfuras, Hand of Ragnaros, 0, 80 +Sulfuras, Hand of Ragnaros, -1, 80 +Backstage passes to a TAFKAL80ETC concert, -1, 0 +Backstage passes to a TAFKAL80ETC concert, -6, 0 +Backstage passes to a TAFKAL80ETC concert, -11, 0 +Conjured Mana Cake, -13, 0 + +-------- day 17 -------- +name, sellIn, quality ++5 Dexterity Vest, -7, 0 +Aged Brie, -15, 32 +Elixir of the Mongoose, -12, 0 +Sulfuras, Hand of Ragnaros, 0, 80 +Sulfuras, Hand of Ragnaros, -1, 80 +Backstage passes to a TAFKAL80ETC concert, -2, 0 +Backstage passes to a TAFKAL80ETC concert, -7, 0 +Backstage passes to a TAFKAL80ETC concert, -12, 0 +Conjured Mana Cake, -14, 0 + +-------- day 18 -------- +name, sellIn, quality ++5 Dexterity Vest, -8, 0 +Aged Brie, -16, 34 +Elixir of the Mongoose, -13, 0 +Sulfuras, Hand of Ragnaros, 0, 80 +Sulfuras, Hand of Ragnaros, -1, 80 +Backstage passes to a TAFKAL80ETC concert, -3, 0 +Backstage passes to a TAFKAL80ETC concert, -8, 0 +Backstage passes to a TAFKAL80ETC concert, -13, 0 +Conjured Mana Cake, -15, 0 + +-------- day 19 -------- +name, sellIn, quality ++5 Dexterity Vest, -9, 0 +Aged Brie, -17, 36 +Elixir of the Mongoose, -14, 0 +Sulfuras, Hand of Ragnaros, 0, 80 +Sulfuras, Hand of Ragnaros, -1, 80 +Backstage passes to a TAFKAL80ETC concert, -4, 0 +Backstage passes to a TAFKAL80ETC concert, -9, 0 +Backstage passes to a TAFKAL80ETC concert, -14, 0 +Conjured Mana Cake, -16, 0 + +-------- day 20 -------- +name, sellIn, quality ++5 Dexterity Vest, -10, 0 +Aged Brie, -18, 38 +Elixir of the Mongoose, -15, 0 +Sulfuras, Hand of Ragnaros, 0, 80 +Sulfuras, Hand of Ragnaros, -1, 80 +Backstage passes to a TAFKAL80ETC concert, -5, 0 +Backstage passes to a TAFKAL80ETC concert, -10, 0 +Backstage passes to a TAFKAL80ETC concert, -15, 0 +Conjured Mana Cake, -17, 0 + +-------- day 21 -------- +name, sellIn, quality ++5 Dexterity Vest, -11, 0 +Aged Brie, -19, 40 +Elixir of the Mongoose, -16, 0 +Sulfuras, Hand of Ragnaros, 0, 80 +Sulfuras, Hand of Ragnaros, -1, 80 +Backstage passes to a TAFKAL80ETC concert, -6, 0 +Backstage passes to a TAFKAL80ETC concert, -11, 0 +Backstage passes to a TAFKAL80ETC concert, -16, 0 +Conjured Mana Cake, -18, 0 + +-------- day 22 -------- +name, sellIn, quality ++5 Dexterity Vest, -12, 0 +Aged Brie, -20, 42 +Elixir of the Mongoose, -17, 0 +Sulfuras, Hand of Ragnaros, 0, 80 +Sulfuras, Hand of Ragnaros, -1, 80 +Backstage passes to a TAFKAL80ETC concert, -7, 0 +Backstage passes to a TAFKAL80ETC concert, -12, 0 +Backstage passes to a TAFKAL80ETC concert, -17, 0 +Conjured Mana Cake, -19, 0 + +-------- day 23 -------- +name, sellIn, quality ++5 Dexterity Vest, -13, 0 +Aged Brie, -21, 44 +Elixir of the Mongoose, -18, 0 +Sulfuras, Hand of Ragnaros, 0, 80 +Sulfuras, Hand of Ragnaros, -1, 80 +Backstage passes to a TAFKAL80ETC concert, -8, 0 +Backstage passes to a TAFKAL80ETC concert, -13, 0 +Backstage passes to a TAFKAL80ETC concert, -18, 0 +Conjured Mana Cake, -20, 0 + +-------- day 24 -------- +name, sellIn, quality ++5 Dexterity Vest, -14, 0 +Aged Brie, -22, 46 +Elixir of the Mongoose, -19, 0 +Sulfuras, Hand of Ragnaros, 0, 80 +Sulfuras, Hand of Ragnaros, -1, 80 +Backstage passes to a TAFKAL80ETC concert, -9, 0 +Backstage passes to a TAFKAL80ETC concert, -14, 0 +Backstage passes to a TAFKAL80ETC concert, -19, 0 +Conjured Mana Cake, -21, 0 + +-------- day 25 -------- +name, sellIn, quality ++5 Dexterity Vest, -15, 0 +Aged Brie, -23, 48 +Elixir of the Mongoose, -20, 0 +Sulfuras, Hand of Ragnaros, 0, 80 +Sulfuras, Hand of Ragnaros, -1, 80 +Backstage passes to a TAFKAL80ETC concert, -10, 0 +Backstage passes to a TAFKAL80ETC concert, -15, 0 +Backstage passes to a TAFKAL80ETC concert, -20, 0 +Conjured Mana Cake, -22, 0 + +-------- day 26 -------- +name, sellIn, quality ++5 Dexterity Vest, -16, 0 +Aged Brie, -24, 50 +Elixir of the Mongoose, -21, 0 +Sulfuras, Hand of Ragnaros, 0, 80 +Sulfuras, Hand of Ragnaros, -1, 80 +Backstage passes to a TAFKAL80ETC concert, -11, 0 +Backstage passes to a TAFKAL80ETC concert, -16, 0 +Backstage passes to a TAFKAL80ETC concert, -21, 0 +Conjured Mana Cake, -23, 0 + +-------- day 27 -------- +name, sellIn, quality ++5 Dexterity Vest, -17, 0 +Aged Brie, -25, 50 +Elixir of the Mongoose, -22, 0 +Sulfuras, Hand of Ragnaros, 0, 80 +Sulfuras, Hand of Ragnaros, -1, 80 +Backstage passes to a TAFKAL80ETC concert, -12, 0 +Backstage passes to a TAFKAL80ETC concert, -17, 0 +Backstage passes to a TAFKAL80ETC concert, -22, 0 +Conjured Mana Cake, -24, 0 + +-------- day 28 -------- +name, sellIn, quality ++5 Dexterity Vest, -18, 0 +Aged Brie, -26, 50 +Elixir of the Mongoose, -23, 0 +Sulfuras, Hand of Ragnaros, 0, 80 +Sulfuras, Hand of Ragnaros, -1, 80 +Backstage passes to a TAFKAL80ETC concert, -13, 0 +Backstage passes to a TAFKAL80ETC concert, -18, 0 +Backstage passes to a TAFKAL80ETC concert, -23, 0 +Conjured Mana Cake, -25, 0 + +-------- day 29 -------- +name, sellIn, quality ++5 Dexterity Vest, -19, 0 +Aged Brie, -27, 50 +Elixir of the Mongoose, -24, 0 +Sulfuras, Hand of Ragnaros, 0, 80 +Sulfuras, Hand of Ragnaros, -1, 80 +Backstage passes to a TAFKAL80ETC concert, -14, 0 +Backstage passes to a TAFKAL80ETC concert, -19, 0 +Backstage passes to a TAFKAL80ETC concert, -24, 0 +Conjured Mana Cake, -26, 0 + +-------- day 30 -------- +name, sellIn, quality ++5 Dexterity Vest, -20, 0 +Aged Brie, -28, 50 +Elixir of the Mongoose, -25, 0 +Sulfuras, Hand of Ragnaros, 0, 80 +Sulfuras, Hand of Ragnaros, -1, 80 +Backstage passes to a TAFKAL80ETC concert, -15, 0 +Backstage passes to a TAFKAL80ETC concert, -20, 0 +Backstage passes to a TAFKAL80ETC concert, -25, 0 +Conjured Mana Cake, -27, 0 + diff --git a/ApprovalTest.cs b/test/ApprovalTest.cs similarity index 96% rename from ApprovalTest.cs rename to test/ApprovalTest.cs index 7b5d2db..062daeb 100644 --- a/ApprovalTest.cs +++ b/test/ApprovalTest.cs @@ -1,4 +1,5 @@ -using Xunit; + +using Xunit; using System; using System.IO; using System.Text; @@ -24,3 +25,4 @@ namespace csharpcore } } } + diff --git a/test/BackstagePassesTest.cs b/test/BackstagePassesTest.cs new file mode 100644 index 0000000..f27ed35 --- /dev/null +++ b/test/BackstagePassesTest.cs @@ -0,0 +1,78 @@ +using System.Collections.Generic; +using Xunit; + +namespace csharpcore +{ + public class BackstagePassesTest + { + private readonly GildedRose _rose; + private List _items = new List(); + + public BackstagePassesTest() + { + _rose = new GildedRose(_items); + } + + [Fact] + public void ShouldIncreaseQualityWhenSellInApproaches() + { + var item = GenerateItem(0, 30); + + _rose.UpdateQuality(); + Assert.Equal("Backstage passes to a TAFKAL80ETC concert", item.Name); + Assert.Equal(29, item.SellIn); + Assert.Equal(1, item.Quality); + + _rose.UpdateQuality(); + Assert.Equal("Backstage passes to a TAFKAL80ETC concert", item.Name); + Assert.Equal(28, item.SellIn); + Assert.Equal(2, item.Quality); + } + + [Theory] + [InlineData(10)] + [InlineData(8)] + public void ShouldIncreaseQualityByTwoWhenSellInIsInTenDaysOrLess(int sellInDays) + { + const int startQuality = 42; + var item = GenerateItem(startQuality, sellInDays); + _rose.UpdateQuality(); + + Assert.Equal(startQuality + 2, item.Quality); + } + + [Theory] + [InlineData(5)] + [InlineData(3)] + public void ShouldIncreaseQualityByThreeWhenSellInIsInFiveDaysOrLess(int sellInDays) + { + const int startQuality = 42; + var item = GenerateItem(startQuality, sellInDays); + _rose.UpdateQuality(); + + Assert.Equal(startQuality + 3, item.Quality); + } + + [Theory] + [InlineData(0)] + [InlineData(-1)] + public void ShouldDropQualityToZeroWhenSellInIsPassed(int sellIn) + { + var item = GenerateItem(20, sellIn); + + _rose.UpdateQuality(); + + Assert.Equal("Backstage passes to a TAFKAL80ETC concert", item.Name); + Assert.Equal(sellIn - 1, item.SellIn); + Assert.Equal(0, item.Quality); + } + + private Item GenerateItem(int q, int s) + { + var item = new Item {Name = "Backstage passes to a TAFKAL80ETC concert", Quality = q, SellIn = s}; + _items.Clear(); + _items.Add(item); + return item; + } + } +} \ No newline at end of file diff --git a/test/BasicItemTest.cs b/test/BasicItemTest.cs new file mode 100644 index 0000000..7416103 --- /dev/null +++ b/test/BasicItemTest.cs @@ -0,0 +1,55 @@ +using Xunit; +using System.Collections.Generic; + +namespace csharpcore +{ + public class BasicItemTest + { + [Fact] + public void ShouldUpdateQuality() + { + const int startSellIn = 31; + const int startQuality = 20; + + var item = new Item {Name = "+5 Dexterity Vest", SellIn = startSellIn, Quality = startQuality}; + var app = new GildedRose(new List {item}); + + app.UpdateQuality(); + Assert.Equal("+5 Dexterity Vest", item.Name); + Assert.Equal(startSellIn - 1, item.SellIn); + Assert.Equal(startQuality - 1, item.Quality); + } + + [Theory] + [InlineData(1, 1)] + [InlineData(0, 2)] /* Once the sell by date has passed, Quality degrades twice as fast. */ + [InlineData(-1, 2)] /* Once the sell by date has passed, Quality degrades twice as fast. */ + public void ShouldDecrementQualityAccordingToSellInValue(int sellIn, int expectedDecrement) + { + const int startQuality = 20; + + var item = new Item {Name = "+5 Dexterity Vest", SellIn = sellIn, Quality = startQuality}; + var app = new GildedRose(new List {item}); + + app.UpdateQuality(); + + Assert.Equal(startQuality - expectedDecrement, item.Quality); + } + + [Fact] + public void ShouldNotSetDecrementQualityToNegativeValue() + { + const int startQuality = 0; + + var item = new Item {Name = "+5 Dexterity Vest", SellIn = 1, Quality = startQuality}; + var app = new GildedRose(new List {item}); + + app.UpdateQuality(); + app.UpdateQuality(); + app.UpdateQuality(); + app.UpdateQuality(); + + Assert.Equal(0, item.Quality); + } + } +} \ No newline at end of file diff --git a/test/SulfurasTest.cs b/test/SulfurasTest.cs new file mode 100644 index 0000000..43a1519 --- /dev/null +++ b/test/SulfurasTest.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using Xunit; + +namespace csharpcore +{ + public class SulfurasTest + { + private readonly List _items = new List(); + private readonly GildedRose _rose; + + public SulfurasTest() => _rose = new GildedRose(_items); + + [Theory] + [MemberData(nameof(SulfurasData))] + public void ShouldNotDecreaseQuality(int sellInDays) + { + var item = GenerateItem(1, sellInDays); + _rose.UpdateQuality(); + Assert.Equal(1, item.Quality); + Assert.Equal(sellInDays, item.SellIn); + } + + private Item GenerateItem(int quality, int sellIn) + { + var item = new Item {Name = "Sulfuras, Hand of Ragnaros", Quality = quality, SellIn = sellIn}; + _items.Clear(); + _items.Add(item); + return item; + } + + private static Random rnd = new Random(); + public static IEnumerable SulfurasData() => Enumerable + .Range(0, 5) + .Select(n => new object[] { n }) + .Concat( + Enumerable.Range(0, 3) + .Select(_ => new object[] { rnd.Next() })); + } +} \ No newline at end of file