From 40487b9ec922e9e867a83173098341093decc2ee Mon Sep 17 00:00:00 2001 From: Dzmitry Rymarau Date: Wed, 27 Mar 2024 18:54:26 +0300 Subject: [PATCH] feat(api): migrate to okhttp 5.0.0-alpha.12 --- gradle/libs.versions.toml | 5 +- sdk-api/build.gradle.kts | 1 + .../pexip/sdk/api/infinity/InfinityService.kt | 6 +- .../sdk/api/infinity/internal/CallStepImpl.kt | 14 +- .../infinity/internal/ConferenceStepImpl.kt | 12 +- .../infinity/internal/ParticipantStepImpl.kt | 6 +- .../internal/RealEventSourceFactory.kt | 6 +- .../infinity/internal/RegistrationStepImpl.kt | 14 +- .../pexip/sdk/api/infinity/CallStepTest.kt | 67 ++--- .../sdk/api/infinity/ConferenceStepTest.kt | 249 ++++++++--------- .../sdk/api/infinity/ParticipantStepTest.kt | 251 +++++++++--------- .../sdk/api/infinity/RegistrationStepTest.kt | 70 ++--- .../sdk/api/infinity/RequestBuilderTest.kt | 17 +- .../kotlin/com/pexip/sdk/api/infinity/Util.kt | 57 ++-- 14 files changed, 396 insertions(+), 379 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index fc5552e61..1b399cdfb 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -20,7 +20,7 @@ kotlinx-serialization = "1.6.3" ktlint = "1.2.1" licensee = "1.11.0" minidns = "1.0.4" -okhttp = "4.12.0" +okhttp = "5.0.0-alpha.12" okio = "3.9.0" spotless = "6.25.0" turbine = "1.1.0" @@ -69,7 +69,8 @@ minidns-android21 = { module = "org.minidns:minidns-android21", version.ref = "m okhttp = { module = "com.squareup.okhttp3:okhttp", version.ref = "okhttp" } okhttp-sse = { module = "com.squareup.okhttp3:okhttp-sse", version.ref = "okhttp" } okhttp-logginginterceptor = { module = "com.squareup.okhttp3:logging-interceptor", version.ref = "okhttp" } -okhttp-mockwebserver = { module = "com.squareup.okhttp3:mockwebserver", version.ref = "okhttp" } +okhttp-mockwebserver = { module = "com.squareup.okhttp3:mockwebserver3", version.ref = "okhttp" } +okhttp-mockwebserver-junit4 = { module = "com.squareup.okhttp3:mockwebserver3-junit4", version.ref = "okhttp" } okio = { module = "com.squareup.okio:okio", version.ref = "okio" } turbine = { module = "app.cash.turbine:turbine", version.ref = "turbine" } webrtc = { module = "com.pexip.webrtc:webrtc", version.ref = "webrtc" } diff --git a/sdk-api/build.gradle.kts b/sdk-api/build.gradle.kts index 408688d52..e7225264b 100644 --- a/sdk-api/build.gradle.kts +++ b/sdk-api/build.gradle.kts @@ -19,6 +19,7 @@ dependencies { testImplementation(project(":sdk-infinity-test")) testImplementation(libs.kotlinx.coroutines.test) testImplementation(libs.okhttp.mockwebserver) + testImplementation(libs.okhttp.mockwebserver.junit4) } publishing.publications.withType { diff --git a/sdk-api/src/main/kotlin/com/pexip/sdk/api/infinity/InfinityService.kt b/sdk-api/src/main/kotlin/com/pexip/sdk/api/infinity/InfinityService.kt index 69aa475af..30ff8bac5 100644 --- a/sdk-api/src/main/kotlin/com/pexip/sdk/api/infinity/InfinityService.kt +++ b/sdk-api/src/main/kotlin/com/pexip/sdk/api/infinity/InfinityService.kt @@ -27,7 +27,7 @@ import kotlinx.serialization.json.Json import kotlinx.serialization.modules.SerializersModule import okhttp3.OkHttpClient import java.net.URL -import java.util.concurrent.TimeUnit +import kotlin.time.Duration.Companion.minutes /** * A fluent client for Infinity REST API v2. @@ -1149,7 +1149,9 @@ public interface InfinityService { ) internal fun create(client: OkHttpClient, json: Json) = InfinityServiceImpl( - client = client.newBuilder().readTimeout(1, TimeUnit.MINUTES).build(), + client = client.newBuilder() + .readTimeout(1.minutes) + .build(), json = json, ) } diff --git a/sdk-api/src/main/kotlin/com/pexip/sdk/api/infinity/internal/CallStepImpl.kt b/sdk-api/src/main/kotlin/com/pexip/sdk/api/infinity/internal/CallStepImpl.kt index 7f00d2bbe..9d2f9c446 100644 --- a/sdk-api/src/main/kotlin/com/pexip/sdk/api/infinity/internal/CallStepImpl.kt +++ b/sdk-api/src/main/kotlin/com/pexip/sdk/api/infinity/internal/CallStepImpl.kt @@ -30,7 +30,7 @@ import com.pexip.sdk.infinity.CallId import kotlinx.serialization.SerializationException import okhttp3.Request import okhttp3.Response -import java.util.concurrent.TimeUnit +import kotlin.time.Duration internal class CallStepImpl( override val participantStep: ParticipantStepImpl, @@ -54,7 +54,7 @@ internal class CallStepImpl( override fun ack(token: Token): Call = RealCall( client = client.newBuilder() - .readTimeout(0, TimeUnit.SECONDS) + .readTimeout(Duration.ZERO) .build(), request = Request.Builder() .post(EMPTY_REQUEST) @@ -71,7 +71,7 @@ internal class CallStepImpl( override fun ack(request: AckRequest, token: Token): Call = RealCall( client = client.newBuilder() - .readTimeout(0, TimeUnit.SECONDS) + .readTimeout(Duration.ZERO) .build(), request = Request.Builder() .post(json.encodeToRequestBody(request)) @@ -131,26 +131,26 @@ internal class CallStepImpl( } private fun parseUpdate(response: Response) = when (response.code) { - 200 -> json.decodeFromResponseBody(UpdateResponseSerializer, response.body!!) + 200 -> json.decodeFromResponseBody(UpdateResponseSerializer, response.body) 403 -> response.parse403() 404 -> response.parse404() else -> throw IllegalStateException() } private fun parseDtmf(response: Response) = when (response.code) { - 200 -> json.decodeFromResponseBody(BooleanSerializer, response.body!!) + 200 -> json.decodeFromResponseBody(BooleanSerializer, response.body) 403 -> response.parse403() 404 -> response.parse404() else -> throw IllegalStateException() } private fun Response.parse403(): Nothing { - val message = json.decodeFromResponseBody(StringSerializer, body!!) + val message = json.decodeFromResponseBody(StringSerializer, body) throw InvalidTokenException(message) } private fun Response.parse404(): Nothing = try { - val message = json.decodeFromResponseBody(StringSerializer, body!!) + val message = json.decodeFromResponseBody(StringSerializer, body) throw NoSuchConferenceException(message) } catch (e: SerializationException) { throw NoSuchNodeException() diff --git a/sdk-api/src/main/kotlin/com/pexip/sdk/api/infinity/internal/ConferenceStepImpl.kt b/sdk-api/src/main/kotlin/com/pexip/sdk/api/infinity/internal/ConferenceStepImpl.kt index 8d84b25f8..68b88c53c 100644 --- a/sdk-api/src/main/kotlin/com/pexip/sdk/api/infinity/internal/ConferenceStepImpl.kt +++ b/sdk-api/src/main/kotlin/com/pexip/sdk/api/infinity/internal/ConferenceStepImpl.kt @@ -276,7 +276,7 @@ internal class ConferenceStepImpl( private fun parseRequestToken(response: Response) = when (response.code) { 200 -> { - val r = json.decodeFromResponseBody(RequestTokenResponseSerializer, response.body!!) + val r = json.decodeFromResponseBody(RequestTokenResponseSerializer, response.body) val directMediaRequested = response.request.tagOrElse { false } r.copy(directMediaRequested = directMediaRequested) } @@ -286,7 +286,7 @@ internal class ConferenceStepImpl( } private fun Response.parseRequestToken403(): Nothing { - val r = json.decodeFromResponseBody(RequestToken403ResponseSerializer, body!!) + val r = json.decodeFromResponseBody(RequestToken403ResponseSerializer, body) throw when (r) { is RequiredPinResponse -> RequiredPinException(r.guest_pin == "required") is RequiredSsoResponse -> RequiredSsoException(r.idp) @@ -297,7 +297,7 @@ internal class ConferenceStepImpl( private fun parseTransformLayout(response: Response) = when (response.code) { 400 -> { - val message = json.decodeFromResponseBody(StringSerializer, response.body!!) + val message = json.decodeFromResponseBody(StringSerializer, response.body) throw IllegalLayoutTransformException(message) } else -> parse(response, BooleanSerializer) @@ -312,19 +312,19 @@ internal class ConferenceStepImpl( response: Response, deserializer: DeserializationStrategy, ) = when (response.code) { - 200 -> json.decodeFromResponseBody(deserializer, response.body!!) + 200 -> json.decodeFromResponseBody(deserializer, response.body) 403 -> response.parse403() 404 -> response.parse404() else -> throw IllegalStateException() } private fun Response.parse403(): Nothing { - val message = json.decodeFromResponseBody(StringSerializer, body!!) + val message = json.decodeFromResponseBody(StringSerializer, body) throw InvalidTokenException(message) } private fun Response.parse404(): Nothing = try { - val message = json.decodeFromResponseBody(StringSerializer, body!!) + val message = json.decodeFromResponseBody(StringSerializer, body) throw NoSuchConferenceException(message) } catch (e: SerializationException) { throw NoSuchNodeException() diff --git a/sdk-api/src/main/kotlin/com/pexip/sdk/api/infinity/internal/ParticipantStepImpl.kt b/sdk-api/src/main/kotlin/com/pexip/sdk/api/infinity/internal/ParticipantStepImpl.kt index dfa83214f..54f8063a3 100644 --- a/sdk-api/src/main/kotlin/com/pexip/sdk/api/infinity/internal/ParticipantStepImpl.kt +++ b/sdk-api/src/main/kotlin/com/pexip/sdk/api/infinity/internal/ParticipantStepImpl.kt @@ -304,19 +304,19 @@ internal class ParticipantStepImpl( response: Response, deserializer: DeserializationStrategy, ) = when (response.code) { - 200 -> json.decodeFromResponseBody(deserializer, response.body!!) + 200 -> json.decodeFromResponseBody(deserializer, response.body) 403 -> response.parse403() 404 -> response.parse404() else -> throw IllegalStateException() } private fun Response.parse403(): Nothing { - val message = json.decodeFromResponseBody(StringSerializer, body!!) + val message = json.decodeFromResponseBody(StringSerializer, body) throw InvalidTokenException(message) } private fun Response.parse404(): Nothing = try { - val message = json.decodeFromResponseBody(StringSerializer, body!!) + val message = json.decodeFromResponseBody(StringSerializer, body) throw NoSuchConferenceException(message) } catch (e: SerializationException) { throw NoSuchNodeException() diff --git a/sdk-api/src/main/kotlin/com/pexip/sdk/api/infinity/internal/RealEventSourceFactory.kt b/sdk-api/src/main/kotlin/com/pexip/sdk/api/infinity/internal/RealEventSourceFactory.kt index 8a9b9a824..08e282e5b 100644 --- a/sdk-api/src/main/kotlin/com/pexip/sdk/api/infinity/internal/RealEventSourceFactory.kt +++ b/sdk-api/src/main/kotlin/com/pexip/sdk/api/infinity/internal/RealEventSourceFactory.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022-2023 Pexip AS + * Copyright 2022-2024 Pexip AS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,7 +22,7 @@ import kotlinx.serialization.json.Json import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.sse.EventSources -import java.util.concurrent.TimeUnit +import kotlin.time.Duration internal class RealEventSourceFactory( client: OkHttpClient, @@ -30,7 +30,7 @@ internal class RealEventSourceFactory( private val json: Json, ) : EventSourceFactory { - private val factory = EventSources.createFactory(client) { readTimeout(0, TimeUnit.SECONDS) } + private val factory = EventSources.createFactory(client) { readTimeout(Duration.ZERO) } override fun create(listener: EventSourceListener): EventSource = RealEventSource(factory, request, json, listener) diff --git a/sdk-api/src/main/kotlin/com/pexip/sdk/api/infinity/internal/RegistrationStepImpl.kt b/sdk-api/src/main/kotlin/com/pexip/sdk/api/infinity/internal/RegistrationStepImpl.kt index 48fe49686..e6cf8ec13 100644 --- a/sdk-api/src/main/kotlin/com/pexip/sdk/api/infinity/internal/RegistrationStepImpl.kt +++ b/sdk-api/src/main/kotlin/com/pexip/sdk/api/infinity/internal/RegistrationStepImpl.kt @@ -115,7 +115,7 @@ internal class RegistrationStepImpl( private fun parseRequestToken(response: Response) = when (response.code) { 200 -> json.decodeFromResponseBody( deserializer = RequestRegistrationTokenResponseSerializer, - body = response.body!!, + body = response.body, ) 401 -> response.parse401() 403 -> response.parse403() @@ -126,7 +126,7 @@ internal class RegistrationStepImpl( private fun parseRefreshToken(response: Response) = when (response.code) { 200 -> json.decodeFromResponseBody( deserializer = RefreshRegistrationTokenResponseSerializer, - body = response.body!!, + body = response.body, ) 401 -> response.parse401() 403 -> response.parse403() @@ -135,7 +135,7 @@ internal class RegistrationStepImpl( } private fun parseReleaseToken(response: Response) = when (response.code) { - 200 -> json.decodeFromResponseBody(BooleanSerializer, response.body!!) + 200 -> json.decodeFromResponseBody(BooleanSerializer, response.body) 401 -> response.parse401() 403 -> response.parse403() 404 -> response.parse404() @@ -143,7 +143,7 @@ internal class RegistrationStepImpl( } private fun parseRegistrations(response: Response) = when (response.code) { - 200 -> json.decodeFromResponseBody(RegistrationResponseSerializer, response.body!!) + 200 -> json.decodeFromResponseBody(RegistrationResponseSerializer, response.body) 401 -> response.parse401() 403 -> response.parse403() 404 -> response.parse404() @@ -151,16 +151,16 @@ internal class RegistrationStepImpl( } private fun Response.parse401(): Nothing { - throw NoSuchRegistrationException(body?.string()) + throw NoSuchRegistrationException(body.string()) } private fun Response.parse403(): Nothing { - val message = json.decodeFromResponseBody(StringSerializer, body!!) + val message = json.decodeFromResponseBody(StringSerializer, body) throw InvalidTokenException(message) } private fun Response.parse404(): Nothing = try { - val message = json.decodeFromResponseBody(StringSerializer, body!!) + val message = json.decodeFromResponseBody(StringSerializer, body) throw NoSuchConferenceException(message) } catch (e: SerializationException) { throw NoSuchNodeException() diff --git a/sdk-api/src/test/kotlin/com/pexip/sdk/api/infinity/CallStepTest.kt b/sdk-api/src/test/kotlin/com/pexip/sdk/api/infinity/CallStepTest.kt index 49f6cce7e..10c437f2e 100644 --- a/sdk-api/src/test/kotlin/com/pexip/sdk/api/infinity/CallStepTest.kt +++ b/sdk-api/src/test/kotlin/com/pexip/sdk/api/infinity/CallStepTest.kt @@ -30,8 +30,9 @@ import com.pexip.sdk.infinity.test.nextString import kotlinx.coroutines.test.runTest import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json +import mockwebserver3.MockWebServer +import mockwebserver3.junit4.MockWebServerRule import okhttp3.OkHttpClient -import okhttp3.mockwebserver.MockWebServer import org.junit.Rule import java.net.URL import kotlin.properties.Delegates @@ -42,7 +43,9 @@ import kotlin.test.Test internal class CallStepTest { @get:Rule - val server = MockWebServer() + val rule = MockWebServerRule() + + private val server = rule.server private lateinit var node: URL private lateinit var conferenceAlias: String @@ -70,7 +73,7 @@ internal class CallStepTest { @Test fun `newCandidate throws IllegalStateException`() = runTest { - server.enqueue { setResponseCode(500) } + server.enqueue { code(500) } val request = Random.nextNewCandidateRequest() assertFailure { step.newCandidate(request, token).await() } .isInstanceOf() @@ -79,7 +82,7 @@ internal class CallStepTest { @Test fun `newCandidate throws NoSuchNodeException`() = runTest { - server.enqueue { setResponseCode(404) } + server.enqueue { code(404) } val request = Random.nextNewCandidateRequest() assertFailure { step.newCandidate(request, token).await() } .isInstanceOf() @@ -90,8 +93,8 @@ internal class CallStepTest { fun `newCandidate throws NoSuchConferenceException`() = runTest { val message = "Neither conference nor gateway found" server.enqueue { - setResponseCode(404) - setBody(json.encodeToString(Box(message))) + code(404) + body(json.encodeToString(Box(message))) } val request = Random.nextNewCandidateRequest() assertFailure { step.newCandidate(request, token).await() } @@ -103,8 +106,8 @@ internal class CallStepTest { fun `newCandidate throws InvalidTokenException`() = runTest { val message = "Invalid token" server.enqueue { - setResponseCode(403) - setBody(json.encodeToString(Box(message))) + code(403) + body(json.encodeToString(Box(message))) } val request = Random.nextNewCandidateRequest() assertFailure { step.newCandidate(request, token).await() } @@ -114,7 +117,7 @@ internal class CallStepTest { @Test fun `newCandidate returns on 200`() = runTest { - server.enqueue { setResponseCode(200) } + server.enqueue { code(200) } val request = Random.nextNewCandidateRequest() step.newCandidate(request, token).await() server.verifyNewCandidate(request, token) @@ -122,7 +125,7 @@ internal class CallStepTest { @Test fun `ack throws IllegalStateException`() = runTest { - server.enqueue { setResponseCode(500) } + server.enqueue { code(500) } val request = Random.maybe { nextAckRequest() } val call = when (request) { null -> step.ack(token) @@ -134,7 +137,7 @@ internal class CallStepTest { @Test fun `ack throws NoSuchNodeException`() = runTest { - server.enqueue { setResponseCode(404) } + server.enqueue { code(404) } val request = Random.maybe { nextAckRequest() } val call = when (request) { null -> step.ack(token) @@ -148,8 +151,8 @@ internal class CallStepTest { fun `ack throws NoSuchConferenceException`() = runTest { val message = "Neither conference nor gateway found" server.enqueue { - setResponseCode(404) - setBody(json.encodeToString(Box(message))) + code(404) + body(json.encodeToString(Box(message))) } val request = Random.maybe { nextAckRequest() } val call = when (request) { @@ -164,8 +167,8 @@ internal class CallStepTest { fun `ack throws InvalidTokenException`() = runTest { val message = "Invalid token" server.enqueue { - setResponseCode(403) - setBody(json.encodeToString(Box(message))) + code(403) + body(json.encodeToString(Box(message))) } val request = Random.maybe { nextAckRequest() } val call = when (request) { @@ -178,7 +181,7 @@ internal class CallStepTest { @Test fun `ack returns on 200`() = runTest { - server.enqueue { setResponseCode(200) } + server.enqueue { code(200) } val request = Random.maybe { nextAckRequest() } val call = when (request) { null -> step.ack(token) @@ -190,7 +193,7 @@ internal class CallStepTest { @Test fun `update throws IllegalStateException`() = runTest { - server.enqueue { setResponseCode(500) } + server.enqueue { code(500) } val request = Random.nextUpdateRequest() assertFailure { step.update(request, token).await() }.isInstanceOf() server.verifyUpdate(request, token) @@ -198,7 +201,7 @@ internal class CallStepTest { @Test fun `update throws NoSuchNodeException`() = runTest { - server.enqueue { setResponseCode(404) } + server.enqueue { code(404) } val request = Random.nextUpdateRequest() assertFailure { step.update(request, token).await() }.isInstanceOf() server.verifyUpdate(request, token) @@ -208,8 +211,8 @@ internal class CallStepTest { fun `update throws NoSuchConferenceException`() = runTest { val message = "Neither conference nor gateway found" server.enqueue { - setResponseCode(404) - setBody(json.encodeToString(Box(message))) + code(404) + body(json.encodeToString(Box(message))) } val request = Random.nextUpdateRequest() assertFailure { step.update(request, token).await() } @@ -222,8 +225,8 @@ internal class CallStepTest { fun `update throws InvalidTokenException`() = runTest { val message = "Invalid token" server.enqueue { - setResponseCode(403) - setBody(json.encodeToString(Box(message))) + code(403) + body(json.encodeToString(Box(message))) } val request = Random.nextUpdateRequest() assertFailure { step.update(request, token).await() } @@ -236,8 +239,8 @@ internal class CallStepTest { fun `update returns on 200`() = runTest { val response = UpdateResponse(Random.nextString()) server.enqueue { - setResponseCode(200) - setBody(json.encodeToString(Box(response))) + code(200) + body(json.encodeToString(Box(response))) } val request = Random.nextUpdateRequest() assertThat(step.update(request, token).await()).isEqualTo(response) @@ -246,7 +249,7 @@ internal class CallStepTest { @Test fun `dtmf throws IllegalStateException`() = runTest { - server.enqueue { setResponseCode(500) } + server.enqueue { code(500) } val request = DtmfRequest(Random.nextDigits(8)) assertFailure { step.dtmf(request, token).await() }.isInstanceOf() server.verifyDtmf(request, token) @@ -254,7 +257,7 @@ internal class CallStepTest { @Test fun `dtmf throws NoSuchNodeException`() = runTest { - server.enqueue { setResponseCode(404) } + server.enqueue { code(404) } val request = DtmfRequest(Random.nextDigits(8)) assertFailure { step.dtmf(request, token).await() }.isInstanceOf() server.verifyDtmf(request, token) @@ -264,8 +267,8 @@ internal class CallStepTest { fun `dtmf throws NoSuchConferenceException`() = runTest { val message = "Neither conference nor gateway found" server.enqueue { - setResponseCode(404) - setBody(json.encodeToString(Box(message))) + code(404) + body(json.encodeToString(Box(message))) } val request = DtmfRequest(Random.nextDigits(8)) assertFailure { step.dtmf(request, token).await() } @@ -277,8 +280,8 @@ internal class CallStepTest { fun `dtmf throws InvalidTokenException`() = runTest { val message = "Invalid token" server.enqueue { - setResponseCode(403) - setBody(json.encodeToString(Box(message))) + code(403) + body(json.encodeToString(Box(message))) } val request = DtmfRequest(Random.nextDigits(8)) assertFailure { step.dtmf(request, token).await() }.isInstanceOf() @@ -289,8 +292,8 @@ internal class CallStepTest { fun `dtmf returns`() = runTest { val response = Random.nextBoolean() server.enqueue { - setResponseCode(200) - setBody(json.encodeToString(Box(response))) + code(200) + body(json.encodeToString(Box(response))) } val request = DtmfRequest(Random.nextDigits(8)) assertThat(step.dtmf(request, token).await()).isEqualTo(response) diff --git a/sdk-api/src/test/kotlin/com/pexip/sdk/api/infinity/ConferenceStepTest.kt b/sdk-api/src/test/kotlin/com/pexip/sdk/api/infinity/ConferenceStepTest.kt index a915c80e8..28189dafb 100644 --- a/sdk-api/src/test/kotlin/com/pexip/sdk/api/infinity/ConferenceStepTest.kt +++ b/sdk-api/src/test/kotlin/com/pexip/sdk/api/infinity/ConferenceStepTest.kt @@ -37,9 +37,10 @@ import com.pexip.sdk.infinity.test.nextString import kotlinx.coroutines.test.runTest import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json +import mockwebserver3.MockWebServer +import mockwebserver3.junit4.MockWebServerRule import okhttp3.HttpUrl import okhttp3.OkHttpClient -import okhttp3.mockwebserver.MockWebServer import okio.FileSystem import org.junit.Rule import kotlin.random.Random @@ -51,7 +52,9 @@ import kotlin.time.Duration.Companion.seconds internal class ConferenceStepTest { @get:Rule - val server = MockWebServer() + val rule = MockWebServerRule() + + private val server = rule.server private lateinit var fileSystem: FileSystem private lateinit var node: HttpUrl @@ -73,7 +76,7 @@ internal class ConferenceStepTest { @Test fun `requestToken throws IllegalStateException`() { - server.enqueue { setResponseCode(500) } + server.enqueue { code(500) } val request = RequestTokenRequest() assertFailure { step.requestToken(request).execute() }.isInstanceOf() server.verifyRequestToken(request) @@ -81,7 +84,7 @@ internal class ConferenceStepTest { @Test fun `requestToken throws NoSuchNodeException`() { - server.enqueue { setResponseCode(404) } + server.enqueue { code(404) } val request = RequestTokenRequest() assertFailure { step.requestToken(request).execute() }.isInstanceOf() server.verifyRequestToken(request) @@ -91,8 +94,8 @@ internal class ConferenceStepTest { fun `requestToken throws NoSuchConferenceException`() { val message = "Neither conference nor gateway found" server.enqueue { - setResponseCode(404) - setBody(json.encodeToString(Box(message))) + code(404) + body(json.encodeToString(Box(message))) } val request = RequestTokenRequest(displayName = Random.nextString(16)) assertFailure { step.requestToken(request).execute() } @@ -109,8 +112,8 @@ internal class ConferenceStepTest { ) for (response in responses) { server.enqueue { - setResponseCode(403) - setBody(json.encodeToString(Box(response))) + code(403) + body(json.encodeToString(Box(response))) } val request = RequestTokenRequest() assertFailure { step.requestToken(request).execute() } @@ -125,8 +128,8 @@ internal class ConferenceStepTest { fun `requestToken throws InvalidPinException`() { val message = "Invalid PIN" server.enqueue { - setResponseCode(403) - setBody(json.encodeToString(Box(message))) + code(403) + body(json.encodeToString(Box(message))) } val request = RequestTokenRequest() val pin = Random.nextPin() @@ -146,8 +149,8 @@ internal class ConferenceStepTest { } val response = RequiredSsoResponse(idps) server.enqueue { - setResponseCode(403) - setBody(json.encodeToString(Box(response))) + code(403) + body(json.encodeToString(Box(response))) } val request = RequestTokenRequest() assertFailure { step.requestToken(request).execute() } @@ -168,8 +171,8 @@ internal class ConferenceStepTest { redirect_idp = idp, ) server.enqueue { - setResponseCode(403) - setBody(json.encodeToString(Box(response))) + code(403) + body(json.encodeToString(Box(response))) } val request = RequestTokenRequest(chosenIdp = idp.id) assertFailure { step.requestToken(request).execute() } @@ -246,8 +249,8 @@ internal class ConferenceStepTest { clientStatsUpdateInterval = Random.nextDuration(), ) server.enqueue { - setResponseCode(200) - setBody(json.encodeToString(Box(response))) + code(200) + body(json.encodeToString(Box(response))) } val call = when (pin) { null -> step.requestToken(request) @@ -260,14 +263,14 @@ internal class ConferenceStepTest { @Test fun `refreshToken throws IllegalStateException`() { - server.enqueue { setResponseCode(500) } + server.enqueue { code(500) } assertFailure { step.refreshToken(token).execute() }.isInstanceOf() server.verifyRefreshToken(token) } @Test fun `refreshToken throws NoSuchNodeException`() { - server.enqueue { setResponseCode(404) } + server.enqueue { code(404) } assertFailure { step.refreshToken(token).execute() }.isInstanceOf() server.verifyRefreshToken(token) } @@ -276,8 +279,8 @@ internal class ConferenceStepTest { fun `refreshToken throws NoSuchConferenceException`() { val message = "Neither conference nor gateway found" server.enqueue { - setResponseCode(404) - setBody(json.encodeToString(Box(message))) + code(404) + body(json.encodeToString(Box(message))) } assertFailure { step.refreshToken(token).execute() } .isInstanceOf() @@ -289,8 +292,8 @@ internal class ConferenceStepTest { fun `refreshToken throws InvalidTokenException`() { val message = "Invalid token" server.enqueue { - setResponseCode(403) - setBody(json.encodeToString(Box(message))) + code(403) + body(json.encodeToString(Box(message))) } assertFailure { step.refreshToken(token).execute() } .isInstanceOf() @@ -304,21 +307,21 @@ internal class ConferenceStepTest { token = Random.nextString(), expires = Random.nextInt(10..120).seconds, ) - server.enqueue { setBody(json.encodeToString(Box(response))) } + server.enqueue { body(json.encodeToString(Box(response))) } assertThat(step.refreshToken(token).execute(), "response").isEqualTo(response) server.verifyRefreshToken(token) } @Test fun `releaseToken throws IllegalStateException`() { - server.enqueue { setResponseCode(500) } + server.enqueue { code(500) } assertFailure { step.releaseToken(token).execute() }.isInstanceOf() server.verifyReleaseToken(token) } @Test fun `releaseToken throws NoSuchNodeException`() { - server.enqueue { setResponseCode(404) } + server.enqueue { code(404) } assertFailure { step.releaseToken(token).execute() }.isInstanceOf() server.verifyReleaseToken(token) } @@ -327,8 +330,8 @@ internal class ConferenceStepTest { fun `releaseToken throws NoSuchConferenceException`() { val message = "Neither conference nor gateway found" server.enqueue { - setResponseCode(404) - setBody(json.encodeToString(Box(message))) + code(404) + body(json.encodeToString(Box(message))) } assertFailure { step.releaseToken(token).execute() } .isInstanceOf() @@ -339,8 +342,8 @@ internal class ConferenceStepTest { fun `releaseToken throws InvalidTokenException`() { val message = "Invalid token" server.enqueue { - setResponseCode(403) - setBody(json.encodeToString(Box(message))) + code(403) + body(json.encodeToString(Box(message))) } assertFailure { step.releaseToken(token).execute() }.isInstanceOf() server.verifyReleaseToken(token) @@ -350,8 +353,8 @@ internal class ConferenceStepTest { fun `releaseToken returns on 200`() { val result = Random.nextBoolean() server.enqueue { - setResponseCode(200) - setBody(json.encodeToString(Box(result))) + code(200) + body(json.encodeToString(Box(result))) } assertThat(step.releaseToken(token).execute(), "response").isEqualTo(result) server.verifyReleaseToken(token) @@ -359,7 +362,7 @@ internal class ConferenceStepTest { @Test fun `message throws IllegalStateException`() { - server.enqueue { setResponseCode(500) } + server.enqueue { code(500) } val request = Random.nextMessageRequest() assertFailure { step.message(request, token).execute() } .isInstanceOf() @@ -368,7 +371,7 @@ internal class ConferenceStepTest { @Test fun `message throws NoSuchNodeException`() { - server.enqueue { setResponseCode(404) } + server.enqueue { code(404) } val request = Random.nextMessageRequest() assertFailure { step.message(request, token).execute() }.isInstanceOf() server.verifyMessage(request, token) @@ -378,8 +381,8 @@ internal class ConferenceStepTest { fun `message throws NoSuchConferenceException`() { val message = "Neither conference nor gateway found" server.enqueue { - setResponseCode(404) - setBody(json.encodeToString(Box(message))) + code(404) + body(json.encodeToString(Box(message))) } val request = Random.nextMessageRequest() assertFailure { step.message(request, token).execute() } @@ -391,8 +394,8 @@ internal class ConferenceStepTest { fun `message throws InvalidTokenException`() { val message = "Invalid token" server.enqueue { - setResponseCode(403) - setBody(json.encodeToString(Box(message))) + code(403) + body(json.encodeToString(Box(message))) } val request = Random.nextMessageRequest() assertFailure { step.message(request, token).execute() } @@ -405,8 +408,8 @@ internal class ConferenceStepTest { val results = listOf(true, false) results.forEach { result -> server.enqueue { - setResponseCode(200) - setBody(json.encodeToString(Box(result))) + code(200) + body(json.encodeToString(Box(result))) } val request = Random.nextMessageRequest() assertThat(step.message(request, token).execute(), "response").isEqualTo(result) @@ -416,7 +419,7 @@ internal class ConferenceStepTest { @Test fun `availableLayouts throws IllegalStateException`() = runTest { - server.enqueue { setResponseCode(500) } + server.enqueue { code(500) } assertFailure { step.availableLayouts(token).await() } .isInstanceOf() server.verifyAvailableLayouts(token) @@ -424,7 +427,7 @@ internal class ConferenceStepTest { @Test fun `availableLayouts throws NoSuchNodeException`() = runTest { - server.enqueue { setResponseCode(404) } + server.enqueue { code(404) } assertFailure { step.availableLayouts(token).await() }.isInstanceOf() server.verifyAvailableLayouts(token) } @@ -433,8 +436,8 @@ internal class ConferenceStepTest { fun `availableLayouts throws NoSuchConferenceException`() = runTest { val body = fileSystem.readUtf8("conference_not_found.json") server.enqueue { - setResponseCode(404) - setBody(body) + code(404) + body(body) } assertFailure { step.availableLayouts(token).await() } .isInstanceOf() @@ -445,8 +448,8 @@ internal class ConferenceStepTest { fun `availableLayouts throws InvalidTokenException`() = runTest { val body = fileSystem.readUtf8("invalid_token.json") server.enqueue { - setResponseCode(403) - setBody(body) + code(403) + body(body) } assertFailure { step.availableLayouts(token).await() } .isInstanceOf() @@ -457,8 +460,8 @@ internal class ConferenceStepTest { fun `availableLayouts returns a set on 200`() = runTest { val body = fileSystem.readUtf8("available_layouts.json") server.enqueue { - setResponseCode(200) - setBody(body) + code(200) + body(body) } assertThat(step.availableLayouts(token).await(), "response").containsOnly( LayoutId("5:7"), @@ -478,14 +481,14 @@ internal class ConferenceStepTest { @Test fun `layoutSvgs throws IllegalStateException`() = runTest { - server.enqueue { setResponseCode(500) } + server.enqueue { code(500) } assertFailure { step.layoutSvgs(token).await() }.isInstanceOf() server.verifyLayoutSvgs(token) } @Test fun `layoutSvgs throws NoSuchNodeException`() = runTest { - server.enqueue { setResponseCode(404) } + server.enqueue { code(404) } assertFailure { step.layoutSvgs(token).await() }.isInstanceOf() server.verifyLayoutSvgs(token) } @@ -494,8 +497,8 @@ internal class ConferenceStepTest { fun `layoutSvgs throws NoSuchConferenceException`() = runTest { val body = fileSystem.readUtf8("conference_not_found.json") server.enqueue { - setResponseCode(404) - setBody(body) + code(404) + body(body) } assertFailure { step.layoutSvgs(token).await() }.isInstanceOf() server.verifyLayoutSvgs(token) @@ -505,8 +508,8 @@ internal class ConferenceStepTest { fun `layoutSvgs throws InvalidTokenException`() = runTest { val body = fileSystem.readUtf8("invalid_token.json") server.enqueue { - setResponseCode(403) - setBody(body) + code(403) + body(body) } assertFailure { step.layoutSvgs(token).await() }.isInstanceOf() server.verifyLayoutSvgs(token) @@ -516,8 +519,8 @@ internal class ConferenceStepTest { fun `layoutSvgs returns a map on 200`() = runTest { val body = fileSystem.readUtf8("layout_svgs.json") server.enqueue { - setResponseCode(200) - setBody(body) + code(200) + body(body) } assertThat(step.layoutSvgs(token).await(), "response").containsOnly( LayoutId("1:7") to """ @@ -536,7 +539,7 @@ internal class ConferenceStepTest { @Test fun `transformLayout throws IllegalStateException`() = runTest { - server.enqueue { setResponseCode(500) } + server.enqueue { code(500) } val request = TransformLayoutRequest( layout = Random.nextLayoutId(), guestLayout = Random.nextLayoutId(), @@ -551,8 +554,8 @@ internal class ConferenceStepTest { fun `transformLayout throws IllegalLayoutTransformException`() = runTest { val body = fileSystem.readUtf8("illegal_layout_transform.json") server.enqueue { - setResponseCode(400) - setBody(body) + code(400) + body(body) } val request = TransformLayoutRequest( layout = Random.nextLayoutId(), @@ -566,7 +569,7 @@ internal class ConferenceStepTest { @Test fun `transformLayout throws NoSuchNodeException`() = runTest { - server.enqueue { setResponseCode(404) } + server.enqueue { code(404) } val request = TransformLayoutRequest( layout = Random.nextLayoutId(), guestLayout = Random.nextLayoutId(), @@ -581,8 +584,8 @@ internal class ConferenceStepTest { fun `transformLayout throws NoSuchConferenceException`() = runTest { val body = fileSystem.readUtf8("conference_not_found.json") server.enqueue { - setResponseCode(404) - setBody(body) + code(404) + body(body) } val request = TransformLayoutRequest( layout = Random.nextLayoutId(), @@ -598,8 +601,8 @@ internal class ConferenceStepTest { fun `transformLayout throws InvalidTokenException`() = runTest { val body = fileSystem.readUtf8("invalid_token.json") server.enqueue { - setResponseCode(403) - setBody(body) + code(403) + body(body) } val request = TransformLayoutRequest( layout = Random.nextLayoutId(), @@ -616,8 +619,8 @@ internal class ConferenceStepTest { val results = listOf(true, false) results.forEach { result -> server.enqueue { - setResponseCode(200) - setBody(json.encodeToString(Box(result))) + code(200) + body(json.encodeToString(Box(result))) } val request = TransformLayoutRequest( layout = Random.nextLayoutId(), @@ -631,14 +634,14 @@ internal class ConferenceStepTest { @Test fun `theme throws IllegalStateException`() { - server.enqueue { setResponseCode(500) } + server.enqueue { code(500) } assertFailure { step.theme(token).execute() }.isInstanceOf() server.verifyTheme(token) } @Test fun `theme throws NoSuchNodeException`() { - server.enqueue { setResponseCode(404) } + server.enqueue { code(404) } assertFailure { step.theme(token).execute() }.isInstanceOf() server.verifyTheme(token) } @@ -647,8 +650,8 @@ internal class ConferenceStepTest { fun `theme throws NoSuchConferenceException`() { val message = "Neither conference nor gateway found" server.enqueue { - setResponseCode(404) - setBody(json.encodeToString(Box(message))) + code(404) + body(json.encodeToString(Box(message))) } assertFailure { step.theme(token).execute() }.isInstanceOf() server.verifyTheme(token) @@ -658,8 +661,8 @@ internal class ConferenceStepTest { fun `theme throws InvalidTokenException`() { val message = "Invalid token" server.enqueue { - setResponseCode(403) - setBody(json.encodeToString(Box(message))) + code(403) + body(json.encodeToString(Box(message))) } assertFailure { step.theme(token).execute() }.isInstanceOf() server.verifyTheme(token) @@ -667,7 +670,7 @@ internal class ConferenceStepTest { @Test fun `theme returns empty map on 204`() { - server.enqueue { setResponseCode(204) } + server.enqueue { code(204) } assertThat(step.theme(token).execute(), "response").isEmpty() server.verifyTheme(token) } @@ -686,8 +689,8 @@ internal class ConferenceStepTest { ), ) server.enqueue { - setResponseCode(200) - setBody(json.encodeToString(Box(map))) + code(200) + body(json.encodeToString(Box(map))) } assertThat(step.theme(token).execute(), "response").isEqualTo(map) server.verifyTheme(token) @@ -708,14 +711,14 @@ internal class ConferenceStepTest { @Test fun `clearAllBuzz throws IllegalStateException`() = runTest { - server.enqueue { setResponseCode(500) } + server.enqueue { code(500) } assertFailure { step.clearAllBuzz(token).await() }.isInstanceOf() server.verifyClearAllBuzz(token) } @Test fun `clearAllBuzz throws NoSuchNodeException`() = runTest { - server.enqueue { setResponseCode(404) } + server.enqueue { code(404) } assertFailure { step.clearAllBuzz(token).await() }.isInstanceOf() server.verifyClearAllBuzz(token) } @@ -724,8 +727,8 @@ internal class ConferenceStepTest { fun `clearAllBuzz throws NoSuchConferenceException`() = runTest { val message = "Neither conference nor gateway found" server.enqueue { - setResponseCode(404) - setBody(json.encodeToString(Box(message))) + code(404) + body(json.encodeToString(Box(message))) } assertFailure { step.clearAllBuzz(token).await() }.isInstanceOf() server.verifyClearAllBuzz(token) @@ -735,8 +738,8 @@ internal class ConferenceStepTest { fun `clearAllBuzz throws InvalidTokenException`() = runTest { val message = "Invalid token" server.enqueue { - setResponseCode(403) - setBody(json.encodeToString(Box(message))) + code(403) + body(json.encodeToString(Box(message))) } assertFailure { step.clearAllBuzz(token).await() }.isInstanceOf() server.verifyClearAllBuzz(token) @@ -747,8 +750,8 @@ internal class ConferenceStepTest { val results = listOf(true, false) results.forEach { result -> server.enqueue { - setResponseCode(200) - setBody(json.encodeToString(Box(result))) + code(200) + body(json.encodeToString(Box(result))) } assertThat(step.clearAllBuzz(token).await(), "result").isEqualTo(result) server.verifyClearAllBuzz(token) @@ -757,14 +760,14 @@ internal class ConferenceStepTest { @Test fun `lock throws IllegalStateException`() = runTest { - server.enqueue { setResponseCode(500) } + server.enqueue { code(500) } assertFailure { step.lock(token).await() }.isInstanceOf() server.verifyLock(token) } @Test fun `lock throws NoSuchNodeException`() = runTest { - server.enqueue { setResponseCode(404) } + server.enqueue { code(404) } assertFailure { step.lock(token).await() }.isInstanceOf() server.verifyLock(token) } @@ -773,8 +776,8 @@ internal class ConferenceStepTest { fun `lock throws NoSuchConferenceException`() = runTest { val message = "Neither conference nor gateway found" server.enqueue { - setResponseCode(404) - setBody(json.encodeToString(Box(message))) + code(404) + body(json.encodeToString(Box(message))) } assertFailure { step.lock(token).await() }.isInstanceOf() server.verifyLock(token) @@ -784,8 +787,8 @@ internal class ConferenceStepTest { fun `lock throws InvalidTokenException`() = runTest { val message = "Invalid token" server.enqueue { - setResponseCode(403) - setBody(json.encodeToString(Box(message))) + code(403) + body(json.encodeToString(Box(message))) } assertFailure { step.lock(token).await() }.isInstanceOf() server.verifyLock(token) @@ -796,8 +799,8 @@ internal class ConferenceStepTest { val results = listOf(true, false) results.forEach { result -> server.enqueue { - setResponseCode(200) - setBody(json.encodeToString(Box(result))) + code(200) + body(json.encodeToString(Box(result))) } assertThat(step.lock(token).await(), "result").isEqualTo(result) server.verifyLock(token) @@ -806,14 +809,14 @@ internal class ConferenceStepTest { @Test fun `unlock throws IllegalStateException`() = runTest { - server.enqueue { setResponseCode(500) } + server.enqueue { code(500) } assertFailure { step.unlock(token).await() }.isInstanceOf() server.verifyUnlock(token) } @Test fun `unlock throws NoSuchNodeException`() = runTest { - server.enqueue { setResponseCode(404) } + server.enqueue { code(404) } assertFailure { step.unlock(token).await() }.isInstanceOf() server.verifyUnlock(token) } @@ -822,8 +825,8 @@ internal class ConferenceStepTest { fun `unlock throws NoSuchConferenceException`() = runTest { val message = "Neither conference nor gateway found" server.enqueue { - setResponseCode(404) - setBody(json.encodeToString(Box(message))) + code(404) + body(json.encodeToString(Box(message))) } assertFailure { step.unlock(token).await() }.isInstanceOf() server.verifyUnlock(token) @@ -833,8 +836,8 @@ internal class ConferenceStepTest { fun `unlock throws InvalidTokenException`() = runTest { val message = "Invalid token" server.enqueue { - setResponseCode(403) - setBody(json.encodeToString(Box(message))) + code(403) + body(json.encodeToString(Box(message))) } assertFailure { step.unlock(token).await() }.isInstanceOf() server.verifyUnlock(token) @@ -845,8 +848,8 @@ internal class ConferenceStepTest { val results = listOf(true, false) results.forEach { result -> server.enqueue { - setResponseCode(200) - setBody(json.encodeToString(Box(result))) + code(200) + body(json.encodeToString(Box(result))) } assertThat(step.unlock(token).await(), "result").isEqualTo(result) server.verifyUnlock(token) @@ -855,14 +858,14 @@ internal class ConferenceStepTest { @Test fun `muteGuests throws IllegalStateException`() = runTest { - server.enqueue { setResponseCode(500) } + server.enqueue { code(500) } assertFailure { step.muteGuests(token).await() }.isInstanceOf() server.verifyMuteGuests(token) } @Test fun `muteGuests throws NoSuchNodeException`() = runTest { - server.enqueue { setResponseCode(404) } + server.enqueue { code(404) } assertFailure { step.muteGuests(token).await() }.isInstanceOf() server.verifyMuteGuests(token) } @@ -871,8 +874,8 @@ internal class ConferenceStepTest { fun `muteGuests throws NoSuchConferenceException`() = runTest { val message = "Neither conference nor gateway found" server.enqueue { - setResponseCode(404) - setBody(json.encodeToString(Box(message))) + code(404) + body(json.encodeToString(Box(message))) } assertFailure { step.muteGuests(token).await() }.isInstanceOf() server.verifyMuteGuests(token) @@ -882,8 +885,8 @@ internal class ConferenceStepTest { fun `muteGuests throws InvalidTokenException`() = runTest { val message = "Invalid token" server.enqueue { - setResponseCode(403) - setBody(json.encodeToString(Box(message))) + code(403) + body(json.encodeToString(Box(message))) } assertFailure { step.muteGuests(token).await() }.isInstanceOf() server.verifyMuteGuests(token) @@ -894,8 +897,8 @@ internal class ConferenceStepTest { val results = listOf(true, false) results.forEach { result -> server.enqueue { - setResponseCode(200) - setBody(json.encodeToString(Box(result))) + code(200) + body(json.encodeToString(Box(result))) } assertThat(step.muteGuests(token).await(), "result").isEqualTo(result) server.verifyMuteGuests(token) @@ -904,14 +907,14 @@ internal class ConferenceStepTest { @Test fun `unmuteGuests throws IllegalStateException`() = runTest { - server.enqueue { setResponseCode(500) } + server.enqueue { code(500) } assertFailure { step.unmuteGuests(token).await() }.isInstanceOf() server.verifyUnmuteGuests(token) } @Test fun `unmuteGuests throws NoSuchNodeException`() = runTest { - server.enqueue { setResponseCode(404) } + server.enqueue { code(404) } assertFailure { step.unmuteGuests(token).await() }.isInstanceOf() server.verifyUnmuteGuests(token) } @@ -920,8 +923,8 @@ internal class ConferenceStepTest { fun `unmuteGuests throws NoSuchConferenceException`() = runTest { val message = "Neither conference nor gateway found" server.enqueue { - setResponseCode(404) - setBody(json.encodeToString(Box(message))) + code(404) + body(json.encodeToString(Box(message))) } assertFailure { step.unmuteGuests(token).await() }.isInstanceOf() server.verifyUnmuteGuests(token) @@ -931,8 +934,8 @@ internal class ConferenceStepTest { fun `unmuteGuests throws InvalidTokenException`() = runTest { val message = "Invalid token" server.enqueue { - setResponseCode(403) - setBody(json.encodeToString(Box(message))) + code(403) + body(json.encodeToString(Box(message))) } assertFailure { step.unmuteGuests(token).await() }.isInstanceOf() server.verifyUnmuteGuests(token) @@ -943,8 +946,8 @@ internal class ConferenceStepTest { val results = listOf(true, false) results.forEach { result -> server.enqueue { - setResponseCode(200) - setBody(json.encodeToString(Box(result))) + code(200) + body(json.encodeToString(Box(result))) } assertThat(step.unmuteGuests(token).await(), "result").isEqualTo(result) server.verifyUnmuteGuests(token) @@ -953,14 +956,14 @@ internal class ConferenceStepTest { @Test fun `disconnect throws IllegalStateException`() = runTest { - server.enqueue { setResponseCode(500) } + server.enqueue { code(500) } assertFailure { step.disconnect(token).await() }.isInstanceOf() server.verifyDisconnect(token) } @Test fun `disconnect throws NoSuchNodeException`() = runTest { - server.enqueue { setResponseCode(404) } + server.enqueue { code(404) } assertFailure { step.disconnect(token).await() }.isInstanceOf() server.verifyDisconnect(token) } @@ -969,8 +972,8 @@ internal class ConferenceStepTest { fun `disconnect throws NoSuchConferenceException`() = runTest { val message = "Neither conference nor gateway found" server.enqueue { - setResponseCode(404) - setBody(json.encodeToString(Box(message))) + code(404) + body(json.encodeToString(Box(message))) } assertFailure { step.disconnect(token).await() }.isInstanceOf() server.verifyDisconnect(token) @@ -980,8 +983,8 @@ internal class ConferenceStepTest { fun `disconnect throws InvalidTokenException`() = runTest { val message = "Invalid token" server.enqueue { - setResponseCode(403) - setBody(json.encodeToString(Box(message))) + code(403) + body(json.encodeToString(Box(message))) } assertFailure { step.disconnect(token).await() }.isInstanceOf() server.verifyDisconnect(token) @@ -992,8 +995,8 @@ internal class ConferenceStepTest { val results = listOf(true, false) results.forEach { result -> server.enqueue { - setResponseCode(200) - setBody(json.encodeToString(Box(result))) + code(200) + body(json.encodeToString(Box(result))) } assertThat(step.disconnect(token).await(), "result").isEqualTo(result) server.verifyDisconnect(token) @@ -1010,7 +1013,7 @@ internal class ConferenceStepTest { addPathSegment(conferenceAlias) addPathSegment("request_token") } - assertPin(pin) + assertThatHeader("pin").isEqualTo(pin?.let { if (it.isBlank()) "none" else it.trim() }) assertPost(json, request) } diff --git a/sdk-api/src/test/kotlin/com/pexip/sdk/api/infinity/ParticipantStepTest.kt b/sdk-api/src/test/kotlin/com/pexip/sdk/api/infinity/ParticipantStepTest.kt index 77d947325..2aa612481 100644 --- a/sdk-api/src/test/kotlin/com/pexip/sdk/api/infinity/ParticipantStepTest.kt +++ b/sdk-api/src/test/kotlin/com/pexip/sdk/api/infinity/ParticipantStepTest.kt @@ -28,8 +28,9 @@ import com.pexip.sdk.infinity.test.nextString import kotlinx.coroutines.test.runTest import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json +import mockwebserver3.MockWebServer +import mockwebserver3.junit4.MockWebServerRule import okhttp3.OkHttpClient -import okhttp3.mockwebserver.MockWebServer import org.junit.Rule import java.net.URL import kotlin.properties.Delegates @@ -42,7 +43,9 @@ import kotlin.test.assertFailsWith internal class ParticipantStepTest { @get:Rule - val server = MockWebServer() + val rule = MockWebServerRule() + + private val server = rule.server private lateinit var node: URL private lateinit var conferenceAlias: String @@ -67,7 +70,7 @@ internal class ParticipantStepTest { @Test fun `calls throws IllegalStateException`() { - server.enqueue { setResponseCode(500) } + server.enqueue { code(500) } val request = Random.nextCallsRequest() assertFailsWith { step.calls(request, token).execute() } server.verifyCalls(request, token) @@ -75,7 +78,7 @@ internal class ParticipantStepTest { @Test fun `calls throws NoSuchNodeException`() { - server.enqueue { setResponseCode(404) } + server.enqueue { code(404) } val request = Random.nextCallsRequest() assertFailsWith { step.calls(request, token).execute() } server.verifyCalls(request, token) @@ -85,8 +88,8 @@ internal class ParticipantStepTest { fun `calls throws NoSuchConferenceException`() { val message = "Neither conference nor gateway found" server.enqueue { - setResponseCode(404) - setBody(json.encodeToString(Box(message))) + code(404) + body(json.encodeToString(Box(message))) } val request = Random.nextCallsRequest() assertFailsWith { step.calls(request, token).execute() } @@ -97,8 +100,8 @@ internal class ParticipantStepTest { fun `calls throws InvalidTokenException`() { val message = "Invalid token" server.enqueue { - setResponseCode(403) - setBody(json.encodeToString(Box(message))) + code(403) + body(json.encodeToString(Box(message))) } val request = Random.nextCallsRequest() assertFailsWith { step.calls(request, token).execute() } @@ -112,8 +115,8 @@ internal class ParticipantStepTest { sdp = Random.nextString(), ) server.enqueue { - setResponseCode(200) - setBody(json.encodeToString(Box(response))) + code(200) + body(json.encodeToString(Box(response))) } val request = Random.nextCallsRequest() assertEquals(response, step.calls(request, token).execute()) @@ -122,7 +125,7 @@ internal class ParticipantStepTest { @Test fun `dtmf throws IllegalStateException`() { - server.enqueue { setResponseCode(500) } + server.enqueue { code(500) } val request = DtmfRequest(Random.nextDigits()) assertFailsWith { step.dtmf(request, token).execute() } server.verifyDtmf(request, token) @@ -130,7 +133,7 @@ internal class ParticipantStepTest { @Test fun `dtmf throws NoSuchNodeException`() { - server.enqueue { setResponseCode(404) } + server.enqueue { code(404) } val request = DtmfRequest(Random.nextDigits()) assertFailsWith { step.dtmf(request, token).execute() } server.verifyDtmf(request, token) @@ -140,8 +143,8 @@ internal class ParticipantStepTest { fun `dtmf throws NoSuchConferenceException`() { val message = "Neither conference nor gateway found" server.enqueue { - setResponseCode(404) - setBody(json.encodeToString(Box(message))) + code(404) + body(json.encodeToString(Box(message))) } val request = DtmfRequest(Random.nextDigits()) assertFailsWith { step.dtmf(request, token).execute() } @@ -152,8 +155,8 @@ internal class ParticipantStepTest { fun `dtmf throws InvalidTokenException`() { val message = "Invalid token" server.enqueue { - setResponseCode(403) - setBody(json.encodeToString(Box(message))) + code(403) + body(json.encodeToString(Box(message))) } val request = DtmfRequest(Random.nextDigits()) assertFailsWith { step.dtmf(request, token).execute() } @@ -164,8 +167,8 @@ internal class ParticipantStepTest { fun `dtmf returns`() { val response = Random.nextBoolean() server.enqueue { - setResponseCode(200) - setBody(json.encodeToString(Box(response))) + code(200) + body(json.encodeToString(Box(response))) } val request = DtmfRequest(Random.nextDigits()) assertEquals(response, step.dtmf(request, token).execute()) @@ -174,14 +177,14 @@ internal class ParticipantStepTest { @Test fun `mute throws IllegalStateException`() { - server.enqueue { setResponseCode(500) } + server.enqueue { code(500) } assertFailsWith { step.mute(token).execute() } server.verifyMute(token) } @Test fun `mute throws NoSuchNodeException`() { - server.enqueue { setResponseCode(404) } + server.enqueue { code(404) } assertFailsWith { step.mute(token).execute() } server.verifyMute(token) } @@ -190,8 +193,8 @@ internal class ParticipantStepTest { fun `mute throws NoSuchConferenceException`() { val message = "Neither conference nor gateway found" server.enqueue { - setResponseCode(404) - setBody(json.encodeToString(Box(message))) + code(404) + body(json.encodeToString(Box(message))) } assertFailsWith { step.mute(token).execute() } server.verifyMute(token) @@ -201,8 +204,8 @@ internal class ParticipantStepTest { fun `mute throws InvalidTokenException`() { val message = "Invalid token" server.enqueue { - setResponseCode(403) - setBody(json.encodeToString(Box(message))) + code(403) + body(json.encodeToString(Box(message))) } assertFailsWith { step.mute(token).execute() } server.verifyMute(token) @@ -210,21 +213,21 @@ internal class ParticipantStepTest { @Test fun `mute returns`() { - server.enqueue { setResponseCode(200) } + server.enqueue { code(200) } step.mute(token).execute() server.verifyMute(token) } @Test fun `unmute throws IllegalStateException`() { - server.enqueue { setResponseCode(500) } + server.enqueue { code(500) } assertFailsWith { step.unmute(token).execute() } server.verifyUnmute(token) } @Test fun `unmute throws NoSuchNodeException`() { - server.enqueue { setResponseCode(404) } + server.enqueue { code(404) } assertFailsWith { step.unmute(token).execute() } server.verifyUnmute(token) } @@ -233,8 +236,8 @@ internal class ParticipantStepTest { fun `unmute throws NoSuchConferenceException`() { val message = "Neither conference nor gateway found" server.enqueue { - setResponseCode(404) - setBody(json.encodeToString(Box(message))) + code(404) + body(json.encodeToString(Box(message))) } assertFailsWith { step.unmute(token).execute() } server.verifyUnmute(token) @@ -244,8 +247,8 @@ internal class ParticipantStepTest { fun `unmute throws InvalidTokenException`() { val message = "Invalid token" server.enqueue { - setResponseCode(403) - setBody(json.encodeToString(Box(message))) + code(403) + body(json.encodeToString(Box(message))) } assertFailsWith { step.unmute(token).execute() } server.verifyUnmute(token) @@ -253,21 +256,21 @@ internal class ParticipantStepTest { @Test fun `unmute returns`() { - server.enqueue { setResponseCode(200) } + server.enqueue { code(200) } step.unmute(token).execute() server.verifyUnmute(token) } @Test fun `videoMuted throws IllegalStateException`() { - server.enqueue { setResponseCode(500) } + server.enqueue { code(500) } assertFailsWith { step.videoMuted(token).execute() } server.verifyVideoMuted(token) } @Test fun `videoMuted throws NoSuchNodeException`() { - server.enqueue { setResponseCode(404) } + server.enqueue { code(404) } assertFailsWith { step.videoMuted(token).execute() } server.verifyVideoMuted(token) } @@ -276,8 +279,8 @@ internal class ParticipantStepTest { fun `videoMuted throws NoSuchConferenceException`() { val message = "Neither conference nor gateway found" server.enqueue { - setResponseCode(404) - setBody(json.encodeToString(Box(message))) + code(404) + body(json.encodeToString(Box(message))) } assertFailsWith { step.videoMuted(token).execute() } server.verifyVideoMuted(token) @@ -287,8 +290,8 @@ internal class ParticipantStepTest { fun `videoMuted throws InvalidTokenException`() { val message = "Invalid token" server.enqueue { - setResponseCode(403) - setBody(json.encodeToString(Box(message))) + code(403) + body(json.encodeToString(Box(message))) } assertFailsWith { step.videoMuted(token).execute() } server.verifyVideoMuted(token) @@ -296,21 +299,21 @@ internal class ParticipantStepTest { @Test fun `videoMuted returns`() { - server.enqueue { setResponseCode(200) } + server.enqueue { code(200) } step.videoMuted(token).execute() server.verifyVideoMuted(token) } @Test fun `videoUnmuted throws IllegalStateException`() { - server.enqueue { setResponseCode(500) } + server.enqueue { code(500) } assertFailsWith { step.videoUnmuted(token).execute() } server.verifyVideoUnMuted(token) } @Test fun `videoUnmuted throws NoSuchNodeException`() { - server.enqueue { setResponseCode(404) } + server.enqueue { code(404) } assertFailsWith { step.videoUnmuted(token).execute() } server.verifyVideoUnMuted(token) } @@ -319,8 +322,8 @@ internal class ParticipantStepTest { fun `videoUnmuted throws NoSuchConferenceException`() { val message = "Neither conference nor gateway found" server.enqueue { - setResponseCode(404) - setBody(json.encodeToString(Box(message))) + code(404) + body(json.encodeToString(Box(message))) } assertFailsWith { step.videoUnmuted(token).execute() } server.verifyVideoUnMuted(token) @@ -330,8 +333,8 @@ internal class ParticipantStepTest { fun `videoUnmuted throws InvalidTokenException`() { val message = "Invalid token" server.enqueue { - setResponseCode(403) - setBody(json.encodeToString(Box(message))) + code(403) + body(json.encodeToString(Box(message))) } assertFailsWith { step.videoUnmuted(token).execute() } server.verifyVideoUnMuted(token) @@ -339,21 +342,21 @@ internal class ParticipantStepTest { @Test fun `videoUnmuted returns`() { - server.enqueue { setResponseCode(200) } + server.enqueue { code(200) } step.videoUnmuted(token).execute() server.verifyVideoUnMuted(token) } @Test fun `takeFloor throws IllegalStateException`() { - server.enqueue { setResponseCode(500) } + server.enqueue { code(500) } assertFailsWith { step.takeFloor(token).execute() } server.verifyTakeFloor(token) } @Test fun `takeFloor throws NoSuchNodeException`() { - server.enqueue { setResponseCode(404) } + server.enqueue { code(404) } assertFailsWith { step.takeFloor(token).execute() } server.verifyTakeFloor(token) } @@ -362,8 +365,8 @@ internal class ParticipantStepTest { fun `takeFloor throws NoSuchConferenceException`() { val message = "Neither conference nor gateway found" server.enqueue { - setResponseCode(404) - setBody(json.encodeToString(Box(message))) + code(404) + body(json.encodeToString(Box(message))) } assertFailsWith { step.takeFloor(token).execute() } server.verifyTakeFloor(token) @@ -373,8 +376,8 @@ internal class ParticipantStepTest { fun `takeFloor throws InvalidTokenException`() { val message = "Invalid token" server.enqueue { - setResponseCode(403) - setBody(json.encodeToString(Box(message))) + code(403) + body(json.encodeToString(Box(message))) } assertFailsWith { step.takeFloor(token).execute() } server.verifyTakeFloor(token) @@ -382,21 +385,21 @@ internal class ParticipantStepTest { @Test fun `takeFloor returns`() { - server.enqueue { setResponseCode(200) } + server.enqueue { code(200) } step.takeFloor(token).execute() server.verifyTakeFloor(token) } @Test fun `releaseFloor throws IllegalStateException`() { - server.enqueue { setResponseCode(500) } + server.enqueue { code(500) } assertFailsWith { step.releaseFloor(token).execute() } server.verifyReleaseFloor(token) } @Test fun `releaseFloor throws NoSuchNodeException`() { - server.enqueue { setResponseCode(404) } + server.enqueue { code(404) } assertFailsWith { step.releaseFloor(token).execute() } server.verifyReleaseFloor(token) } @@ -405,8 +408,8 @@ internal class ParticipantStepTest { fun `releaseFloor throws NoSuchConferenceException`() { val message = "Neither conference nor gateway found" server.enqueue { - setResponseCode(404) - setBody(json.encodeToString(Box(message))) + code(404) + body(json.encodeToString(Box(message))) } assertFailsWith { step.releaseFloor(token).execute() } server.verifyReleaseFloor(token) @@ -416,8 +419,8 @@ internal class ParticipantStepTest { fun `releaseFloor throws InvalidTokenException`() { val message = "Invalid token" server.enqueue { - setResponseCode(403) - setBody(json.encodeToString(Box(message))) + code(403) + body(json.encodeToString(Box(message))) } assertFailsWith { step.releaseFloor(token).execute() } server.verifyReleaseFloor(token) @@ -425,21 +428,21 @@ internal class ParticipantStepTest { @Test fun `releaseFloor returns`() { - server.enqueue { setResponseCode(200) } + server.enqueue { code(200) } step.releaseFloor(token).execute() server.verifyReleaseFloor(token) } @Test fun `buzz throws IllegalStateException`() = runTest { - server.enqueue { setResponseCode(500) } + server.enqueue { code(500) } assertFailure { step.buzz(token).await() }.isInstanceOf() server.verifyBuzz(token) } @Test fun `buzz throws NoSuchNodeException`() = runTest { - server.enqueue { setResponseCode(404) } + server.enqueue { code(404) } assertFailure { step.buzz(token).await() }.isInstanceOf() server.verifyBuzz(token) } @@ -448,8 +451,8 @@ internal class ParticipantStepTest { fun `buzz throws NoSuchConferenceException`() = runTest { val message = "Neither conference nor gateway found" server.enqueue { - setResponseCode(404) - setBody(json.encodeToString(Box(message))) + code(404) + body(json.encodeToString(Box(message))) } assertFailure { step.buzz(token).await() }.isInstanceOf() server.verifyBuzz(token) @@ -459,8 +462,8 @@ internal class ParticipantStepTest { fun `buzz throws InvalidTokenException`() = runTest { val message = "Invalid token" server.enqueue { - setResponseCode(403) - setBody(json.encodeToString(Box(message))) + code(403) + body(json.encodeToString(Box(message))) } assertFailure { step.buzz(token).await() }.isInstanceOf() server.verifyBuzz(token) @@ -471,8 +474,8 @@ internal class ParticipantStepTest { val results = listOf(true, false) results.forEach { result -> server.enqueue { - setResponseCode(200) - setBody(json.encodeToString(Box(result))) + code(200) + body(json.encodeToString(Box(result))) } assertThat(step.buzz(token).await(), "result").isEqualTo(result) server.verifyBuzz(token) @@ -481,14 +484,14 @@ internal class ParticipantStepTest { @Test fun `clearBuzz throws IllegalStateException`() = runTest { - server.enqueue { setResponseCode(500) } + server.enqueue { code(500) } assertFailure { step.clearBuzz(token).await() }.isInstanceOf() server.verifyClearBuzz(token) } @Test fun `clearBuzz throws NoSuchNodeException`() = runTest { - server.enqueue { setResponseCode(404) } + server.enqueue { code(404) } assertFailure { step.clearBuzz(token).await() }.isInstanceOf() server.verifyClearBuzz(token) } @@ -497,8 +500,8 @@ internal class ParticipantStepTest { fun `clearBuzz throws NoSuchConferenceException`() = runTest { val message = "Neither conference nor gateway found" server.enqueue { - setResponseCode(404) - setBody(json.encodeToString(Box(message))) + code(404) + body(json.encodeToString(Box(message))) } assertFailure { step.clearBuzz(token).await() }.isInstanceOf() server.verifyClearBuzz(token) @@ -508,8 +511,8 @@ internal class ParticipantStepTest { fun `clearBuzz throws InvalidTokenException`() = runTest { val message = "Invalid token" server.enqueue { - setResponseCode(403) - setBody(json.encodeToString(Box(message))) + code(403) + body(json.encodeToString(Box(message))) } assertFailure { step.clearBuzz(token).await() }.isInstanceOf() server.verifyClearBuzz(token) @@ -520,8 +523,8 @@ internal class ParticipantStepTest { val results = listOf(true, false) results.forEach { result -> server.enqueue { - setResponseCode(200) - setBody(json.encodeToString(Box(result))) + code(200) + body(json.encodeToString(Box(result))) } assertThat(step.clearBuzz(token).await(), "result").isEqualTo(result) server.verifyClearBuzz(token) @@ -530,7 +533,7 @@ internal class ParticipantStepTest { @Test fun `preferredAspectRatio throws IllegalStateException`() { - server.enqueue { setResponseCode(500) } + server.enqueue { code(500) } val request = Random.nextPreferredAspectRatioRequest() assertFailsWith { step.preferredAspectRatio(request, token).execute() @@ -540,7 +543,7 @@ internal class ParticipantStepTest { @Test fun `preferredAspectRatio throws NoSuchNodeException`() { - server.enqueue { setResponseCode(404) } + server.enqueue { code(404) } val request = Random.nextPreferredAspectRatioRequest() assertFailsWith { step.preferredAspectRatio(request, token).execute() } server.verifyPreferredAspectRatio(request, token) @@ -550,8 +553,8 @@ internal class ParticipantStepTest { fun `preferredAspectRatio throws NoSuchConferenceException`() { val message = "Neither conference nor gateway found" server.enqueue { - setResponseCode(404) - setBody(json.encodeToString(Box(message))) + code(404) + body(json.encodeToString(Box(message))) } val request = Random.nextPreferredAspectRatioRequest() assertFailsWith { @@ -564,8 +567,8 @@ internal class ParticipantStepTest { fun `preferredAspectRatio throws InvalidTokenException`() { val message = "Invalid token" server.enqueue { - setResponseCode(403) - setBody(json.encodeToString(Box(message))) + code(403) + body(json.encodeToString(Box(message))) } val request = Random.nextPreferredAspectRatioRequest() assertFailsWith { @@ -579,8 +582,8 @@ internal class ParticipantStepTest { val results = listOf(true, false) results.forEach { result -> server.enqueue { - setResponseCode(200) - setBody(json.encodeToString(Box(result))) + code(200) + body(json.encodeToString(Box(result))) } val request = Random.nextPreferredAspectRatioRequest() assertEquals(result, step.preferredAspectRatio(request, token).execute()) @@ -590,7 +593,7 @@ internal class ParticipantStepTest { @Test fun `message throws IllegalStateException`() { - server.enqueue { setResponseCode(500) } + server.enqueue { code(500) } val request = Random.nextMessageRequest() assertFailsWith { step.message(request, token).execute() } server.verifyMessage(request, token) @@ -598,7 +601,7 @@ internal class ParticipantStepTest { @Test fun `message throws NoSuchNodeException`() { - server.enqueue { setResponseCode(404) } + server.enqueue { code(404) } val request = Random.nextMessageRequest() assertFailsWith { step.message(request, token).execute() } server.verifyMessage(request, token) @@ -608,8 +611,8 @@ internal class ParticipantStepTest { fun `message throws NoSuchConferenceException`() { val message = "Neither conference nor gateway found" server.enqueue { - setResponseCode(404) - setBody(json.encodeToString(Box(message))) + code(404) + body(json.encodeToString(Box(message))) } val request = Random.nextMessageRequest() assertFailsWith { step.message(request, token).execute() } @@ -620,8 +623,8 @@ internal class ParticipantStepTest { fun `message throws InvalidTokenException`() { val message = "Invalid token" server.enqueue { - setResponseCode(403) - setBody(json.encodeToString(Box(message))) + code(403) + body(json.encodeToString(Box(message))) } val request = Random.nextMessageRequest() assertFailsWith { step.message(request, token).execute() } @@ -633,8 +636,8 @@ internal class ParticipantStepTest { val results = listOf(true, false) results.forEach { result -> server.enqueue { - setResponseCode(200) - setBody(json.encodeToString(Box(result))) + code(200) + body(json.encodeToString(Box(result))) } val request = Random.nextMessageRequest() assertEquals(result, step.message(request, token).execute()) @@ -644,14 +647,14 @@ internal class ParticipantStepTest { @Test fun `unlock throws IllegalStateException`() = runTest { - server.enqueue { setResponseCode(500) } + server.enqueue { code(500) } assertFailure { step.unlock(token).await() }.isInstanceOf() server.verifyUnlock(token) } @Test fun `unlock throws NoSuchNodeException`() = runTest { - server.enqueue { setResponseCode(404) } + server.enqueue { code(404) } assertFailure { step.unlock(token).await() }.isInstanceOf() server.verifyUnlock(token) } @@ -660,8 +663,8 @@ internal class ParticipantStepTest { fun `unlock throws NoSuchConferenceException`() = runTest { val message = "Neither conference nor gateway found" server.enqueue { - setResponseCode(404) - setBody(json.encodeToString(Box(message))) + code(404) + body(json.encodeToString(Box(message))) } assertFailure { step.unlock(token).await() }.isInstanceOf() server.verifyUnlock(token) @@ -671,8 +674,8 @@ internal class ParticipantStepTest { fun `unlock throws InvalidTokenException`() = runTest { val message = "Invalid token" server.enqueue { - setResponseCode(403) - setBody(json.encodeToString(Box(message))) + code(403) + body(json.encodeToString(Box(message))) } assertFailure { step.unlock(token).await() }.isInstanceOf() server.verifyUnlock(token) @@ -683,8 +686,8 @@ internal class ParticipantStepTest { val results = listOf(true, false) results.forEach { result -> server.enqueue { - setResponseCode(200) - setBody(json.encodeToString(Box(result))) + code(200) + body(json.encodeToString(Box(result))) } assertThat(step.unlock(token).await(), "result").isEqualTo(result) server.verifyUnlock(token) @@ -693,14 +696,14 @@ internal class ParticipantStepTest { @Test fun `spotlightOn throws IllegalStateException`() = runTest { - server.enqueue { setResponseCode(500) } + server.enqueue { code(500) } assertFailure { step.spotlightOn(token).await() }.isInstanceOf() server.verifySpotlightOn(token) } @Test fun `spotlightOn throws NoSuchNodeException`() = runTest { - server.enqueue { setResponseCode(404) } + server.enqueue { code(404) } assertFailure { step.spotlightOn(token).await() }.isInstanceOf() server.verifySpotlightOn(token) } @@ -709,8 +712,8 @@ internal class ParticipantStepTest { fun `spotlightOn throws NoSuchConferenceException`() = runTest { val message = "Neither conference nor gateway found" server.enqueue { - setResponseCode(404) - setBody(json.encodeToString(Box(message))) + code(404) + body(json.encodeToString(Box(message))) } assertFailure { step.spotlightOn(token).await() }.isInstanceOf() server.verifySpotlightOn(token) @@ -720,8 +723,8 @@ internal class ParticipantStepTest { fun `spotlightOn throws InvalidTokenException`() = runTest { val message = "Invalid token" server.enqueue { - setResponseCode(403) - setBody(json.encodeToString(Box(message))) + code(403) + body(json.encodeToString(Box(message))) } assertFailure { step.spotlightOn(token).await() }.isInstanceOf() server.verifySpotlightOn(token) @@ -732,8 +735,8 @@ internal class ParticipantStepTest { val results = listOf(true, false) results.forEach { result -> server.enqueue { - setResponseCode(200) - setBody(json.encodeToString(Box(result))) + code(200) + body(json.encodeToString(Box(result))) } assertThat(step.spotlightOn(token).await(), "result").isEqualTo(result) server.verifySpotlightOn(token) @@ -742,14 +745,14 @@ internal class ParticipantStepTest { @Test fun `spotlightOff throws IllegalStateException`() = runTest { - server.enqueue { setResponseCode(500) } + server.enqueue { code(500) } assertFailure { step.spotlightOff(token).await() }.isInstanceOf() server.verifySpotlightOff(token) } @Test fun `spotlightOff throws NoSuchNodeException`() = runTest { - server.enqueue { setResponseCode(404) } + server.enqueue { code(404) } assertFailure { step.spotlightOff(token).await() }.isInstanceOf() server.verifySpotlightOff(token) } @@ -758,8 +761,8 @@ internal class ParticipantStepTest { fun `spotlightOff throws NoSuchConferenceException`() = runTest { val message = "Neither conference nor gateway found" server.enqueue { - setResponseCode(404) - setBody(json.encodeToString(Box(message))) + code(404) + body(json.encodeToString(Box(message))) } assertFailure { step.spotlightOff(token).await() }.isInstanceOf() server.verifySpotlightOff(token) @@ -769,8 +772,8 @@ internal class ParticipantStepTest { fun `spotlightOff throws InvalidTokenException`() = runTest { val message = "Invalid token" server.enqueue { - setResponseCode(403) - setBody(json.encodeToString(Box(message))) + code(403) + body(json.encodeToString(Box(message))) } assertFailure { step.spotlightOff(token).await() }.isInstanceOf() server.verifySpotlightOff(token) @@ -781,8 +784,8 @@ internal class ParticipantStepTest { val results = listOf(true, false) results.forEach { result -> server.enqueue { - setResponseCode(200) - setBody(json.encodeToString(Box(result))) + code(200) + body(json.encodeToString(Box(result))) } assertThat(step.spotlightOff(token).await(), "result").isEqualTo(result) server.verifySpotlightOff(token) @@ -791,14 +794,14 @@ internal class ParticipantStepTest { @Test fun `disconnect throws IllegalStateException`() = runTest { - server.enqueue { setResponseCode(500) } + server.enqueue { code(500) } assertFailure { step.disconnect(token).await() }.isInstanceOf() server.verifyDisconnect(token) } @Test fun `disconnect throws NoSuchNodeException`() = runTest { - server.enqueue { setResponseCode(404) } + server.enqueue { code(404) } assertFailure { step.disconnect(token).await() }.isInstanceOf() server.verifyDisconnect(token) } @@ -807,8 +810,8 @@ internal class ParticipantStepTest { fun `disconnect throws NoSuchConferenceException`() = runTest { val message = "Neither conference nor gateway found" server.enqueue { - setResponseCode(404) - setBody(json.encodeToString(Box(message))) + code(404) + body(json.encodeToString(Box(message))) } assertFailure { step.disconnect(token).await() }.isInstanceOf() server.verifyDisconnect(token) @@ -818,8 +821,8 @@ internal class ParticipantStepTest { fun `disconnect throws InvalidTokenException`() = runTest { val message = "Invalid token" server.enqueue { - setResponseCode(403) - setBody(json.encodeToString(Box(message))) + code(403) + body(json.encodeToString(Box(message))) } assertFailure { step.disconnect(token).await() }.isInstanceOf() server.verifyDisconnect(token) @@ -830,8 +833,8 @@ internal class ParticipantStepTest { val results = listOf(true, false) results.forEach { result -> server.enqueue { - setResponseCode(200) - setBody(json.encodeToString(Box(result))) + code(200) + body(json.encodeToString(Box(result))) } assertThat(step.disconnect(token).await(), "result").isEqualTo(result) server.verifyDisconnect(token) diff --git a/sdk-api/src/test/kotlin/com/pexip/sdk/api/infinity/RegistrationStepTest.kt b/sdk-api/src/test/kotlin/com/pexip/sdk/api/infinity/RegistrationStepTest.kt index ab464e7e0..f416ea59d 100644 --- a/sdk-api/src/test/kotlin/com/pexip/sdk/api/infinity/RegistrationStepTest.kt +++ b/sdk-api/src/test/kotlin/com/pexip/sdk/api/infinity/RegistrationStepTest.kt @@ -15,12 +15,15 @@ */ package com.pexip.sdk.api.infinity +import assertk.assertions.isEqualTo import com.pexip.sdk.infinity.test.nextRegistrationId import com.pexip.sdk.infinity.test.nextString import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json +import mockwebserver3.MockWebServer +import mockwebserver3.junit4.MockWebServerRule import okhttp3.OkHttpClient -import okhttp3.mockwebserver.MockWebServer +import okio.ByteString.Companion.encodeUtf8 import org.junit.Rule import java.net.URL import kotlin.random.Random @@ -34,7 +37,9 @@ import kotlin.time.Duration.Companion.seconds internal class RegistrationStepTest { @get:Rule - val server = MockWebServer() + val rule = MockWebServerRule() + + private val server = rule.server private lateinit var node: URL private lateinit var deviceAlias: String @@ -58,14 +63,14 @@ internal class RegistrationStepTest { @Test fun `requestToken throws IllegalStateException`() { - server.enqueue { setResponseCode(500) } + server.enqueue { code(500) } assertFailsWith { step.requestToken(username, password).execute() } server.verifyRequestToken() } @Test fun `requestToken throws NoSuchNodeException`() { - server.enqueue { setResponseCode(404) } + server.enqueue { code(404) } assertFailsWith { step.requestToken(username, password).execute() } server.verifyRequestToken() } @@ -74,8 +79,8 @@ internal class RegistrationStepTest { fun `requestToken throws NoSuchRegistrationException`() { val message = "Unauthorized" server.enqueue { - setResponseCode(401) - setBody(message) + code(401) + body(message) } val e = assertFailsWith { step.requestToken(username, password).execute() @@ -98,8 +103,8 @@ internal class RegistrationStepTest { ), ) server.enqueue { - setResponseCode(200) - setBody(json.encodeToString(Box(response))) + code(200) + body(json.encodeToString(Box(response))) } assertEquals(response, step.requestToken(username, password).execute()) server.verifyRequestToken() @@ -107,14 +112,14 @@ internal class RegistrationStepTest { @Test fun `refreshToken throws IllegalStateException`() { - server.enqueue { setResponseCode(500) } + server.enqueue { code(500) } assertFailsWith { step.refreshToken(token).execute() } server.verifyRefreshToken(token) } @Test fun `refreshToken throws NoSuchNodeException`() { - server.enqueue { setResponseCode(404) } + server.enqueue { code(404) } assertFailsWith { step.refreshToken(token).execute() } server.verifyRefreshToken(token) } @@ -123,8 +128,8 @@ internal class RegistrationStepTest { fun `refreshToken throws NoSuchRegistrationException`() { val message = "Unauthorized" server.enqueue { - setResponseCode(401) - setBody(message) + code(401) + body(message) } val e = assertFailsWith { step.refreshToken(token).execute() } assertEquals(message, e.message) @@ -135,8 +140,8 @@ internal class RegistrationStepTest { fun `refreshToken throws InvalidTokenException`() { val message = "Invalid token" server.enqueue { - setResponseCode(403) - setBody(json.encodeToString(Box(message))) + code(403) + body(json.encodeToString(Box(message))) } val e = assertFailsWith { step.refreshToken(token).execute() } assertEquals(message, e.message) @@ -149,21 +154,21 @@ internal class RegistrationStepTest { token = Random.nextString(), expires = Random.nextInt(10..120).seconds, ) - server.enqueue { setBody(json.encodeToString(Box(response))) } + server.enqueue { body(json.encodeToString(Box(response))) } assertEquals(response, step.refreshToken(token).execute()) server.verifyRefreshToken(token) } @Test fun `releaseToken throws IllegalStateException`() { - server.enqueue { setResponseCode(500) } + server.enqueue { code(500) } assertFailsWith { step.releaseToken(token).execute() } server.verifyReleaseToken(token) } @Test fun `releaseToken throws NoSuchNodeException`() { - server.enqueue { setResponseCode(404) } + server.enqueue { code(404) } assertFailsWith { step.releaseToken(token).execute() } server.verifyReleaseToken(token) } @@ -172,8 +177,8 @@ internal class RegistrationStepTest { fun `releaseToken throws NoSuchRegistrationException`() { val message = "Unauthorized" server.enqueue { - setResponseCode(401) - setBody(message) + code(401) + body(message) } val e = assertFailsWith { step.releaseToken(token).execute() } assertEquals(message, e.message) @@ -184,8 +189,8 @@ internal class RegistrationStepTest { fun `releaseToken throws InvalidTokenException`() { val message = "Invalid token" server.enqueue { - setResponseCode(403) - setBody(json.encodeToString(Box(message))) + code(403) + body(json.encodeToString(Box(message))) } assertFailsWith { step.releaseToken(token).execute() } server.verifyReleaseToken(token) @@ -195,8 +200,8 @@ internal class RegistrationStepTest { fun `releaseToken returns on 200`() { val result = Random.nextBoolean() server.enqueue { - setResponseCode(200) - setBody(json.encodeToString(Box(result))) + code(200) + body(json.encodeToString(Box(result))) } assertEquals(result, step.releaseToken(token).execute()) server.verifyReleaseToken(token) @@ -204,14 +209,14 @@ internal class RegistrationStepTest { @Test fun `registrations throws IllegalStateException`() { - server.enqueue { setResponseCode(500) } + server.enqueue { code(500) } assertFailsWith { step.registrations(token).execute() } server.verifyRegistrations(token) } @Test fun `registrations throws NoSuchNodeException`() { - server.enqueue { setResponseCode(404) } + server.enqueue { code(404) } assertFailsWith { step.registrations(token).execute() } server.verifyRegistrations(token) } @@ -220,8 +225,8 @@ internal class RegistrationStepTest { fun `registrations throws NoSuchRegistrationException`() { val message = "Unauthorized" server.enqueue { - setResponseCode(401) - setBody(message) + code(401) + body(message) } val e = assertFailsWith { step.registrations(token).execute() } assertEquals(message, e.message) @@ -232,8 +237,8 @@ internal class RegistrationStepTest { fun `registrations throws InvalidTokenException`() { val message = "Invalid token" server.enqueue { - setResponseCode(403) - setBody(json.encodeToString(Box(message))) + code(403) + body(json.encodeToString(Box(message))) } assertFailsWith { step.registrations(token).execute() } server.verifyRegistrations(token) @@ -252,8 +257,8 @@ internal class RegistrationStepTest { ) } server.enqueue { - setResponseCode(200) - setBody(json.encodeToString(Box(result))) + code(200) + body(json.encodeToString(Box(result))) } assertEquals(result, step.registrations(token, query).execute()) server.verifyRegistrations(token, query) @@ -267,7 +272,8 @@ internal class RegistrationStepTest { addPathSegment(deviceAlias) addPathSegment("request_token") } - assertAuthorization(username, password) + val base64 = "$username:$password".encodeUtf8().base64Url() + assertThatHeader("Authorization").isEqualTo("x-pexip-basic $base64") assertPostEmptyBody() } diff --git a/sdk-api/src/test/kotlin/com/pexip/sdk/api/infinity/RequestBuilderTest.kt b/sdk-api/src/test/kotlin/com/pexip/sdk/api/infinity/RequestBuilderTest.kt index 904ff183e..b56dd9c10 100644 --- a/sdk-api/src/test/kotlin/com/pexip/sdk/api/infinity/RequestBuilderTest.kt +++ b/sdk-api/src/test/kotlin/com/pexip/sdk/api/infinity/RequestBuilderTest.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022-2023 Pexip AS + * Copyright 2022-2024 Pexip AS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,7 +15,8 @@ */ package com.pexip.sdk.api.infinity -import okhttp3.mockwebserver.MockWebServer +import mockwebserver3.MockWebServer +import mockwebserver3.junit4.MockWebServerRule import org.junit.Rule import java.net.URL import kotlin.properties.Delegates @@ -28,7 +29,9 @@ import kotlin.test.assertTrue internal class RequestBuilderTest { @get:Rule - val server = MockWebServer() + val rule = MockWebServerRule() + + private val server = rule.server private lateinit var builder: InfinityService.RequestBuilder @@ -43,28 +46,28 @@ internal class RequestBuilderTest { @Test fun `status throws IllegalStateException`() { - server.enqueue { setResponseCode(500) } + server.enqueue { code(500) } assertFailsWith { builder.status().execute() } server.verifyStatus() } @Test fun `status throws NoSuchNodeException`() { - server.enqueue { setResponseCode(404) } + server.enqueue { code(404) } assertFailsWith { builder.status().execute() } server.verifyStatus() } @Test fun `status returns false`() { - server.enqueue { setResponseCode(503) } + server.enqueue { code(503) } assertFalse(builder.status().execute()) server.verifyStatus() } @Test fun `status returns true`() { - server.enqueue { setResponseCode(200) } + server.enqueue { code(200) } assertTrue(builder.status().execute()) server.verifyStatus() } diff --git a/sdk-api/src/test/kotlin/com/pexip/sdk/api/infinity/Util.kt b/sdk-api/src/test/kotlin/com/pexip/sdk/api/infinity/Util.kt index 1a3ae4b1e..8245bbdf3 100644 --- a/sdk-api/src/test/kotlin/com/pexip/sdk/api/infinity/Util.kt +++ b/sdk-api/src/test/kotlin/com/pexip/sdk/api/infinity/Util.kt @@ -15,23 +15,26 @@ */ package com.pexip.sdk.api.infinity +import assertk.assertThat +import assertk.assertions.isEqualTo +import assertk.assertions.isNull +import assertk.assertions.isZero +import assertk.assertions.prop import com.pexip.sdk.infinity.test.nextString import kotlinx.serialization.DeserializationStrategy import kotlinx.serialization.json.Json +import mockwebserver3.MockResponse +import mockwebserver3.MockWebServer +import mockwebserver3.RecordedRequest import okhttp3.HttpUrl import okhttp3.HttpUrl.Companion.toHttpUrl -import okhttp3.mockwebserver.MockResponse -import okhttp3.mockwebserver.MockWebServer -import okhttp3.mockwebserver.RecordedRequest import okio.BufferedSource -import okio.ByteString.Companion.encodeUtf8 import okio.FileSystem import okio.Path import okio.Path.Companion.toPath import java.net.URL import kotlin.random.Random import kotlin.random.nextInt -import kotlin.test.assertEquals import kotlin.time.DurationUnit import kotlin.time.toDuration @@ -56,24 +59,24 @@ internal fun Random.nextMessageRequest() = MessageRequest( type = nextString(), ) -internal inline fun MockWebServer.enqueue(block: MockResponse.() -> Unit) = - enqueue(MockResponse().apply(block)) +internal inline fun MockWebServer.enqueue(block: MockResponse.Builder.() -> Unit) = + enqueue(MockResponse.Builder().apply(block).build()) internal inline fun MockWebServer.takeRequest(block: RecordedRequest.() -> Unit) = with(takeRequest(), block) -internal fun RecordedRequest.assertGet() = assertEquals("GET", method) +internal fun RecordedRequest.assertGet() = assertThatMethod().isEqualTo("GET") internal fun RecordedRequest.assertPostEmptyBody() { - assertEquals("POST", method) - assertContentType(null) - assertEquals(0, bodySize) + assertThatMethod().isEqualTo("POST") + assertThatHeader("Content-Type").isNull() + assertThat(::bodySize).isZero() } internal inline fun RecordedRequest.assertPost(json: Json, request: T) { - assertEquals("POST", method) - assertContentType("application/json; charset=utf-8") - assertEquals(request, json.decodeFromString(body.readUtf8())) + assertThatMethod().isEqualTo("POST") + assertThatHeader("Content-Type").isEqualTo("application/json; charset=utf-8") + assertThat(json.decodeFromString(body.readUtf8()), "body").isEqualTo(request) } internal fun RecordedRequest.assertPost( @@ -81,29 +84,21 @@ internal fun RecordedRequest.assertPost( serializer: DeserializationStrategy, request: T, ) { - assertEquals("POST", method) - assertContentType("application/json; charset=utf-8") - assertEquals(request, json.decodeFromString(serializer, body.readUtf8())) + assertThatMethod().isEqualTo("POST") + assertThatHeader("Content-Type").isEqualTo("application/json; charset=utf-8") + assertThat(json.decodeFromString(serializer, body.readUtf8()), "body").isEqualTo(request) } internal fun RecordedRequest.assertRequestUrl(url: URL, block: HttpUrl.Builder.() -> Unit) = - assertEquals(url.toString().toHttpUrl().newBuilder().apply(block).build(), requestUrl) + assertThat(::requestUrl).isEqualTo(url.toString().toHttpUrl().newBuilder().apply(block).build()) internal fun RecordedRequest.assertRequestUrl(url: HttpUrl, block: HttpUrl.Builder.() -> Unit) = - assertEquals(url.newBuilder().apply(block).build(), requestUrl) + assertThat(::requestUrl).isEqualTo(url.newBuilder().apply(block).build()) internal fun RecordedRequest.assertToken(token: Token?) = - assertEquals(token?.token, getHeader("token")) + assertThatHeader("token").isEqualTo(token?.token) -internal fun RecordedRequest.assertAuthorization(username: String, password: String) { - val base64 = "$username:$password".encodeUtf8().base64Url() - assertEquals("x-pexip-basic $base64", getHeader("Authorization")) -} - -internal fun RecordedRequest.assertPin(pin: String?) = assertEquals( - expected = pin?.let { if (it.isBlank()) "none" else it.trim() }, - actual = getHeader("pin"), -) +internal fun RecordedRequest.assertThatMethod() = assertThat(::method) -private fun RecordedRequest.assertContentType(contentType: String?) = - assertEquals(contentType, getHeader("Content-Type")) +internal fun RecordedRequest.assertThatHeader(name: String) = + assertThat(::headers).prop(name) { it[name] }