Issue#8 Take use of TestFixtures to keep MockWebServer TLS setup in the network module, while still being able to use it in Android Tests
This commit is contained in:
parent
555ad6d05f
commit
3f4d22528c
18 changed files with 117 additions and 77 deletions
|
|
@ -2,6 +2,7 @@ plugins {
|
|||
id 'java-library'
|
||||
id 'kotlin'
|
||||
id 'kotlin-kapt'
|
||||
id 'java-test-fixtures'
|
||||
}
|
||||
|
||||
java {
|
||||
|
|
@ -25,9 +26,10 @@ dependencies {
|
|||
|
||||
testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:$coroutines_version"
|
||||
testImplementation "org.mockito.kotlin:mockito-kotlin:$testing_kotlin_mockito_version"
|
||||
testImplementation "org.junit.jupiter:junit-jupiter-engine:$testing_junit5_version"
|
||||
testImplementation project(':mockserver')
|
||||
testImplementation "io.insert-koin:koin-test-junit5:$koin_version"
|
||||
testImplementation "org.skyscreamer:jsonassert:$testing_json_assert_version"
|
||||
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$testing_junit5_version"
|
||||
|
||||
testFixturesApi project(':mockserver')
|
||||
testFixturesApi "org.junit.jupiter:junit-jupiter-engine:$testing_junit5_version"
|
||||
testFixturesApi "io.insert-koin:koin-test-junit5:$koin_version"
|
||||
}
|
||||
|
|
@ -88,5 +88,5 @@ private fun sessionNetworkingModule(
|
|||
single(qualifier = session) { get<Retrofit>(sessionless).newBuilder().client(get(session)).build() }
|
||||
}
|
||||
|
||||
private val session = StringQualifier("SESSION-NETWORKING")
|
||||
private val sessionless = StringQualifier("SESSIONLESS-NETWORKING")
|
||||
internal val session = StringQualifier("SESSION-NETWORKING")
|
||||
internal val sessionless = StringQualifier("SESSIONLESS-NETWORKING")
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import org.fnives.test.showcase.network.di.createNetworkModules
|
|||
import org.fnives.test.showcase.network.mockserver.ContentData
|
||||
import org.fnives.test.showcase.network.mockserver.scenario.refresh.RefreshTokenScenario
|
||||
import org.fnives.test.showcase.network.session.NetworkSessionLocalStorage
|
||||
import org.fnives.test.showcase.network.shared.MockServerScenarioSetupExtensions
|
||||
import org.fnives.test.showcase.network.testutil.MockServerScenarioSetupExtensions
|
||||
import org.fnives.test.showcase.network.shared.exceptions.NetworkException
|
||||
import org.fnives.test.showcase.network.shared.exceptions.ParsingException
|
||||
import org.junit.jupiter.api.AfterEach
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ import org.fnives.test.showcase.network.mockserver.ContentData
|
|||
import org.fnives.test.showcase.network.mockserver.ContentData.createExpectedLoginRequestJson
|
||||
import org.fnives.test.showcase.network.mockserver.scenario.auth.AuthScenario
|
||||
import org.fnives.test.showcase.network.session.NetworkSessionLocalStorage
|
||||
import org.fnives.test.showcase.network.shared.MockServerScenarioSetupExtensions
|
||||
import org.fnives.test.showcase.network.testutil.MockServerScenarioSetupExtensions
|
||||
import org.fnives.test.showcase.network.shared.exceptions.NetworkException
|
||||
import org.fnives.test.showcase.network.shared.exceptions.ParsingException
|
||||
import org.junit.jupiter.api.AfterEach
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import org.fnives.test.showcase.network.di.createNetworkModules
|
|||
import org.fnives.test.showcase.network.mockserver.ContentData
|
||||
import org.fnives.test.showcase.network.mockserver.scenario.content.ContentScenario
|
||||
import org.fnives.test.showcase.network.session.NetworkSessionLocalStorage
|
||||
import org.fnives.test.showcase.network.shared.MockServerScenarioSetupExtensions
|
||||
import org.fnives.test.showcase.network.testutil.MockServerScenarioSetupExtensions
|
||||
import org.fnives.test.showcase.network.shared.exceptions.NetworkException
|
||||
import org.fnives.test.showcase.network.shared.exceptions.ParsingException
|
||||
import org.junit.jupiter.api.AfterEach
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import org.fnives.test.showcase.network.mockserver.scenario.content.ContentScena
|
|||
import org.fnives.test.showcase.network.mockserver.scenario.refresh.RefreshTokenScenario
|
||||
import org.fnives.test.showcase.network.session.NetworkSessionExpirationListener
|
||||
import org.fnives.test.showcase.network.session.NetworkSessionLocalStorage
|
||||
import org.fnives.test.showcase.network.shared.MockServerScenarioSetupExtensions
|
||||
import org.fnives.test.showcase.network.testutil.MockServerScenarioSetupExtensions
|
||||
import org.fnives.test.showcase.network.shared.exceptions.NetworkException
|
||||
import org.junit.jupiter.api.AfterEach
|
||||
import org.junit.jupiter.api.Assertions
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
package org.fnives.test.showcase.network.shared
|
||||
package org.fnives.test.showcase.network.testutil
|
||||
|
||||
import org.fnives.test.showcase.network.mockserver.MockServerScenarioSetup
|
||||
import org.junit.jupiter.api.extension.AfterEachCallback
|
||||
|
|
@ -0,0 +1,68 @@
|
|||
package org.fnives.test.showcase.network.testutil
|
||||
|
||||
import okhttp3.OkHttpClient
|
||||
import org.fnives.test.showcase.model.network.BaseUrl
|
||||
import org.fnives.test.showcase.network.mockserver.MockServerScenarioSetup
|
||||
import org.koin.core.context.loadKoinModules
|
||||
import org.koin.core.qualifier.StringQualifier
|
||||
import org.koin.dsl.module
|
||||
import org.koin.test.KoinTest
|
||||
import org.koin.test.get
|
||||
|
||||
/**
|
||||
* Gives access to internals of Networking so it can be used in MockWebServer more easily.
|
||||
*/
|
||||
object NetworkTestConfigurationHelper : KoinTest {
|
||||
|
||||
/**
|
||||
* For some reason importing these didn't work. Still keeping internal, cause it shouldn't leave the module.
|
||||
*
|
||||
* import org.fnives.test.showcase.network.di.session
|
||||
* import org.fnives.test.showcase.network.di.sessionless
|
||||
*/
|
||||
internal val session = StringQualifier("SESSION-NETWORKING")
|
||||
internal val sessionless = StringQualifier("SESSIONLESS-NETWORKING")
|
||||
|
||||
/**
|
||||
* After koin started, this gives you access for the OkHttpClients, so you can synchronize or keep track of them
|
||||
*/
|
||||
fun getOkHttpClients(): List<OkHttpClient> = listOf(
|
||||
get<OkHttpClient>(sessionless),
|
||||
get<OkHttpClient>(session)
|
||||
)
|
||||
|
||||
/**
|
||||
* After koin started, this sets up MockServer to be used with HTTPs.
|
||||
*
|
||||
* Url, and injected OkHttpClient is modified for this.
|
||||
*/
|
||||
fun startWithHTTPSMockWebServer(): MockServerScenarioSetup{
|
||||
val mockServerScenarioSetup = MockServerScenarioSetup()
|
||||
val url = mockServerScenarioSetup.start(true)
|
||||
|
||||
val handshakeCertificates = mockServerScenarioSetup.clientCertificates
|
||||
?: throw IllegalStateException("ClientCertificate should be accessable")
|
||||
|
||||
reload(baseUrl = BaseUrl(url)) {
|
||||
it.newBuilder()
|
||||
.sslSocketFactory(handshakeCertificates.sslSocketFactory(), handshakeCertificates.trustManager)
|
||||
.build()
|
||||
}
|
||||
|
||||
return mockServerScenarioSetup
|
||||
}
|
||||
|
||||
private fun reload(baseUrl: BaseUrl, adjustments: (OkHttpClient) -> OkHttpClient) {
|
||||
val current = get<OkHttpClient>(sessionless)
|
||||
|
||||
val adjusted = adjustments(current)
|
||||
loadKoinModules(
|
||||
module {
|
||||
// add https certificate to okhttp
|
||||
single(qualifier = sessionless) { adjusted }
|
||||
// replace base url with mockWebServer's
|
||||
single { baseUrl }
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue