mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-15 06:21:29 +00:00
Add unit tests for quality rules except Aged Brie and Backstage Passes
This commit is contained in:
parent
72d6926f8a
commit
7db88cf003
@ -1,9 +1,8 @@
|
|||||||
package com.gildedrose
|
package com.gildedrose
|
||||||
|
|
||||||
import com.gildedrose.core.TestUtils
|
import com.gildedrose.core.*
|
||||||
import com.gildedrose.core.TestUtils.generateRandomNumber
|
import com.gildedrose.core.TestUtils.generateRandomNumber
|
||||||
import com.gildedrose.core.TestUtils.pickRandomItem
|
import com.gildedrose.core.TestUtils.pickRandomItem
|
||||||
import com.gildedrose.core.advanceTimeBy
|
|
||||||
import org.assertj.core.api.Java6Assertions.assertThat
|
import org.assertj.core.api.Java6Assertions.assertThat
|
||||||
import org.junit.Before
|
import org.junit.Before
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
@ -18,9 +17,20 @@ class QualityTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun givenKnownItemExcepSulfuras_afterAnyNumberOfDays_shouldHaveQualityGreaterThanOrEqualToZero() {
|
fun givenSulfuras_afterAnyNumberOfDays_shouldHaveQualityEighty() {
|
||||||
|
val days = generateRandomNumber()
|
||||||
|
val item = Item("Sulfuras, Hand of Ragnaros", generateRandomNumber(), 80)
|
||||||
|
val app = GildedRose(arrayOf(item))
|
||||||
|
|
||||||
|
app.advanceTimeBy(days)
|
||||||
|
|
||||||
|
assertThat(item.quality).isEqualTo(80)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun givenKnownItemsExceptSulfuras_afterAnyNumberOfDays_shouldHaveQualityGreaterThanOrEqualToZero() {
|
||||||
|
store = store.excludeSulfuras()
|
||||||
val days = generateRandomNumber()
|
val days = generateRandomNumber()
|
||||||
store = store.filter { it.name != "Sulfuras, Hand of Ragnaros" }
|
|
||||||
val app = GildedRose(store.toTypedArray())
|
val app = GildedRose(store.toTypedArray())
|
||||||
|
|
||||||
app.advanceTimeBy(days)
|
app.advanceTimeBy(days)
|
||||||
@ -31,9 +41,9 @@ class QualityTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun givenKnownItemExcepSulfuras_afterAnyNumberOfDays_shouldHaveQualityLessThanOrEqualToFifty() {
|
fun givenKnownItemsExceptSulfuras_afterAnyNumberOfDays_shouldHaveQualityLessThanOrEqualToFifty() {
|
||||||
|
store = store.excludeSulfuras()
|
||||||
val days = generateRandomNumber()
|
val days = generateRandomNumber()
|
||||||
store = store.filter { it.name != "Sulfuras, Hand of Ragnaros" }
|
|
||||||
val app = GildedRose(store.toTypedArray())
|
val app = GildedRose(store.toTypedArray())
|
||||||
|
|
||||||
app.advanceTimeBy(days)
|
app.advanceTimeBy(days)
|
||||||
@ -42,4 +52,37 @@ class QualityTest {
|
|||||||
assertThat(item.quality).isLessThanOrEqualTo(50)
|
assertThat(item.quality).isLessThanOrEqualTo(50)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun givenKnownItemWithDegradingQuality_whenSellInIsGreaterThanOrEqualToZero_shouldDegradeQualityByNumberOfDays() {
|
||||||
|
store = store.excludeSulfuras()
|
||||||
|
.excludeBackstagePasses()
|
||||||
|
.excludeAgedBrie()
|
||||||
|
val days = generateRandomNumber().coerceAtLeast(0)
|
||||||
|
val item = pickRandomItem(store)
|
||||||
|
val initialItemQuality = item.quality
|
||||||
|
val app = GildedRose(arrayOf(item))
|
||||||
|
|
||||||
|
app.advanceTimeBy(days)
|
||||||
|
|
||||||
|
val expectedQuality = (initialItemQuality - days).coerceAtLeast(0)
|
||||||
|
assertThat(item.quality).isEqualTo(expectedQuality)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun givenKnownItemWithDegradingQuality_whenSellInIsLessThanZero_shouldDegradeQualityByTwiceTheNumberOfDays() {
|
||||||
|
store = store.excludeSulfuras()
|
||||||
|
.excludeBackstagePasses()
|
||||||
|
.excludeAgedBrie()
|
||||||
|
val sellIn = (-99 until 0).shuffled().last()
|
||||||
|
val days = (0 until 100).shuffled().last()
|
||||||
|
val item = pickRandomItem(store).copy(sellIn = sellIn)
|
||||||
|
val initialItemQuality = item.quality
|
||||||
|
val app = GildedRose(arrayOf(item))
|
||||||
|
|
||||||
|
app.advanceTimeBy(days)
|
||||||
|
|
||||||
|
val expectedQuality = (initialItemQuality - days * 2).coerceAtLeast(0)
|
||||||
|
assertThat(item.quality).isEqualTo(expectedQuality)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -11,11 +11,11 @@ import org.junit.Test
|
|||||||
|
|
||||||
class SellInTest {
|
class SellInTest {
|
||||||
|
|
||||||
private lateinit var store: Array<Item>
|
private lateinit var store: List<Item>
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
fun setUp() {
|
fun setUp() {
|
||||||
store = TestUtils.fixture
|
store = TestUtils.fixture.toList()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -31,14 +31,11 @@ class SellInTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun givenKnownItemExcepSulfuras_afterRandomNumberOfDays_shouldDecreaseSellInByNumberOfDays() {
|
fun givenKnownItemExceptSulfuras_afterRandomNumberOfDays_shouldDecreaseSellInByNumberOfDays() {
|
||||||
|
store = store.filter { it.name != "Sulfuras, Hand of Ragnaros" }
|
||||||
val days = generateRandomNumber()
|
val days = generateRandomNumber()
|
||||||
val initialSellIn = generateRandomNumber()
|
val initialSellIn = generateRandomNumber()
|
||||||
var item = pickRandomItem(store).copy(sellIn = initialSellIn)
|
val item = pickRandomItem(store).copy(sellIn = initialSellIn)
|
||||||
|
|
||||||
while (item.name == "Sulfuras, Hand of Ragnaros") {
|
|
||||||
item = pickRandomItem(store).copy(sellIn = initialSellIn)
|
|
||||||
}
|
|
||||||
|
|
||||||
val app = GildedRose(arrayOf(item))
|
val app = GildedRose(arrayOf(item))
|
||||||
|
|
||||||
|
|||||||
7
src/test/kotlin/com/gildedrose/core/TestExtensions.kt
Normal file
7
src/test/kotlin/com/gildedrose/core/TestExtensions.kt
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
package com.gildedrose.core
|
||||||
|
|
||||||
|
import com.gildedrose.Item
|
||||||
|
|
||||||
|
fun List<Item>.excludeSulfuras() = this.filter { it.name != "Sulfuras, Hand of Ragnaros" }
|
||||||
|
fun List<Item>.excludeBackstagePasses() = this.filter { it.name != "Backstage passes to a TAFKAL80ETC concert" }
|
||||||
|
fun List<Item>.excludeAgedBrie() = this.filter { it.name != "Aged Brie" }
|
||||||
@ -21,5 +21,5 @@ object TestUtils {
|
|||||||
|
|
||||||
fun generateRandomNumber() = (0 until 9999).shuffled().last()
|
fun generateRandomNumber() = (0 until 9999).shuffled().last()
|
||||||
|
|
||||||
fun pickRandomItem(items: Array<Item>) = items[generateRandomNumber().coerceIn(items.indices)]
|
fun pickRandomItem(items: List<Item>) = items[items.indices.shuffled().last()]
|
||||||
}
|
}
|
||||||
@ -1,13 +1,12 @@
|
|||||||
SPECS
|
SPECS
|
||||||
LOGIC
|
LOGIC
|
||||||
- sellIn decreases every day
|
# - sellIn decreases every day
|
||||||
- Item.quality
|
- Item.quality
|
||||||
- is >= 0 && <= 50
|
# - is >= 0 && <= 50
|
||||||
- decreses until sellIn is <= 0
|
# - decrements with number of days until sellIn is 0 then with the double of it
|
||||||
- when sellIn == 0 quality degrades twice as fast
|
|
||||||
- Sulfuras
|
- Sulfuras
|
||||||
sellIn = 0 // doesnt change
|
# sellIn = 0 // doesnt change
|
||||||
quality is 80 and does not decrease
|
# quality is 80 and does not decrease
|
||||||
- AgedBrie increases in quality
|
- AgedBrie increases in quality
|
||||||
- BackstagePasses
|
- BackstagePasses
|
||||||
increases in quality like AgedBrie
|
increases in quality like AgedBrie
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user