Add regression coverage to UpdateQuality unit tests to reduce reliance on texttest approval test

This commit is contained in:
Sarah Ashri 2024-03-15 15:39:08 +10:00
parent bdf20e735c
commit c850c04414

View File

@ -5,66 +5,72 @@ using NUnit.Framework;
namespace GildedRoseTests;
public class UpdateQualityTestFixture
public class DailyUpdateTestFixture
{
[Test]
public void PlainItems_WhenNotExpired_Should_DecreaseSellInAndQualityByOne()
{
var items = new List<Item> { new ItemBuilder("item 1", 2, 3).Build() };
var expectedItemsAfterTest = new List<Item> { new ItemBuilder("item 1", 1, 2).Build() };
var app = new GildedRose(items);
app.UpdateQuality();
items.Should().BeEquivalentTo(expectedItemsAfterTest);
}
[Test]
public void PlainItems_WhenExpired_Should_DecreaseSellInByOneAndQualityByTwo()
{
var items = new List<Item> { new ItemBuilder("item 1", 0, 5).Build() };
var expectedItemsAfterDay1 = new List<Item> { new ItemBuilder("item 1", -1, 3).Build() };
var expectedItemsAfterDay2 = new List<Item> { new ItemBuilder("item 1", -2, 1).Build() };
var app = new GildedRose(items);
app.UpdateQuality();
items.Should().BeEquivalentTo(expectedItemsAfterDay1);
app.UpdateQuality();
items.Should().BeEquivalentTo(expectedItemsAfterDay2);
}
[Test]
public void ItemsQuality_Should_NeverGoBelow0()
public void RegularItems_WhenNotExpired_Should_DecreaseSellInBy1AndQualityBy1DownTo0()
{
var items = new List<Item>
{
new ItemBuilder("item 1", 0, 0).Build(),
new ItemBuilder("item 1", 0, 1).Build()
new ItemBuilder("item 1", 2, 3).Build(),
new ItemBuilder("+5 Dexterity Vest", 2, 1).Build(),
new ItemBuilder("item 1", 2, 0).Build()
};
var expectedItemsAfterTest = new List<Item>
{
new ItemBuilder("item 1", -1, 0).Build(),
new ItemBuilder("item 1", 1, 2).Build(),
new ItemBuilder("+5 Dexterity Vest", 1, 0).Build(),
new ItemBuilder("item 1", 1, 0).Build()
};
var app = new GildedRose(items);
app.UpdateQuality();
items.Should().BeEquivalentTo(expectedItemsAfterTest);
}
[Test]
public void RegularItems_WhenExpired_Should_DecreaseSellInBy1AndQualityBy2DownTo0()
{
var items = new List<Item>
{
new ItemBuilder("item 1", -1, 3).Build(),
new ItemBuilder("+5 Dexterity Vest", -1, 1).Build(),
new ItemBuilder("item 1", -1, 0).Build()
};
var expectedItemsAfterTest = new List<Item>
{
new ItemBuilder("item 1", -2, 1).Build(),
new ItemBuilder("+5 Dexterity Vest", -2, 0).Build(),
new ItemBuilder("item 1", -2, 0).Build()
};
var app = new GildedRose(items);
app.UpdateQuality();
app.UpdateQuality();
items.Should().BeEquivalentTo(expectedItemsAfterTest);
}
[Test]
public void BetterWithAgeItems_WhenNotExpired_Should_IncreaseQualityByOne()
public void BetterWithAgeItems_WhenNotExpired_Should_DecreaseSellInBy1AndIncreaseQualityBy1Upto50()
{
var items = new List<Item> { new ItemBuilder("Aged Brie", 1, 0).Build() };
var expectedItemsAfterTest = new List<Item> { new ItemBuilder("Aged Brie", 0, 1).Build() };
var items = new List<Item>
{
new ItemBuilder("Aged Brie", 1, 0).Build(),
new ItemBuilder("Aged Brie", 1, 49).Build(),
new ItemBuilder("Aged Brie", 1, 50).Build()
};
var expectedItemsAfterTest = new List<Item>
{
new ItemBuilder("Aged Brie", 0, 1).Build(),
new ItemBuilder("Aged Brie", 0, 50).Build(),
new ItemBuilder("Aged Brie", 0, 50).Build()
};
var app = new GildedRose(items);
app.UpdateQuality();
@ -73,10 +79,20 @@ public class UpdateQualityTestFixture
}
[Test]
public void BetterWithAgeItems_WhenExpired_Should_IncreaseQualityByTwo()
public void BetterWithAgeItems_WhenExpired_Should_DecreaseSellInBy1AndIncreaseQualityBy2Upto50()
{
var items = new List<Item> { new ItemBuilder("aged Brie", 0, 1).Build() };
var expectedItemsAfterTest = new List<Item> { new ItemBuilder("aged Brie", -1, 3).Build() };
var items = new List<Item>
{
new ItemBuilder("aged Brie", 0, 1).Build(),
new ItemBuilder("aged Brie", 0, 49).Build(),
new ItemBuilder("aged Brie", 0, 50).Build()
};
var expectedItemsAfterTest = new List<Item>
{
new ItemBuilder("aged Brie", -1, 3).Build(),
new ItemBuilder("aged Brie", -1, 50).Build(),
new ItemBuilder("aged Brie", -1, 50).Build()
};
var app = new GildedRose(items);
app.UpdateQuality();
@ -84,24 +100,6 @@ public class UpdateQualityTestFixture
items.Should().BeEquivalentTo(expectedItemsAfterTest);
}
[Test]
public void ItemsQuality_Should_NeverIncreaseAbove50()
{
var items = new List<Item> { new ItemBuilder("Aged Brie", 1, 49).Build() };
var expectedItemsAfterDay1 = new List<Item> { new ItemBuilder("Aged Brie", 0, 50).Build() };
var expectedItemsAfterDay2 = new List<Item> { new ItemBuilder("Aged Brie", -1, 50).Build() };
var app = new GildedRose(items);
app.UpdateQuality();
items.Should().BeEquivalentTo(expectedItemsAfterDay1);
app.UpdateQuality();
items.Should().BeEquivalentTo(expectedItemsAfterDay2);
}
[Test]
public void LegendaryItems_QualityAndSellIn_NeverChange()
{
@ -123,30 +121,21 @@ public class UpdateQualityTestFixture
}
[Test]
public void LegendaryItems_Quality_IsConstant80()
{
var items = new List<Item> { new LegendaryItemBuilder("something sulfuras something", 3).Build() };
var expectedItemsAfterTest = new List<Item> { new LegendaryItemBuilder("something sulfuras something", 3).Build() };
var app = new GildedRose(items);
app.UpdateQuality();
items.Should().BeEquivalentTo(expectedItemsAfterTest);
}
[Test]
public void BackstagePassesItems_WhenExpiryInOver10Days_QualityIncreaseByOne()
public void BackstagePassesItems_WhenExpiryInOver10Days_DecreaseSellInBy1AndQualityIncreaseBy1Upto50()
{
var items = new List<Item>
{
new ItemBuilder("Backstage passes to a TAFKAL80ETC concert", 11, 4).Build(),
new ItemBuilder("backstage passes to some other show", 20, 40).Build()
new ItemBuilder("backstage passes to some other show", 20, 40).Build(),
new ItemBuilder("backstage passes to some other show", 20, 49).Build(),
new ItemBuilder("backstage passes to some other show", 20, 50).Build()
};
var expectedItemsAfterTest = new List<Item>
{
new ItemBuilder("Backstage passes to a TAFKAL80ETC concert", 10, 5).Build(),
new ItemBuilder("backstage passes to some other show", 19, 41).Build()
new ItemBuilder("backstage passes to some other show", 19, 41).Build(),
new ItemBuilder("backstage passes to some other show", 19, 50).Build(),
new ItemBuilder("backstage passes to some other show", 19, 50).Build()
};
var app = new GildedRose(items);
@ -157,17 +146,21 @@ public class UpdateQualityTestFixture
[Test]
public void BackstagePassesItems_WhenExpiryIn10To6Days_QualityIncreaseByTwo()
public void BackstagePassesItems_WhenExpiryIn10To6Days_DecreaseSellInBy1AndQualityIncreaseBy2Upto50()
{
var items = new List<Item>
{
new ItemBuilder("backstage passes to a TAFKAL80ETC concert", 10, 4).Build(),
new ItemBuilder("Backstage passes to some other show", 6, 41).Build()
new ItemBuilder("Backstage passes to some other show", 6, 41).Build(),
new ItemBuilder("backstage passes to some other show", 10, 49).Build(),
new ItemBuilder("backstage passes to some other show", 8, 50).Build()
};
var expectedItemsAfterTest = new List<Item>
{
new ItemBuilder("backstage passes to a TAFKAL80ETC concert", 9, 6).Build(),
new ItemBuilder("Backstage passes to some other show", 5, 43).Build()
new ItemBuilder("Backstage passes to some other show", 5, 43).Build(),
new ItemBuilder("backstage passes to some other show", 9, 50).Build(),
new ItemBuilder("backstage passes to some other show", 7, 50).Build()
};
var app = new GildedRose(items);
@ -177,17 +170,23 @@ public class UpdateQualityTestFixture
}
[Test]
public void BackstagePassesItems_WhenExpiryIn5to1Days_QualityIncreaseByThree()
public void BackstagePassesItems_WhenExpiryIn5to1Days_DecreaseSellInBy1AndQualityIncreaseBy3Upto50()
{
var items = new List<Item>
{
new ItemBuilder("Backstage passes to some other show", 5, 4).Build(),
new ItemBuilder("Backstage passes to a TAFKAL80ETC concert", 1, 41).Build()
new ItemBuilder("Backstage passes to a TAFKAL80ETC concert", 1, 41).Build(),
new ItemBuilder("Backstage passes to a TAFKAL80ETC concert", 4, 48).Build(),
new ItemBuilder("Backstage passes to a TAFKAL80ETC concert", 2, 49).Build(),
new ItemBuilder("Backstage passes to a TAFKAL80ETC concert", 1, 50).Build()
};
var expectedItemsAfterTest = new List<Item>
{
new ItemBuilder("Backstage passes to some other show", 4, 7).Build(),
new ItemBuilder("Backstage passes to a TAFKAL80ETC concert", 0, 44).Build()
new ItemBuilder("Backstage passes to a TAFKAL80ETC concert", 0, 44).Build(),
new ItemBuilder("Backstage passes to a TAFKAL80ETC concert", 3, 50).Build(),
new ItemBuilder("Backstage passes to a TAFKAL80ETC concert", 1, 50).Build(),
new ItemBuilder("Backstage passes to a TAFKAL80ETC concert", 0, 50).Build()
};
var app = new GildedRose(items);
@ -197,48 +196,19 @@ public class UpdateQualityTestFixture
}
[Test]
public void BackstagePassesItems_MaximumQuality_Is50()
{
var items = new List<Item>
{
new ItemBuilder("Backstage passes", 15, 49).Build(),
new ItemBuilder("Backstage passes to some other show", 10,49).Build(),
new ItemBuilder("Backstage passes to a TAFKAL80ETC concert", 5, 48).Build()
};
var expectedItemsAfterDay1 = new List<Item>
{
new ItemBuilder("Backstage passes", 14, 50).Build(),
new ItemBuilder("Backstage passes to some other show", 9, 50).Build(),
new ItemBuilder("Backstage passes to a TAFKAL80ETC concert", 4, 50).Build()
};
var expectedItemsAfterDay2 = new List<Item>
{
new ItemBuilder("Backstage passes", 13, 50).Build(),
new ItemBuilder("Backstage passes to some other show", 8, 50).Build(),
new ItemBuilder("Backstage passes to a TAFKAL80ETC concert", 3, 50).Build()
};
var app = new GildedRose(items);
app.UpdateQuality();
items.Should().BeEquivalentTo(expectedItemsAfterDay1);
app.UpdateQuality();
items.Should().BeEquivalentTo(expectedItemsAfterDay2);
}
[Test]
public void BackstagePassesItems_WhenExpired_QualityDropsTo0()
public void BackstagePassesItems_WhenExpired_DecreaseSellInBy1AndQualityDropsTo0()
{
var items = new List<Item>
{
new ItemBuilder("Backstage passes to a TAFKAL80ETC concert", 0, 4).Build(),
new ItemBuilder("Another type of backstage passes", 0, 4).Build()
new ItemBuilder("Another type of backstage passes", -1, 1).Build(),
new ItemBuilder("Another type of backstage passes", -16, 15).Build()
};
var expectedItemsAfterTest = new List<Item>
{
new ItemBuilder("Backstage passes to a TAFKAL80ETC concert", -1, 0).Build(),
new ItemBuilder("Another type of backstage passes", -1, 0).Build()
new ItemBuilder("Another type of backstage passes", -2, 0).Build(),
new ItemBuilder("Another type of backstage passes", -17, 0).Build()
};
var app = new GildedRose(items);
@ -248,17 +218,21 @@ public class UpdateQualityTestFixture
}
[Test]
public void ConjuredItems_WhenNotExpired_Should_DecreaseQualityByTwo()
public void ConjuredItems_WhenNotExpired_Should_DecreaseSellInBy1AndQualityBy2DownTo0()
{
var items = new List<Item>
{
new ItemBuilder("Conjured Mana Cake", 1, 4).Build(),
new ItemBuilder("some other conjured item", 5, 50).Build()
new ItemBuilder("some other conjured item", 15, 50).Build(),
new ItemBuilder("some other conjured item", 5, 1).Build(),
new ItemBuilder("some other conjured item", 5, 0).Build()
};
var expectedItemsAfterTest = new List<Item>
{
new ItemBuilder("Conjured Mana Cake", 0, 2).Build(),
new ItemBuilder("some other conjured item", 4, 48).Build()
new ItemBuilder("some other conjured item", 14, 48).Build(),
new ItemBuilder("some other conjured item", 4, 0).Build(),
new ItemBuilder("some other conjured item", 4, 0).Build()
};
var app = new GildedRose(items);
@ -268,15 +242,21 @@ public class UpdateQualityTestFixture
}
[Test]
public void ConjuredItems_WhenExpired_Should_DecreaseQualityByFourDownToZero()
public void ConjuredItems_WhenExpired_Should_DecreaseSellInBy1AndQualityBy4DownTo0()
{
var items = new List<Item>
{
new ItemBuilder("Conjured Mana Cake", 0, 3).Build(),
new ItemBuilder("Conjured Mana Cake", -1, 2).Build(),
new ItemBuilder("Conjured Mana Cake", -5, 1).Build(),
new ItemBuilder("Conjured Mana Cake", 0, 0).Build(),
new ItemBuilder("some other conjured item", -1, 50).Build()
};
var expectedItemsAfterTest = new List<Item>
{
new ItemBuilder("Conjured Mana Cake", -1, 0).Build(),
new ItemBuilder("Conjured Mana Cake", -2, 0).Build(),
new ItemBuilder("Conjured Mana Cake", -6, 0).Build(),
new ItemBuilder("Conjured Mana Cake", -1, 0).Build(),
new ItemBuilder("some other conjured item", -2, 46).Build()
};