Cleaned up test with assertk

This commit is contained in:
Erik C. Thauvin 2022-10-03 11:02:35 -07:00
parent 790238a2b4
commit 8c3243fb52
8 changed files with 119 additions and 71 deletions

View file

@ -63,6 +63,11 @@ class HttpErrorException(
To use with [Gradle](https://gradle.org/), include the following dependency in your build file: To use with [Gradle](https://gradle.org/), include the following dependency in your build file:
```gradle ```gradle
repositories {
mavenCentral()
maven { url = uri("https://oss.sonatype.org/content/repositories/snapshots") }
}
dependencies { dependencies {
implementation("net.thauvin.erik:jokeapi:0.9-SNAPSHOT") implementation("net.thauvin.erik:jokeapi:0.9-SNAPSHOT")
} }

View file

@ -36,6 +36,7 @@ dependencies {
testImplementation(kotlin("test")) testImplementation(kotlin("test"))
testImplementation("org.junit.jupiter:junit-jupiter:5.9.1") testImplementation("org.junit.jupiter:junit-jupiter:5.9.1")
testImplementation("com.willowtreeapps.assertk:assertk-jvm:0.25")
} }
tasks.test { tasks.test {

View file

@ -42,5 +42,5 @@ enum class Flag(val value: String) {
RACIST("racist"), RACIST("racist"),
SEXIST("sexist"), SEXIST("sexist"),
EXPLICIT("explicit"), EXPLICIT("explicit"),
ALL("${NSFW.value},${RELIGIOUS.value},${POLITICAL.value},${RACIST.value},${SEXIST.value},${EXPLICIT.value}"), ALL("${NSFW.value},${RELIGIOUS.value},${POLITICAL.value},${RACIST.value},${SEXIST.value},${EXPLICIT.value}")
} }

View file

@ -32,19 +32,21 @@
package net.thauvin.erik.jokeapi package net.thauvin.erik.jokeapi
import assertk.assertThat
import assertk.assertions.isGreaterThan
import assertk.assertions.startsWith
import net.thauvin.erik.jokeapi.JokeApi.Companion.apiCall import net.thauvin.erik.jokeapi.JokeApi.Companion.apiCall
import net.thauvin.erik.jokeapi.JokeApi.Companion.logger import net.thauvin.erik.jokeapi.JokeApi.Companion.logger
import net.thauvin.erik.jokeapi.models.Format import net.thauvin.erik.jokeapi.models.Format
import net.thauvin.erik.jokeapi.models.Language
import net.thauvin.erik.jokeapi.models.Parameter import net.thauvin.erik.jokeapi.models.Parameter
import org.json.JSONObject import org.json.JSONObject
import org.junit.jupiter.api.Assertions.assertFalse import org.junit.jupiter.api.Assertions.assertFalse
import org.junit.jupiter.api.Assertions.assertTrue
import org.junit.jupiter.api.BeforeAll import org.junit.jupiter.api.BeforeAll
import org.junit.jupiter.api.Test import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertAll import org.junit.jupiter.api.assertAll
import java.util.logging.ConsoleHandler import java.util.logging.ConsoleHandler
import java.util.logging.Level import java.util.logging.Level
import kotlin.test.assertContains
internal class ApiCallTest { internal class ApiCallTest {
@Test @Test
@ -53,9 +55,9 @@ internal class ApiCallTest {
val response = apiCall(endPoint = "flags") val response = apiCall(endPoint = "flags")
val json = JSONObject(response) val json = JSONObject(response)
assertAll("Validate JSON", assertAll("Validate JSON",
{ assertFalse(json.getBoolean("error"), "should not be an error") }, { assertFalse(json.getBoolean("error"), "apiCall(flags).error") },
{ assertTrue(json.getJSONArray("flags").length() > 0, "should have flags") }, { assertThat(json.getJSONArray("flags").length(), "apiCall(flags).flags").isGreaterThan(0) },
{ assertTrue(json.getLong("timestamp") > 0, "should have a timestamp") }) { assertThat(json.getLong("timestamp"), "apiCall(flags).timestamp").isGreaterThan(0) })
} }
@Test @Test
@ -65,14 +67,14 @@ internal class ApiCallTest {
endPoint = "langcode", path = "french", endPoint = "langcode", path = "french",
params = mapOf(Parameter.FORMAT to Format.YAML.value) params = mapOf(Parameter.FORMAT to Format.YAML.value)
) )
assertTrue(lang.contains("code: \"fr\"")) { "should contain ${Language.FR.value}" } assertContains(lang, "code: \"fr\"", false, "apiCall(langcode, french, yaml)")
} }
@Test @Test
fun `Get Ping Response`() { fun `Get Ping Response`() {
// See https://v2.jokeapi.dev/#ping-endpoint // See https://v2.jokeapi.dev/#ping-endpoint
val ping = apiCall(endPoint = "ping", params = mapOf(Parameter.FORMAT to Format.TXT.value)) val ping = apiCall(endPoint = "ping", params = mapOf(Parameter.FORMAT to Format.TXT.value))
assertTrue(ping.startsWith("Pong!"), "should return pong") assertThat(ping, "apiCall(ping, txt)").startsWith("Pong!")
} }
companion object { companion object {

View file

@ -32,6 +32,14 @@
package net.thauvin.erik.jokeapi package net.thauvin.erik.jokeapi
import assertk.assertThat
import assertk.assertions.index
import assertk.assertions.isEqualTo
import assertk.assertions.isGreaterThan
import assertk.assertions.isNotEmpty
import assertk.assertions.isNull
import assertk.assertions.size
import assertk.assertions.startsWith
import net.thauvin.erik.jokeapi.JokeApi.Companion.fetchUrl import net.thauvin.erik.jokeapi.JokeApi.Companion.fetchUrl
import net.thauvin.erik.jokeapi.JokeApi.Companion.getJoke import net.thauvin.erik.jokeapi.JokeApi.Companion.getJoke
import net.thauvin.erik.jokeapi.JokeApi.Companion.logger import net.thauvin.erik.jokeapi.JokeApi.Companion.logger
@ -52,45 +60,51 @@ import java.util.logging.ConsoleHandler
import java.util.logging.Level import java.util.logging.Level
internal class ExceptionsTest { internal class ExceptionsTest {
private val httpStat = "https://httpstat.us"
@Test @Test
fun `Validate Joke Exception`() { fun `Validate Joke Exception`() {
val e = assertThrows<JokeException> { val e = assertThrows<JokeException> {
getJoke(categories = setOf(Category.CHRISTMAS), search = "foo") getJoke(categories = setOf(Category.CHRISTMAS), search = "foo")
} }
logger.fine(e.debug()) logger.fine(e.debug())
assertAll("JokeException Validation", assertAll(
{ assertEquals(106, e.code, "code should be valid") }, "JokeException Validation",
{ assertTrue(e.error, "should be an error") }, { assertEquals(106, e.code) { "getJoke(${Category.CHRISTMAS}, foo).code" } },
{ assertFalse(e.internalError, "should not be internal error") }, { assertTrue(e.error) { "getJoke(${Category.CHRISTMAS}, foo).error" } },
{ assertEquals("No matching joke found", e.message, "message should match") }, { assertFalse(e.internalError) { "getJoke(${Category.CHRISTMAS}, foo).internalError" } },
{ assertEquals(1, e.causedBy.size, "causedBy size should be 1") }, { assertEquals("No matching joke found", e.message) { "getJoke(${Category.CHRISTMAS}, foo).message" } },
{ assertTrue(e.causedBy[0].startsWith("No jokes"), "causedBy should start with no jokes") }, { assertThat(e.causedBy, "getJoke(${Category.CHRISTMAS}, foo).causedBy").size().isEqualTo(1) },
{ assertTrue(e.additionalInfo.isNotEmpty(), "additional info should not be empty") }, { assertThat(e.causedBy, "getJoke(${Category.CHRISTMAS}, foo).causedBy").index(0).startsWith("No jokes") },
{ assertTrue(e.timestamp > 0, "timestamp should be > 0") }) { assertThat(e.additionalInfo, "getJoke(${Category.CHRISTMAS}, foo).additionalInfo").isNotEmpty() },
{ assertThat(e.timestamp, "getJoke(${Category.CHRISTMAS}, foo).timestamp").isGreaterThan(0) },
)
} }
@ParameterizedTest(name = "HTTP Status Code: {0}") @ParameterizedTest(name = "HTTP Status Code: {0}")
@ValueSource(ints = [400, 404, 403, 413, 414, 429, 500, 523]) @ValueSource(ints = [400, 404, 403, 413, 414, 429, 500, 523])
fun `Validate HTTP Error Exceptions`(input: Int) { fun `Validate HTTP Error Exceptions`(input: Int) {
val e = assertThrows<HttpErrorException> { val e = assertThrows<HttpErrorException> {
fetchUrl("https://httpstat.us/$input") fetchUrl("$httpStat/$input")
} }
assertAll("HttpErrorException Validation", assertAll("HttpErrorException Validation",
{ assertEquals(input, e.statusCode) { "status code should be $input" } }, { assertEquals(input, e.statusCode) { "fetchUrl($httpStat/$input).statusCode" } },
{ assertTrue(e.message!!.isNotEmpty()) { "message for $input should not be empty" } }, { assertThat(e.message!!, "fetchUrl($httpStat/$input).message").isNotEmpty() },
{ assertTrue(e.cause!!.message!!.isNotEmpty()) { "cause of $input should not be empty" } }) { assertThat(e.cause!!.message!!, "fetchUrl($httpStat/$input).cause.message").isNotEmpty() }
)
} }
@Test @Test
fun `Fetch Invalid URL`() { fun `Fetch Invalid URL`() {
val statusCode = 999 val statusCode = 999
val e = assertThrows<HttpErrorException> { val e = assertThrows<HttpErrorException> {
fetchUrl("https://httpstat.us/$statusCode") fetchUrl("$httpStat/$statusCode")
} }
Assertions.assertAll("JokeException Validation", Assertions.assertAll("JokeException Validation",
{ assertEquals(statusCode, e.statusCode) { "status code should be $statusCode" } }, { assertEquals(statusCode, e.statusCode) { "fetchUrl($httpStat/$statusCode).statusCode" } },
{ assertTrue(e.message!!.isNotEmpty(), "message should not be empty") }, { assertThat(e.message!!, "fetchUrl($httpStat/$statusCode).message").isNotEmpty() },
{ assertTrue(e.cause == null, "cause should be null") }) { assertThat(e.cause, "fetchUrl($httpStat/$statusCode).statusCode.cause").isNull() }
)
} }
companion object { companion object {

View file

@ -32,6 +32,15 @@
package net.thauvin.erik.jokeapi package net.thauvin.erik.jokeapi
import assertk.all
import assertk.assertThat
import assertk.assertions.contains
import assertk.assertions.isEmpty
import assertk.assertions.isGreaterThan
import assertk.assertions.isGreaterThanOrEqualTo
import assertk.assertions.isIn
import assertk.assertions.isNotEmpty
import assertk.assertions.size
import net.thauvin.erik.jokeapi.JokeApi.Companion.getJoke import net.thauvin.erik.jokeapi.JokeApi.Companion.getJoke
import net.thauvin.erik.jokeapi.JokeApi.Companion.logger import net.thauvin.erik.jokeapi.JokeApi.Companion.logger
import net.thauvin.erik.jokeapi.exceptions.JokeException import net.thauvin.erik.jokeapi.exceptions.JokeException
@ -49,6 +58,7 @@ import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertThrows import org.junit.jupiter.api.assertThrows
import java.util.logging.ConsoleHandler import java.util.logging.ConsoleHandler
import java.util.logging.Level import java.util.logging.Level
import kotlin.test.assertContains
internal class GetJokeTest { internal class GetJokeTest {
@Test @Test
@ -56,24 +66,24 @@ internal class GetJokeTest {
val joke = getJoke() val joke = getJoke()
logger.fine(joke.toString()) logger.fine(joke.toString())
assertAll("No Param Joke", assertAll("No Param Joke",
{ assertFalse(joke.error, "error should be false") }, { assertFalse(joke.error, "getJoke().error") },
{ assertTrue(joke.joke.isNotEmpty(), "joke should not be empty") }, { assertThat(joke.joke, "getJoke().joke").isNotEmpty() },
{ assertTrue(joke.type == Type.TWOPART || joke.type == Type.SINGLE, "type should validate") }, { assertThat(joke.type, "getJoke().type").isIn(Type.SINGLE, Type.TWOPART) },
{ assertTrue(joke.id >= 0, "id should be >= 0") }, { assertThat(joke.id, "getJoke().id").isGreaterThanOrEqualTo(0) },
{ assertEquals(Language.EN, joke.language, "language should be english") }) { assertEquals(Language.EN, joke.language, "getJoke().language") })
} }
@Test @Test
fun `Get Joke without Blacklist Flags`() { fun `Get Joke without Blacklist Flags`() {
val joke = getJoke(flags = setOf(Flag.ALL)) val joke = getJoke(flags = setOf(Flag.ALL))
assertTrue(joke.flags.isEmpty(), "flags should be empty.") assertThat(joke.flags, "getJoke(flags=ALL)").isEmpty()
} }
@Test @Test
fun `Get Joke without any Blacklist Flags`() { fun `Get Joke without any Blacklist Flags`() {
val allFlags = Flag.values().filter { it != Flag.ALL }.toSet() val allFlags = Flag.values().filter { it != Flag.ALL }.toSet()
val joke = getJoke(flags = allFlags) val joke = getJoke(flags = allFlags)
assertTrue(joke.flags.isEmpty(), "flags should be empty.") assertThat(joke.flags, "getJoke(all flags)").isEmpty()
} }
@Test @Test
@ -82,9 +92,15 @@ internal class GetJokeTest {
val joke = getJoke(idRange = IdRange(id)) val joke = getJoke(idRange = IdRange(id))
logger.fine(joke.toString()) logger.fine(joke.toString())
assertAll("Joke by ID", assertAll("Joke by ID",
{ assertTrue(joke.flags.contains(Flag.NSFW) && joke.flags.contains(Flag.EXPLICIT), "nsfw & explicit") }, {
{ assertEquals(172, joke.id) { "id is $id" } }, assertThat(joke.flags, "getJoke($id).flags").all {
{ assertEquals(Category.PUN, joke.category, "category should be pun") }) contains(Flag.EXPLICIT)
contains(Flag.NSFW)
}
},
{ assertEquals(172, joke.id) { "getJoke($id).id" } },
{ assertEquals(Category.PUN, joke.category) { "getJoke($id).category" } }
)
} }
@Test @Test
@ -92,31 +108,34 @@ internal class GetJokeTest {
val idRange = IdRange(1, 100) val idRange = IdRange(1, 100)
val joke = getJoke(idRange = idRange) val joke = getJoke(idRange = idRange)
logger.fine(joke.toString()) logger.fine(joke.toString())
assertTrue(joke.id >= idRange.start && joke.id <= idRange.end, "id should be in range") assertContains(IntRange(idRange.start, idRange.end), joke.id, "getJoke(${idRange})")
} }
@Test @Test
fun `Get Joke with invalid ID Range`() { fun `Get Joke with invalid ID Range`() {
val joke = getJoke(idRange = IdRange(100, 1)) val idRange = IdRange(100, 1)
val joke = getJoke(idRange = idRange)
logger.fine(joke.toString()) logger.fine(joke.toString())
assertFalse(joke.error, "should not be an error") assertFalse(joke.error) { "getJoke(${idRange}.error" }
} }
@Test @Test
fun `Get Joke with max ID Range`() { fun `Get Joke with max ID Range`() {
val e = assertThrows<JokeException> { getJoke(idRange = IdRange(1, 30000)) } val idRange = IdRange(1, 30000)
val e = assertThrows<JokeException> { getJoke(idRange = idRange) }
assertAll("Joke w/ max ID Range", assertAll("Joke w/ max ID Range",
{ assertTrue(e.error, "should be an error") }, { assertTrue(e.error, "getJoke{${idRange}).error") },
{ assertTrue(e.additionalInfo.contains("ID range"), "should contain ID range") }) { assertContains(e.additionalInfo, "ID range", false, "getJoke{${idRange}).additionalInfo") })
} }
@Test @Test
fun `Get Joke with two Categories`() { fun `Get Joke with two Categories`() {
val joke = getJoke(categories = setOf(Category.PROGRAMMING, Category.MISC)) val joke = getJoke(categories = setOf(Category.PROGRAMMING, Category.MISC))
logger.fine(joke.toString()) logger.fine(joke.toString())
assertTrue(joke.category == Category.PROGRAMMING || joke.category == Category.MISC) { assertThat(joke.category, "getJoke(${Category.PROGRAMMING},${Category.MISC})").isIn(
"category should be ${Category.PROGRAMMING.value} or ${Category.MISC.value}" Category.PROGRAMMING,
} Category.MISC
)
} }
@Test @Test
@ -124,7 +143,7 @@ internal class GetJokeTest {
Category.values().filter { it != Category.ANY }.forEach { Category.values().filter { it != Category.ANY }.forEach {
val joke = getJoke(categories = setOf(it)) val joke = getJoke(categories = setOf(it))
logger.fine(joke.toString()) logger.fine(joke.toString())
assertEquals(it.value, joke.category.value) { "category should be ${it.value}" } assertEquals(it.value, joke.category.value) { "getJoke($it).category" }
} }
} }
@ -132,7 +151,7 @@ internal class GetJokeTest {
fun `Get Joke with each Languages`() { fun `Get Joke with each Languages`() {
Language.values().forEach { Language.values().forEach {
val joke = getJoke(language = it) val joke = getJoke(language = it)
assertEquals(it.value, joke.language.value) { "language should be ${it.value}" } assertEquals(it.value, joke.language.value) { "getJoke(${it}).language" }
} }
} }
@ -141,7 +160,7 @@ internal class GetJokeTest {
val joke = getJoke( val joke = getJoke(
categories = setOf(Category.DARK), type = Type.SINGLE, idRange = IdRange(178), splitNewLine = false categories = setOf(Category.DARK), type = Type.SINGLE, idRange = IdRange(178), splitNewLine = false
) )
assertTrue(joke.joke.toString().contains("\n"), "should contain newline") assertContains(joke.joke.toString(), "\n", false, "getJoke(splitNewLine=false)")
} }
@Test @Test
@ -149,15 +168,15 @@ internal class GetJokeTest {
val joke = getJoke(safe = true) val joke = getJoke(safe = true)
logger.fine(joke.toString()) logger.fine(joke.toString())
assertAll("Safe Joke", assertAll("Safe Joke",
{ assertTrue(joke.safe, "should be safe") }, { assertTrue(joke.safe, "getJoke(safe).safe") },
{ assertTrue(joke.flags.isEmpty(), "flags should be empty") }) { assertThat(joke.flags, "getJoke(safe).flags").isEmpty() })
} }
@Test @Test
fun `Get Single Joke`() { fun `Get Single Joke`() {
val joke = getJoke(type = Type.SINGLE) val joke = getJoke(type = Type.SINGLE)
logger.fine(joke.toString()) logger.fine(joke.toString())
assertEquals(Type.SINGLE, joke.type, "type should be single") assertEquals(Type.SINGLE, joke.type) { "getJoke(${Type.SINGLE}).type" }
} }
@Test @Test
@ -165,8 +184,9 @@ internal class GetJokeTest {
val joke = getJoke(type = Type.TWOPART) val joke = getJoke(type = Type.TWOPART)
logger.fine(joke.toString()) logger.fine(joke.toString())
assertAll("Two-Parts Joke", assertAll("Two-Parts Joke",
{ assertEquals(Type.TWOPART, joke.type, "type should be two-part") }, { assertEquals(Type.TWOPART, joke.type) { "getJoke(${Type.TWOPART}).type" } },
{ assertTrue(joke.joke.size > 1, "should have multiple lines") }) { assertThat(joke.joke, "getJoke(${Type.TWOPART}).joke").size().isGreaterThan(1) }
)
} }
@Test @Test
@ -175,7 +195,7 @@ internal class GetJokeTest {
val joke = val joke =
getJoke(search = "his wife", categories = setOf(Category.PROGRAMMING), idRange = IdRange(id), safe = true) getJoke(search = "his wife", categories = setOf(Category.PROGRAMMING), idRange = IdRange(id), safe = true)
logger.fine(joke.toString()) logger.fine(joke.toString())
assertEquals(id, joke.id) { "id should be $id" } assertEquals(id, joke.id) { "getJoke(his wife).id" }
} }
companion object { companion object {

View file

@ -32,50 +32,53 @@
package net.thauvin.erik.jokeapi package net.thauvin.erik.jokeapi
import assertk.assertThat
import assertk.assertions.doesNotContain
import assertk.assertions.isNotEmpty
import assertk.assertions.startsWith
import net.thauvin.erik.jokeapi.JokeApi.Companion.getRawJoke import net.thauvin.erik.jokeapi.JokeApi.Companion.getRawJoke
import net.thauvin.erik.jokeapi.JokeApi.Companion.logger import net.thauvin.erik.jokeapi.JokeApi.Companion.logger
import net.thauvin.erik.jokeapi.models.Format import net.thauvin.erik.jokeapi.models.Format
import org.junit.jupiter.api.Assertions.assertFalse import org.junit.jupiter.api.Assertions.assertFalse
import org.junit.jupiter.api.Assertions.assertTrue
import org.junit.jupiter.api.BeforeAll import org.junit.jupiter.api.BeforeAll
import org.junit.jupiter.api.Test import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertAll import org.junit.jupiter.api.assertAll
import java.util.logging.ConsoleHandler import java.util.logging.ConsoleHandler
import java.util.logging.Level import java.util.logging.Level
import kotlin.test.assertContains
internal class GetRawJokeTest { internal class GetRawJokeTest {
@Test @Test
fun `Get Raw Joke with TXT`() { fun `Get Raw Joke with TXT`() {
val response = getRawJoke(format = Format.TEXT) val response = getRawJoke(format = Format.TEXT)
assertAll("Plain Text", assertAll("Plain Text",
{ assertTrue(response.isNotEmpty(), "should be not empty") }, { assertThat(response, "getRawJoke(txt)").isNotEmpty() },
{ assertFalse(response.startsWith("Error "), "should not be an error") }) { assertFalse(response.startsWith("Error "), "getRawJoke(txt)") }
)
} }
@Test @Test
fun `Get Raw Joke with invalid Amount`() { fun `Get Raw Joke with invalid Amount`() {
val response = getRawJoke(amount = 100) val response = getRawJoke(amount = 100)
assertFalse(response.contains("\"amount\":"), "should not have amount") assertThat(response, "getRawJoke(100)").doesNotContain("\"amount\":")
} }
@Test @Test
fun `Get Raw Joke with XML`() { fun `Get Raw Joke with XML`() {
val response = getRawJoke(format = Format.XML) val response = getRawJoke(format = Format.XML)
assertTrue( assertThat(response, "getRawJoke(xml)").startsWith("<?xml version='1.0'?>\n<data>\n <error>false</error>")
response.startsWith("<?xml version='1.0'?>\n<data>\n <error>false</error>"), "should be xml"
)
} }
@Test @Test
fun `Get Raw Joke with YAML`() { fun `Get Raw Joke with YAML`() {
val response = getRawJoke(format = Format.YAML) val response = getRawJoke(format = Format.YAML)
assertTrue(response.startsWith("error: false"), "should be yaml") assertThat(response, "getRawJoke(yaml)").startsWith("error: false")
} }
@Test @Test
fun `Get Raw Jokes`() { fun `Get Raw Jokes`() {
val response = getRawJoke(amount = 2) val response = getRawJoke(amount = 2)
assertTrue(response.contains("\"amount\": 2"), "amount should be 2") assertContains(response, "\"amount\": 2", false, "getRawJoke(2)")
} }
companion object { companion object {

View file

@ -32,6 +32,9 @@
package net.thauvin.erik.jokeapi package net.thauvin.erik.jokeapi
import assertk.assertThat
import assertk.assertions.isEqualTo
import assertk.assertions.size
import net.thauvin.erik.jokeapi.JokeApi.Companion.getJoke import net.thauvin.erik.jokeapi.JokeApi.Companion.getJoke
import net.thauvin.erik.jokeapi.JokeApi.Companion.getRawJoke import net.thauvin.erik.jokeapi.JokeApi.Companion.getRawJoke
import net.thauvin.erik.jokeapi.JokeApi.Companion.logger import net.thauvin.erik.jokeapi.JokeApi.Companion.logger
@ -48,6 +51,7 @@ import org.junit.jupiter.api.BeforeAll
import org.junit.jupiter.api.Test import org.junit.jupiter.api.Test
import java.util.logging.ConsoleHandler import java.util.logging.ConsoleHandler
import java.util.logging.Level import java.util.logging.Level
import kotlin.test.assertContains
class JokeConfigTest { class JokeConfigTest {
@Test @Test
@ -65,12 +69,13 @@ class JokeConfigTest {
val joke = getJoke(config) val joke = getJoke(config)
logger.fine(joke.toString()) logger.fine(joke.toString())
assertAll("Two-Parts Joke", assertAll("Two-Parts Joke",
{ assertEquals(Type.TWOPART, joke.type, "type should be two-part") }, { assertEquals(Type.TWOPART, joke.type, "config.type") },
{ assertEquals(joke.category, Category.PROGRAMMING) { "category should be ${Category.PROGRAMMING}" } }, { assertEquals(joke.category, Category.PROGRAMMING) { "config.category" } },
{ assertEquals(joke.joke.size, 2, "should have two lines") }, { assertThat(joke.joke, "config.joke").size().isEqualTo(2) },
{ assertEquals(joke.language, Language.EN, "language should be english") }, { assertEquals(joke.language, Language.EN, "config.language") },
{ assertTrue(joke.flags.isEmpty(), "flags should empty") }, { assertTrue(joke.flags.isEmpty(), "config.flags.isEmpty") },
{ assertTrue(joke.id in id - 2..id + 2) { "id should be $id +- 2" } }) { assertContains(IntRange(id - 2, id + 2), joke.id, "config.id") }
)
} }
@Test @Test
@ -83,9 +88,7 @@ class JokeConfigTest {
safe(true) safe(true)
}.build() }.build()
val joke = getRawJoke(config) val joke = getRawJoke(config)
assertTrue( assertContains(joke, "----------------------------------------------", false, "config.amount(2)")
joke.contains("----------------------------------------------"), "should contain -- delimiter"
)
} }
companion object { companion object {