diff --git a/Java/pom.xml b/Java/pom.xml
index c9dc6b67..77e11998 100644
--- a/Java/pom.xml
+++ b/Java/pom.xml
@@ -18,9 +18,23 @@
1.9.4
3.11.1
5.4.2
+ 1.18.8
+ 3.8.1
+
+ org.apache.commons
+ commons-lang3
+ ${commons-lang3.version}
+ test
+
+
+ org.projectlombok
+ lombok
+ ${lombok.version}
+ provided
+
org.assertj
assertj-core
@@ -74,9 +88,9 @@
- org.aspectj
- aspectjweaver
- ${aspectj.version}
+ org.aspectj
+ aspectjweaver
+ ${aspectj.version}
diff --git a/Java/src/test/java/com/gildedrose/GildedRoseTest.java b/Java/src/test/java/com/gildedrose/GildedRoseTest.java
index 97c4a1e0..a9f1404e 100644
--- a/Java/src/test/java/com/gildedrose/GildedRoseTest.java
+++ b/Java/src/test/java/com/gildedrose/GildedRoseTest.java
@@ -1,11 +1,15 @@
package com.gildedrose;
import io.qameta.allure.Feature;
+import lombok.val;
+import org.junit.jupiter.api.Disabled;
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;
+import static com.gildedrose.TestHelper.assertItem;
+import static com.gildedrose.TestHelper.prepareApp;
+import static org.apache.commons.lang3.RandomUtils.nextInt;
class GildedRoseTest {
@@ -24,8 +28,8 @@ class GildedRoseTest {
}
@Feature("The Quality of an item is never negative")
- @ParameterizedTest(name="Initial quality: {arguments}")
- @ValueSource(ints={0,1})
+ @ParameterizedTest(name = "Initial quality: {arguments}")
+ @ValueSource(ints = {0, 1})
void shouldTheQualityNeverBeNegative(int initialQuality) {
// given
GildedRose app = prepareApp(new Item("foo", 0, initialQuality));
@@ -38,16 +42,19 @@ class GildedRoseTest {
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);
+ @Feature("Once the sell by date has passed, Quality degrades twice as fast")
+ @ParameterizedTest(name = "sellIn: {arguments}")
+ @ValueSource(ints = {0, 1})
+ void shouldTheDegradeQualityFasterOnceSellDateIsPassed(int sellIn) {
+ // given
+ val initialQuality = nextInt(3, 50);
+ GildedRose app = prepareApp(new Item("foo", sellIn, initialQuality));
+
+ // when
+ app.updateQuality();
+
+ // then
+ final Item item = app.items[0];
+ assertItem(item, "foo", initialQuality - 2, -2);
}
-
- private static GildedRose prepareApp(Item... items) {
- return new GildedRose(items);
- }
-
-
}
diff --git a/Java/src/test/java/com/gildedrose/TestHelper.java b/Java/src/test/java/com/gildedrose/TestHelper.java
new file mode 100644
index 00000000..1601b374
--- /dev/null
+++ b/Java/src/test/java/com/gildedrose/TestHelper.java
@@ -0,0 +1,19 @@
+package com.gildedrose;
+
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
+
+public final class TestHelper {
+
+ private TestHelper(){}
+
+ static GildedRose prepareApp(Item... items) {
+ return new GildedRose(items);
+ }
+
+ static 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);
+ }
+}