From dd66f563e988ba39e1696e1a8d062434ca6c5013 Mon Sep 17 00:00:00 2001 From: Sarah Ashri Date: Wed, 13 Mar 2024 10:17:00 +1000 Subject: [PATCH] Extract item types condition from the DailyItemUpdate method and refactored related tests * in tests: - renamed tests to use the different item types - Added more test cases to support the fixed functionality of better types' recognition. * reran the 30 days texttest to verify the changes until now --- csharpcore/GildedRose/GildedRose.cs | 23 +++-- .../UpdateQualityTestFixture.cs | 95 ++++++++++--------- 2 files changed, 65 insertions(+), 53 deletions(-) diff --git a/csharpcore/GildedRose/GildedRose.cs b/csharpcore/GildedRose/GildedRose.cs index 9fb11723..6f7170f3 100644 --- a/csharpcore/GildedRose/GildedRose.cs +++ b/csharpcore/GildedRose/GildedRose.cs @@ -20,14 +20,23 @@ public class GildedRose DailyItemUpdate(item); } } + + private static bool IsLegendaryItem(Item item) => item.Name.ToLower().Contains("sulfuras"); + + private static bool IsBackstagePassesItem(Item item) => item.Name.ToLower().Contains("backstage passes"); + + private static bool IsBetterWithAgeItem(Item item) => item.Name.ToLower().Equals("aged brie"); + + + private void DailyItemUpdate(Item item) { - if (item.Name != "Aged Brie" && item.Name != "Backstage passes to a TAFKAL80ETC concert") + if (!IsBetterWithAgeItem(item) && !IsBackstagePassesItem(item)) { if (item.Quality > MinQuality) { - if (item.Name != "Sulfuras, Hand of Ragnaros") + if (!IsLegendaryItem(item)) { item.Quality = item.Quality - 1; } @@ -39,7 +48,7 @@ public class GildedRose { item.Quality = item.Quality + 1; - if (item.Name == "Backstage passes to a TAFKAL80ETC concert") + if (IsBackstagePassesItem(item)) { if (item.SellIn < 11) { @@ -60,20 +69,20 @@ public class GildedRose } } - if (item.Name != "Sulfuras, Hand of Ragnaros") + if (!IsLegendaryItem(item)) { item.SellIn = item.SellIn - 1; } if (item.SellIn < 0) { - if (item.Name != "Aged Brie") + if (!IsBetterWithAgeItem(item)) { - if (item.Name != "Backstage passes to a TAFKAL80ETC concert") + if (!IsBackstagePassesItem(item)) { if (item.Quality > MinQuality) { - if (item.Name != "Sulfuras, Hand of Ragnaros") + if (!IsLegendaryItem(item)) { item.Quality = item.Quality - 1; } diff --git a/csharpcore/GildedRoseTests/UpdateQualityTestFixture.cs b/csharpcore/GildedRoseTests/UpdateQualityTestFixture.cs index 2017ac3b..e8123d4c 100644 --- a/csharpcore/GildedRoseTests/UpdateQualityTestFixture.cs +++ b/csharpcore/GildedRoseTests/UpdateQualityTestFixture.cs @@ -1,5 +1,5 @@ -using System.Collections.Generic; -using FluentAssertions; +using FluentAssertions; +using System.Collections.Generic; using GildedRoseKata; using NUnit.Framework; @@ -61,7 +61,7 @@ public class UpdateQualityTestFixture [Test] - public void AgedBrie_WhenNotExpired_Should_IncreaseQualityByOne() + public void BetterWithAgeItems_WhenNotExpired_Should_IncreaseQualityByOne() { var items = new List { new() { Name = "Aged Brie", SellIn = 1, Quality = 0 } }; var expectedItemsAfterTest = new List { new() { Name = "Aged Brie", SellIn = 0, Quality = 1 } }; @@ -73,10 +73,10 @@ public class UpdateQualityTestFixture } [Test] - public void AgedBrie_WhenExpired_Should_IncreaseQualityByTwo() + public void BetterWithAgeItems_WhenExpired_Should_IncreaseQualityByTwo() { - var items = new List { new() { Name = "Aged Brie", SellIn = 0, Quality = 1 } }; - var expectedItemsAfterTest = new List { new() { Name = "Aged Brie", SellIn = -1, Quality = 3 } }; + var items = new List { new() { Name = "aged Brie", SellIn = 0, Quality = 1 } }; + var expectedItemsAfterTest = new List { new() { Name = "aged Brie", SellIn = -1, Quality = 3 } }; var app = new GildedRose(items); app.UpdateQuality(); @@ -103,23 +103,18 @@ public class UpdateQualityTestFixture [Test] - public void SulfurasHandOfRagnaros_QualityAndSellIn_NeverChange() + public void LegendaryItems_QualityAndSellIn_NeverChange() { - var items = new List { new() { Name = "Sulfuras, Hand of Ragnaros", SellIn = 3, Quality = 3 } }; - var expectedItemsAfterTest = new List { new() { Name = "Sulfuras, Hand of Ragnaros", SellIn = 3, Quality = 3 } }; - - var app = new GildedRose(items); - - app.UpdateQuality(); - items.Should().BeEquivalentTo(expectedItemsAfterTest); - } - - [Test] - [Ignore("Bug in code - support only item with exact name: Sulfuras, Hand of Ragnaros")] - public void Sulfuras_QualityAndSellIn_NeverChange() - { - var items = new List { new() { Name = "Sulfuras", SellIn = 3, Quality = 3 } }; - var expectedItemsAfterTest = new List { new() { Name = "Sulfuras", SellIn = 3, Quality = 3 } }; + var items = new List + { + new() { Name = "Sulfuras, Hand of Ragnaros", SellIn = 3, Quality = 3 }, + new() { Name = "sulfuras", SellIn = 3, Quality = 31 } + }; + var expectedItemsAfterTest = new List + { + new() { Name = "Sulfuras, Hand of Ragnaros", SellIn = 3, Quality = 3 }, + new() { Name = "sulfuras", SellIn = 3, Quality = 31 } + }; var app = new GildedRose(items); @@ -129,10 +124,10 @@ public class UpdateQualityTestFixture [Test] [Ignore("not implemented yet - Legendary Items should not take quality (constant at 80)")] - public void Sulfuras_Quality_IsConstant80() + public void LegendaryItems_Quality_IsConstant80() { - var items = new List { new() { Name = "Sulfuras", SellIn = 3 } }; - var expectedItemsAfterTest = new List { new() { Name = "Sulfuras", SellIn = 3, Quality = 80 } }; + var items = new List { new() { Name = "something sulfuras something", SellIn = 3 } }; + var expectedItemsAfterTest = new List { new() { Name = "something sulfuras something", SellIn = 3, Quality = 80 } }; var app = new GildedRose(items); @@ -142,17 +137,17 @@ public class UpdateQualityTestFixture [Test] - public void BackstagePassesFullName_WhenExpiryInOver10Days_QualityIncreaseByOne() + public void BackstagePassesItems_WhenExpiryInOver10Days_QualityIncreaseByOne() { var items = new List { new() { Name = "Backstage passes to a TAFKAL80ETC concert", SellIn = 11, Quality = 4 }, - new() { Name = "Backstage passes to a TAFKAL80ETC concert", SellIn = 20, Quality = 40 } + new() { Name = "backstage passes to some other show", SellIn = 20, Quality = 40 } }; var expectedItemsAfterTest = new List { new() { Name = "Backstage passes to a TAFKAL80ETC concert", SellIn = 10, Quality = 5 }, - new() { Name = "Backstage passes to a TAFKAL80ETC concert", SellIn = 19, Quality = 41 } + new() { Name = "backstage passes to some other show", SellIn = 19, Quality = 41 } }; var app = new GildedRose(items); @@ -163,17 +158,17 @@ public class UpdateQualityTestFixture [Test] - public void BackstagePassesFullName_WhenExpiryIn10To6Days_QualityIncreaseByTwo() + public void BackstagePassesItems_WhenExpiryIn10To6Days_QualityIncreaseByTwo() { var items = new List { - new() { Name = "Backstage passes to a TAFKAL80ETC concert", SellIn = 10, Quality = 4 }, - new() { Name = "Backstage passes to a TAFKAL80ETC concert", SellIn = 6, Quality = 41 } + new() { Name = "backstage passes to a TAFKAL80ETC concert", SellIn = 10, Quality = 4 }, + new() { Name = "Backstage passes to some other show", SellIn = 6, Quality = 41 } }; var expectedItemsAfterTest = new List { - new() { Name = "Backstage passes to a TAFKAL80ETC concert", SellIn = 9, Quality = 6 }, - new() { Name = "Backstage passes to a TAFKAL80ETC concert", SellIn = 5, Quality = 43 } + new() { Name = "backstage passes to a TAFKAL80ETC concert", SellIn = 9, Quality = 6 }, + new() { Name = "Backstage passes to some other show", SellIn = 5, Quality = 43 } }; var app = new GildedRose(items); @@ -183,16 +178,16 @@ public class UpdateQualityTestFixture } [Test] - public void BackstagePassesFullName_WhenExpiryIn5to1Days_QualityIncreaseByThree() + public void BackstagePassesItems_WhenExpiryIn5to1Days_QualityIncreaseByThree() { var items = new List { - new() { Name = "Backstage passes to a TAFKAL80ETC concert", SellIn = 5, Quality = 4 }, + new() { Name = "Backstage passes to some other show", SellIn = 5, Quality = 4 }, new() { Name = "Backstage passes to a TAFKAL80ETC concert", SellIn = 1, Quality = 41 } }; var expectedItemsAfterTest = new List { - new() { Name = "Backstage passes to a TAFKAL80ETC concert", SellIn = 4, Quality = 7 }, + new() { Name = "Backstage passes to some other show", SellIn = 4, Quality = 7 }, new() { Name = "Backstage passes to a TAFKAL80ETC concert", SellIn = 0, Quality = 44 } }; @@ -203,24 +198,24 @@ public class UpdateQualityTestFixture } [Test] - public void BackstagePassesFullName_MaximumQuality_Is50() + public void BackstagePassesItems_MaximumQuality_Is50() { var items = new List { - new() { Name = "Backstage passes to a TAFKAL80ETC concert", SellIn = 15, Quality = 49 }, - new() { Name = "Backstage passes to a TAFKAL80ETC concert", SellIn = 10, Quality = 49 }, + new() { Name = "Backstage passes", SellIn = 15, Quality = 49 }, + new() { Name = "Backstage passes to some other show", SellIn = 10, Quality = 49 }, new() { Name = "Backstage passes to a TAFKAL80ETC concert", SellIn = 5, Quality = 48 } }; var expectedItemsAfterDay1 = new List { - new() { Name = "Backstage passes to a TAFKAL80ETC concert", SellIn = 14, Quality = 50 }, - new() { Name = "Backstage passes to a TAFKAL80ETC concert", SellIn = 9, Quality = 50 }, + new() { Name = "Backstage passes", SellIn = 14, Quality = 50 }, + new() { Name = "Backstage passes to some other show", SellIn = 9, Quality = 50 }, new() { Name = "Backstage passes to a TAFKAL80ETC concert", SellIn = 4, Quality = 50 } }; var expectedItemsAfterDay2 = new List { - new() { Name = "Backstage passes to a TAFKAL80ETC concert", SellIn = 13, Quality = 50 }, - new() { Name = "Backstage passes to a TAFKAL80ETC concert", SellIn = 8, Quality = 50 }, + new() { Name = "Backstage passes", SellIn = 13, Quality = 50 }, + new() { Name = "Backstage passes to some other show", SellIn = 8, Quality = 50 }, new() { Name = "Backstage passes to a TAFKAL80ETC concert", SellIn = 3, Quality = 50 } }; @@ -234,10 +229,18 @@ public class UpdateQualityTestFixture } [Test] - public void BackstagePassesFullName_WhenExpired_QualityDropsTo0() + public void BackstagePassesItems_WhenExpired_QualityDropsTo0() { - var items = new List { new() { Name = "Backstage passes to a TAFKAL80ETC concert", SellIn = 0, Quality = 4 } }; - var expectedItemsAfterTest = new List { new() { Name = "Backstage passes to a TAFKAL80ETC concert", SellIn = -1, Quality = 0 } }; + var items = new List + { + new() { Name = "Backstage passes to a TAFKAL80ETC concert", SellIn = 0, Quality = 4 }, + new() { Name = "Another type of backstage passes", SellIn = 0, Quality = 4 } + }; + var expectedItemsAfterTest = new List + { + new() { Name = "Backstage passes to a TAFKAL80ETC concert", SellIn = -1, Quality = 0 }, + new() { Name = "Another type of backstage passes", SellIn = -1, Quality = 0 } + }; var app = new GildedRose(items);