Skip to content

Instantly share code, notes, and snippets.

@trikitrok
Created June 28, 2023 12:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save trikitrok/f9c2786da1712e72d2766947b0b7a5b6 to your computer and use it in GitHub Desktop.
Save trikitrok/f9c2786da1712e72d2766947b0b7a5b6 to your computer and use it in GitHub Desktop.
with surviving mutants
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 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_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(8, 6);
GildedRose shop = new GildedRose(new[] { item1 });
shop.UpdateQuality();
Assert.Equal(8, item1.Quality);
Assert.Equal(7, item1.SellIn);
}
[Fact]
public void backstage_increase_quality_by_3_when_sellIn_is_between_5_and_1()
{
Item item1 = BackstagePasses(4, 6);
GildedRose shop = new GildedRose(new[] { item1 });
shop.UpdateQuality();
Assert.Equal(9, item1.Quality);
Assert.Equal(3, item1.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()
{
Item item = BackstagePasses(11, MaxQuality);
GildedRose shop = new GildedRose(new[] { item });
shop.UpdateQuality();
Assert.Equal(MaxQuality, item.Quality);
Assert.Equal(10, 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