Skip to content

Instantly share code, notes, and snippets.

@franreyes
Last active February 23, 2023 11:33
Show Gist options
  • Save franreyes/7ccd3cb385c57afd590fde075f8479f2 to your computer and use it in GitHub Desktop.
Save franreyes/7ccd3cb385c57afd590fde075f8479f2 to your computer and use it in GitHub Desktop.
TDD Gilded Rose Kata test solution
using Xunit;
namespace Gilded_rose.Test
{
public class GildedRoseTest
{
private const int MinQuality = 0;
private const int MaxQuality = 50;
[Fact]
public void regular_items_quality_decreases_every_day()
{
Item item = RegularItem(1, 3);
GildedRose shop = new GildedRose(new[] { item });
shop.UpdateQuality();
Assert.Equal(2, item.Quality);
Assert.Equal(0, item.SellIn);
}
[Fact]
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.Equal(1, item.Quality);
Assert.Equal( -1, item.SellIn);
}
[Fact]
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.Equal(MinQuality, item.Quality);
Assert.Equal(4, item.SellIn);
}
[Fact]
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.Equal(MinQuality, item.Quality);
Assert.Equal(-1,item.SellIn);
}
[Fact]
public void aged_brie_increases_quality_by_1()
{
Item item = AgedBrie(5, 8);
GildedRose shop = new GildedRose(new[] { item });
shop.UpdateQuality();
Assert.Equal(9, item.Quality);
Assert.Equal(4, item.SellIn);
}
[Fact]
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.Equal(MaxQuality, item.Quality);
Assert.Equal(4, item.SellIn);
}
[Fact]
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.Equal(MaxQuality, item.Quality);
Assert.Equal(-1, item.SellIn);
}
[Fact]
public void expired_aged_brie_increases_quality_by_2()
{
Item item = AgedBrie(0, 8);
GildedRose shop = new GildedRose(new[] { item });
shop.UpdateQuality();
Assert.Equal(10, item.Quality);
Assert.Equal(-1, item.SellIn);
}
[Fact]
public void sulfuras_never_changes()
{
Item item = Sulfuras(1, 80);
GildedRose shop = new GildedRose(new[] { item });
shop.UpdateQuality();
Assert.Equal(80, item.Quality);
Assert.Equal(1, item.SellIn);
}
[Fact]
public void expired_sulfuras_never_changes()
{
Item item = Sulfuras(-1, 80);
GildedRose shop = new GildedRose(new[] { item });
shop.UpdateQuality();
Assert.Equal(80, item.Quality);
Assert.Equal(-1, item.SellIn);
}
[Fact]
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.Equal(7, item.Quality);
Assert.Equal(10, item.SellIn);
}
[Fact]
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.Equal(8, item1.Quality);
Assert.Equal(9, item1.SellIn);
Assert.Equal(22, item2.Quality);
Assert.Equal(5, item2.SellIn);
}
[Fact]
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.Equal(9, item1.Quality);
Assert.Equal(4, item1.SellIn);
Assert.Equal(23, item2.Quality);
Assert.Equal(0, item2.SellIn);
}
[Fact]
public void backstage_quality_drops_to_0_after_the_concert()
{
Item item = BackstagePasses(0, 6);
GildedRose shop = new GildedRose(new[] { item });
shop.UpdateQuality();
Assert.Equal(MinQuality, item.Quality);
Assert.Equal(-1, item.SellIn);
}
[Fact]
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.Equal(MaxQuality, item.Quality);
Assert.Equal(10, item.SellIn);
}
[Fact]
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.Equal(MaxQuality, item.Quality);
Assert.Equal(7, item.SellIn);
}
[Fact]
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.Equal(MaxQuality, item.Quality);
Assert.Equal(3, item.SellIn);
}
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