Skip to content

Instantly share code, notes, and snippets.

@franreyes
Last active January 22, 2025 13:45
Show Gist options
  • Save franreyes/91a807ff3deff3927d31215b21a17642 to your computer and use it in GitHub Desktop.
Save franreyes/91a807ff3deff3927d31215b21a17642 to your computer and use it in GitHub Desktop.
TDD Gilded Rose Kata test solution in C# without add changes to the Item
using NUnit.Framework;
namespace Gilded_rose.Test;
public class GildRoseTest
{
private const int MinQuality = 0;
private const int MaxQuality = 50;
[Test]
public void regular_items_quality_decreases_every_day()
{
Item item = RegularItem(1, 3);
GildedRose shop = new GildedRose(new[] { item });
shop.UpdateQuality();
Assert.That(item.SellIn, Is.EqualTo(0));
Assert.That(item.Quality, Is.EqualTo(2));
}
[Test]
public void expired_regular_items_quality_decreases_twice_as_fast_once_sellIn_has_passed()
{
Item item = RegularItem(0, 3);
GildedRose shop = new GildedRose(new[] { item });
shop.UpdateQuality();
Assert.That(item.SellIn, Is.EqualTo(-1));
Assert.That(item.Quality, Is.EqualTo(1));
}
[Test]
public void regular_items_quality_never_decreases_below_the_minimum_quality()
{
Item item = RegularItem(5, 0);
GildedRose shop = new GildedRose(new[] { item });
shop.UpdateQuality();
Assert.That(item.SellIn, Is.EqualTo(4));
Assert.That(item.Quality, Is.EqualTo(MinQuality));
}
[Test]
public void expired_regular_items_quality_never_decreases_below_the_minimum_quality()
{
Item item = RegularItem(0, 1);
GildedRose shop = new GildedRose(new[] { item });
shop.UpdateQuality();
Assert.That(item.SellIn, Is.EqualTo(-1));
Assert.That(item.Quality, Is.EqualTo(MinQuality));
}
[Test]
public void aged_brie_increases_quality_by_1()
{
Item item = AgedBrie(5, 8);
GildedRose shop = new GildedRose(new[] { item });
shop.UpdateQuality();
Assert.That(item.SellIn, Is.EqualTo(4));
Assert.That(item.Quality, Is.EqualTo(9));
}
[Test]
public void aged_brie_quality_never_increases_over_the_maximun_quality()
{
Item item = AgedBrie(5, MaxQuality);
GildedRose shop = new GildedRose(new[] { item });
shop.UpdateQuality();
Assert.That(item.SellIn, Is.EqualTo(4));
Assert.That(item.Quality, Is.EqualTo(MaxQuality));
}
[Test]
public void expired_aged_brie_quality_never_increases_over_the_maximun_quality()
{
Item item = AgedBrie(0, MaxQuality - 1);
GildedRose shop = new GildedRose(new[] { item });
shop.UpdateQuality();
Assert.That(item.SellIn, Is.EqualTo(-1));
Assert.That(item.Quality, Is.EqualTo(MaxQuality));
}
[Test]
public void expired_aged_brie_increases_quality_by_2()
{
Item item = AgedBrie(0, 8);
GildedRose shop = new GildedRose(new[] { item });
shop.UpdateQuality();
Assert.That(item.SellIn, Is.EqualTo(-1));
Assert.That(item.Quality, Is.EqualTo(10));
}
[Test]
public void sulfuras_never_changes()
{
Item item = Sulfuras(1, 80);
GildedRose shop = new GildedRose(new[] { item });
shop.UpdateQuality();
Assert.That(item.SellIn, Is.EqualTo(1));
Assert.That(item.Quality, Is.EqualTo(80));
}
[Test]
public void expired_sulfuras_never_changes()
{
Item item = Sulfuras(-1, 80);
GildedRose shop = new GildedRose(new[] { item });
shop.UpdateQuality();
Assert.That(item.SellIn, Is.EqualTo(-1));
Assert.That(item.Quality, Is.EqualTo(80));
}
[Test]
public void backstage_increase_quality_by_1_when_sellIn_is_greater_than_10()
{
Item item = BackstagePasses(11, 6);
GildedRose shop = new GildedRose(new[] { item });
shop.UpdateQuality();
Assert.That(item.SellIn, Is.EqualTo(10));
Assert.That(item.Quality, Is.EqualTo(7));
}
[Test]
public void backstage_increase_quality_by_2_when_sellIn_is_between_10_and_6()
{
Item item1 = BackstagePasses(10, 6);
Item item2 = BackstagePasses(6, 20);
GildedRose shop = new GildedRose(new[] { item1, item2 });
shop.UpdateQuality();
Assert.That(item1.SellIn, Is.EqualTo(9));
Assert.That(item1.Quality, Is.EqualTo(8));
Assert.That(item2.SellIn, Is.EqualTo(5));
Assert.That(item2.Quality, Is.EqualTo(22));
}
[Test]
public void backstage_increase_quality_by_3_when_sellIn_is_between_5_and_1()
{
Item item1 = BackstagePasses(5, 6);
Item item2 = BackstagePasses(1, 20);
GildedRose shop = new GildedRose(new[] { item1, item2 });
shop.UpdateQuality();
Assert.That(item1.SellIn, Is.EqualTo(4));
Assert.That(item1.Quality, Is.EqualTo(9));
Assert.That(item2.SellIn, Is.EqualTo(0));
Assert.That(item2.Quality, Is.EqualTo(23));
}
[Test]
public void backstage_quality_drops_to_0_after_the_concert()
{
Item item = BackstagePasses(0, 6);
GildedRose shop = new GildedRose(new[] { item });
shop.UpdateQuality();
Assert.That(item.SellIn, Is.EqualTo(-1));
Assert.That(item.Quality, Is.EqualTo(MinQuality));
}
[Test]
public void backstage_quality_never_increases_over_the_maximun_quality_when_increasing_by_1()
{
Item item = BackstagePasses(11, MaxQuality);
GildedRose shop = new GildedRose(new[] { item });
shop.UpdateQuality();
Assert.That(item.SellIn, Is.EqualTo(10));
Assert.That(item.Quality, Is.EqualTo(MaxQuality));
}
[Test]
public void backstage_quality_never_increases_over_the_maximun_quality_when_increasing_by_2()
{
Item item = BackstagePasses(8, MaxQuality - 1);
GildedRose shop = new GildedRose(new[] { item });
shop.UpdateQuality();
Assert.That(item.SellIn, Is.EqualTo(7));
Assert.That(item.Quality, Is.EqualTo(MaxQuality));
}
[Test]
public void backstage_quality_never_increases_over_the_maximun_quality_when_increasing_by_3()
{
Item item = BackstagePasses(4, MaxQuality - 2);
GildedRose shop = new GildedRose(new[] { item });
shop.UpdateQuality();
Assert.That(item.SellIn, Is.EqualTo(3));
Assert.That(item.Quality, Is.EqualTo(MaxQuality));
}
[Test]
public void update_several_items()
{
Item item1 = RegularItem(1, 3);
Item item2 = AgedBrie(2, 3);
GildedRose shop = new GildedRose(new[] { item1, item2 });
shop.UpdateQuality();
Assert.That(item1.SellIn, Is.EqualTo(0));
Assert.That(item1.Quality, Is.EqualTo(2));
Assert.That(item2.SellIn, Is.EqualTo(1));
Assert.That(item2.Quality, Is.EqualTo(4));
}
private Item RegularItem(int sellIn, int quality)
{
return new Item("foo", sellIn, quality);
}
private Item AgedBrie(int sellIn, int quality)
{
return new Item("Aged Brie", sellIn, quality);
}
private Item Sulfuras(int sellIn, int quality)
{
return new Item("Sulfuras, Hand of Ragnaros", sellIn, quality);
}
private Item BackstagePasses(int sellIn, int quality)
{
return new Item("Backstage passes to a TAFKAL80ETC concert", sellIn, quality);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment