mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-14 22:21:20 +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
|
||||
|
||||
import com.gildedrose.core.TestUtils
|
||||
import com.gildedrose.core.*
|
||||
import com.gildedrose.core.TestUtils.generateRandomNumber
|
||||
import com.gildedrose.core.TestUtils.pickRandomItem
|
||||
import com.gildedrose.core.advanceTimeBy
|
||||
import org.assertj.core.api.Java6Assertions.assertThat
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
@ -18,28 +17,72 @@ class QualityTest {
|
||||
}
|
||||
|
||||
@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()
|
||||
store = store.filter { it.name != "Sulfuras, Hand of Ragnaros" }
|
||||
val app = GildedRose(store.toTypedArray())
|
||||
|
||||
app.advanceTimeBy(days)
|
||||
|
||||
store.forEach {item ->
|
||||
store.forEach { item ->
|
||||
assertThat(item.quality).isGreaterThanOrEqualTo(0)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun givenKnownItemExcepSulfuras_afterAnyNumberOfDays_shouldHaveQualityLessThanOrEqualToFifty() {
|
||||
fun givenKnownItemsExceptSulfuras_afterAnyNumberOfDays_shouldHaveQualityLessThanOrEqualToFifty() {
|
||||
store = store.excludeSulfuras()
|
||||
val days = generateRandomNumber()
|
||||
store = store.filter { it.name != "Sulfuras, Hand of Ragnaros" }
|
||||
val app = GildedRose(store.toTypedArray())
|
||||
|
||||
app.advanceTimeBy(days)
|
||||
|
||||
store.forEach {item ->
|
||||
store.forEach { item ->
|
||||
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 {
|
||||
|
||||
private lateinit var store: Array<Item>
|
||||
private lateinit var store: List<Item>
|
||||
|
||||
@Before
|
||||
fun setUp() {
|
||||
store = TestUtils.fixture
|
||||
store = TestUtils.fixture.toList()
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -31,14 +31,11 @@ class SellInTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
fun givenKnownItemExcepSulfuras_afterRandomNumberOfDays_shouldDecreaseSellInByNumberOfDays() {
|
||||
fun givenKnownItemExceptSulfuras_afterRandomNumberOfDays_shouldDecreaseSellInByNumberOfDays() {
|
||||
store = store.filter { it.name != "Sulfuras, Hand of Ragnaros" }
|
||||
val days = generateRandomNumber()
|
||||
val initialSellIn = generateRandomNumber()
|
||||
var item = pickRandomItem(store).copy(sellIn = initialSellIn)
|
||||
|
||||
while (item.name == "Sulfuras, Hand of Ragnaros") {
|
||||
item = pickRandomItem(store).copy(sellIn = initialSellIn)
|
||||
}
|
||||
val item = pickRandomItem(store).copy(sellIn = initialSellIn)
|
||||
|
||||
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 pickRandomItem(items: Array<Item>) = items[generateRandomNumber().coerceIn(items.indices)]
|
||||
fun pickRandomItem(items: List<Item>) = items[items.indices.shuffled().last()]
|
||||
}
|
||||
@ -1,13 +1,12 @@
|
||||
SPECS
|
||||
LOGIC
|
||||
- sellIn decreases every day
|
||||
# - sellIn decreases every day
|
||||
- Item.quality
|
||||
- is >= 0 && <= 50
|
||||
- decreses until sellIn is <= 0
|
||||
- when sellIn == 0 quality degrades twice as fast
|
||||
# - is >= 0 && <= 50
|
||||
# - decrements with number of days until sellIn is 0 then with the double of it
|
||||
- Sulfuras
|
||||
sellIn = 0 // doesnt change
|
||||
quality is 80 and does not decrease
|
||||
# sellIn = 0 // doesnt change
|
||||
# quality is 80 and does not decrease
|
||||
- AgedBrie increases in quality
|
||||
- BackstagePasses
|
||||
increases in quality like AgedBrie
|
||||
|
||||
Loading…
Reference in New Issue
Block a user