diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 7fa7f158..84608461 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -20,7 +20,7 @@ jobs: java-version: '11' distribution: 'adopt' - name: Move to the correct folder - run: cd kotlin + run: cd Kotlin - name: Grant execute permission for gradlew run: chmod +x gradlew - name: Run tests diff --git a/Kotlin/src/test/kotlin/com/gildedrose/GildedRoseTest.kt b/Kotlin/src/test/kotlin/com/gildedrose/GildedRoseTest.kt index 797ac815..3a1c8928 100644 --- a/Kotlin/src/test/kotlin/com/gildedrose/GildedRoseTest.kt +++ b/Kotlin/src/test/kotlin/com/gildedrose/GildedRoseTest.kt @@ -6,14 +6,64 @@ import org.junit.jupiter.api.Test internal class GildedRoseTest { @Test - fun foo() { - val items = arrayOf(Item("foo", 0, 0)) + internal fun `regular item decreases as expected`() { + val items = arrayOf(Item("foo", 1, 1)) val app = GildedRose(items) app.updateQuality() - assertEquals("fixme", app.items[0].name) + app.assertQualityAndSellIn( + expectedSellIn = 0, + expectedQuality = 0 + ) } + @Test + internal fun `Quality decreases twice as fast after expiry date passed`() { + val item = Item("foo", 0, 2) + val app = GildedRose(arrayOf(item)) + app.updateQuality() + + app.assertQualityAndSellIn( + expectedSellIn = -1, + expectedQuality = 0 + ) + } + + @Test + internal fun `Quality decreases normally when reaching sellIn date`() { + val item = Item("foo", 1, 5) + val app = GildedRose(arrayOf(item)) + app.updateQuality() + + app.assertQualityAndSellIn( + expectedSellIn = 0, + expectedQuality = 4 + ) + + app.updateQuality() + app.assertQualityAndSellIn( + expectedSellIn = -1, + expectedQuality = 2 + ) + } + + @Test + internal fun `Quality decreases after sellin reached 0 and quality is 0`() { + val item = Item("foo", 0, 2) + val app = GildedRose(arrayOf(item)) + app.updateQuality() + + app.assertQualityAndSellIn( + expectedSellIn = -1, + expectedQuality = 0 + ) + } + + private fun GildedRose.assertQualityAndSellIn(expectedSellIn: Int, expectedQuality: Int, itemIndex: Int = 0) { + val item = items[itemIndex] + assertEquals(expectedSellIn, item.sellIn) + assertEquals(expectedQuality, item.quality) + } }