Add unit tests for sellIn value

This commit is contained in:
Ovi Trif 2018-10-05 21:00:20 +02:00
parent b0614b6bdf
commit fa253f047d

View File

@ -1,19 +1,38 @@
package com.gildedrose
import org.junit.Assert.*
import org.assertj.core.api.Java6Assertions.assertThat
import org.junit.Test
import java.util.*
class GildedRoseTest {
@Test fun foo() {
val items = arrayOf<Item>(Item("foo", 0, 0))
val app = GildedRose(items)
app.updateQuality()
assertEquals("fixme", app.items[0].name)
@Test
fun givenRandomItem_afterRandomNumberOfDays_shouldDecreaseSellInByNumberOfDays() {
val days = generateRandomNumber()
val initialSellIn = generateRandomNumber()
val item = Item(generateRandomName(), initialSellIn, 0)
val app = GildedRose(arrayOf(item))
app.advanceTimeBy(days)
assertThat(item.sellIn).isEqualTo(initialSellIn-days)
}
@Test
fun givenSulfuras_afterRandomNumberOfDays_shouldHaveSameSellIn() {
val days = generateRandomNumber()
val initialSellIn = generateRandomNumber()
val item = Item("Sulfuras, Hand of Ragnaros", initialSellIn, 0)
val app = GildedRose(arrayOf(item))
app.advanceTimeBy(days)
assertThat(item.sellIn).isEqualTo(initialSellIn)
}
private fun GildedRose.advanceTimeBy(days: Int) = repeat(days, { this.updateQuality() })
private fun generateRandomName() = UUID.randomUUID().toString()
private fun generateRandomNumber() = (0 until 9999).shuffled().last()
}