Files
apollo/game/plugin/consumables/test/FoodOrDrinkTests.kt
T
Gary Tierney 248a7d97d9 Update plugin test framework to junit5
Updates the testing infrastructure to use the latest relesae of junit and
leverages the new extension mechanism to create an easy to use testing
framework.  Also adds additional test coverage for several plugins.
2018-08-19 22:28:41 +01:00

95 lines
3.2 KiB
Kotlin

package org.apollo.plugin.consumables
import io.mockk.verify
import org.apollo.game.model.entity.Player
import org.apollo.game.model.entity.Skill
import org.apollo.game.plugin.testing.assertions.contains
import org.apollo.game.plugin.testing.assertions.after
import org.apollo.game.plugin.testing.assertions.verifyAfter
import org.apollo.game.plugin.testing.junit.ApolloTestingExtension
import org.apollo.game.plugin.testing.junit.api.ActionCapture
import org.apollo.game.plugin.testing.junit.api.annotations.TestMock
import org.apollo.game.plugin.testing.junit.api.interactions.interactWithItem
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.TestInstance
import org.junit.jupiter.api.extension.ExtendWith
@ExtendWith(ApolloTestingExtension::class)
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class FoodOrDrinkTests {
companion object {
const val TEST_FOOD_NAME = "test_food"
const val TEST_FOOD_ID = 2000
const val TEST_FOOD_RESTORATION = 5
const val TEST_DRINK_NAME = "test_drink"
const val TEST_DRINK_ID = 2001
const val TEST_DRINK_RESTORATION = 5
const val HP_LEVEL = 5
const val MAX_HP_LEVEL = 10
}
@TestMock
lateinit var player: Player
@TestMock
lateinit var action: ActionCapture
@BeforeEach
fun setup() {
val skills = player.skillSet
skills.setCurrentLevel(Skill.HITPOINTS, HP_LEVEL)
skills.setMaximumLevel(Skill.HITPOINTS, MAX_HP_LEVEL)
food("test_food", TEST_FOOD_ID, TEST_FOOD_RESTORATION)
drink("test_drink", TEST_DRINK_ID, TEST_DRINK_RESTORATION)
}
@Test
fun `Consuming food or drink should restore the players hitpoints`() {
val expectedHpLevel = TEST_FOOD_RESTORATION + HP_LEVEL
player.interactWithItem(TEST_FOOD_ID, option = 1, slot = 1)
after(action.complete()) {
assertEquals(expectedHpLevel, player.skillSet.getCurrentLevel(Skill.HITPOINTS))
}
}
@Test
fun `A message should be sent notifying the player if the item restored hitpoints`() {
player.interactWithItem(TEST_FOOD_ID, option = 1, slot = 1)
verifyAfter(action.complete()) { player.sendMessage("It heals some health.") }
}
@Test
fun `A message should not be sent to the player if the item did not restore hitpoints`() {
player.skillSet.setCurrentLevel(Skill.HITPOINTS, MAX_HP_LEVEL)
player.interactWithItem(TEST_FOOD_ID, option = 1, slot = 1)
after(action.complete()) {
verify(exactly = 0) { player.sendMessage(contains("it heals some")) }
}
}
@Test
fun `A message should be sent saying the player has drank an item when consuming a drink`() {
player.interactWithItem(TEST_DRINK_ID, option = 1, slot = 1)
verifyAfter(action.complete()) { player.sendMessage("You drink the ${TEST_DRINK_NAME}.") }
}
@Test
fun `A message should be sent saying the player has eaten an item when consuming food`() {
player.interactWithItem(TEST_FOOD_ID, option = 1, slot = 1)
verifyAfter(action.complete()) { player.sendMessage("You eat the ${TEST_FOOD_NAME}.") }
}
}