diff --git a/Java/pom.xml b/Java/pom.xml index 6bad6bf2..98789eb5 100644 --- a/Java/pom.xml +++ b/Java/pom.xml @@ -28,6 +28,12 @@ ${junit.jupiter.version} test + + org.junit.jupiter + junit-jupiter-params + ${junit.jupiter.version} + test + diff --git a/Java/src/test/java/com/gildedrose/GildedRoseTest.java b/Java/src/test/java/com/gildedrose/GildedRoseTest.java index 76406af9..b62f5876 100644 --- a/Java/src/test/java/com/gildedrose/GildedRoseTest.java +++ b/Java/src/test/java/com/gildedrose/GildedRoseTest.java @@ -1,6 +1,8 @@ package com.gildedrose; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; @@ -10,17 +12,40 @@ class GildedRoseTest { @Test void shouldProcessFooItem() { // given - final Item[] items = new Item[]{new Item("foo", 0, 0)}; - GildedRose app = new GildedRose(items); + GildedRose app = prepareApp(new Item("foo", 0, 0)); // when app.updateQuality(); // then final Item item = app.items[0]; - assertThat(item.name).isEqualTo("foo"); - assertThat(item.quality).isEqualTo(0); - assertThat(item.sellIn).isEqualTo(-1); + assertItem(item, "foo", 0, -1); } + @ParameterizedTest(name="Initial quality: {arguments}") + @ValueSource(ints={0,1}) + void shouldTheQualityNeverBeNegative(int initialQuality) { + // given + GildedRose app = prepareApp(new Item("foo", 0, initialQuality)); + + // when + app.updateQuality(); + + // then + final Item item = app.items[0]; + assertItem(item, "foo", 0, -1); + } + + private void assertItem(Item item, String expectedName, int expectedQuality, int expectedSellIn) { + assertThat(item).as("item").isNotNull(); + assertThat(item.name).as("name").isEqualTo(expectedName); + assertThat(item.quality).as("quality").isEqualTo(expectedQuality); + assertThat(item.sellIn).as("sellIn").isEqualTo(expectedSellIn); + } + + private static GildedRose prepareApp(Item... items) { + return new GildedRose(items); + } + + }