Skip to content

Commit

Permalink
Convert from android library to kotlin library.
Browse files Browse the repository at this point in the history
  • Loading branch information
nowakweronika committed Mar 13, 2024
1 parent 74b7c06 commit af32a78
Show file tree
Hide file tree
Showing 15 changed files with 73 additions and 60 deletions.
2 changes: 1 addition & 1 deletion app-shared-tests/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ android {

dependencies {
implementation(project(":app"))
implementation(project(':mock-web-server-rule'))
implementation(project(':mock-web-server'))

// Koin
api(libs.bundles.koin)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ import com.appunite.loudius.ui.pullrequests.PullRequestsScreen
import com.appunite.loudius.util.IntegrationTestRule
import com.appunite.loudius.util.Register
import com.appunite.loudius.util.waitUntilLoadingDoesNotExist
import com.appunite.mockwebserverrule.MockWebServerRule
import org.junit.Rule
import org.junit.Test
import org.koin.compose.KoinContext
Expand All @@ -38,7 +37,8 @@ abstract class AbsPullRequestsScreenTest {
val integrationTestRule = IntegrationTestRule()

@get:Rule(order = 1)
var mockWebServer: MockWebServerRule = MockWebServerRule()
var mockWebServer: com.appunite.mock_web_server.MockWebServerRule =
com.appunite.mock_web_server.MockWebServerRule()

@get:Rule
val analyticsRule = AnalyticsRule()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ import com.appunite.loudius.ui.reviewers.ReviewersScreen
import com.appunite.loudius.util.IntegrationTestRule
import com.appunite.loudius.util.Register
import com.appunite.loudius.util.waitUntilLoadingDoesNotExist
import com.appunite.mockwebserverrule.MockWebServerRule
import org.junit.Before
import org.junit.Rule
import org.junit.Test
Expand All @@ -40,7 +39,8 @@ abstract class AbsReviewersScreenTest {
val integrationTestRule = IntegrationTestRule()

@get:Rule(order = 1)
var mockWebServer: MockWebServerRule = MockWebServerRule()
var mockWebServer: com.appunite.mock_web_server.MockWebServerRule =
com.appunite.mock_web_server.MockWebServerRule()

@get:Rule
val analyticsRule = AnalyticsRule()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,14 @@ import androidx.test.espresso.intent.Intents.intending
import androidx.test.espresso.intent.matcher.IntentMatchers
import androidx.test.espresso.intent.rule.IntentsRule
import com.appunite.loudius.util.Register
import com.appunite.mockwebserverrule.MockWebServerRule
import org.junit.Before
import org.junit.Rule

abstract class AbsWalkThroughAppTest : UniversalWalkThroughAppTest() {

@get:Rule(order = 1)
var mockWebServer: MockWebServerRule = MockWebServerRule()
var mockWebServer: com.appunite.mock_web_server.MockWebServerRule =
com.appunite.mock_web_server.MockWebServerRule()

@get:Rule(order = 2)
val intents = IntentsRule()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,27 +16,25 @@

package com.appunite.loudius.util

import com.appunite.mockwebserverrule.MockWebServerRule
import com.appunite.mockwebserverrule.jsonResponse
import com.appunite.mockwebserverrule.path
import com.appunite.mockwebserverrule.queryParameter
import com.appunite.mockwebserverrule.url
import com.appunite.mock_web_server.path
import com.appunite.mock_web_server.queryParameter
import com.appunite.mock_web_server.url
import strikt.api.expectThat
import strikt.assertions.isEqualTo

object Register {

fun user(mockWebServer: MockWebServerRule) {
fun user(mockWebServer: com.appunite.mock_web_server.MockWebServerRule) {
mockWebServer.register {
expectThat(it).url.path.isEqualTo("/user")
jsonResponse("""{"id": 1, "login": "user"}""")
com.appunite.mock_web_server.jsonResponse("""{"id": 1, "login": "user"}""")
}
}

fun accessToken(mockWebServer: MockWebServerRule) {
fun accessToken(mockWebServer: com.appunite.mock_web_server.MockWebServerRule) {
mockWebServer.register {
expectThat(it).url.path.isEqualTo("/login/oauth/access_token")
jsonResponse(
com.appunite.mock_web_server.jsonResponse(
"""
{
"access_token": "example_access_token",
Expand All @@ -48,23 +46,23 @@ object Register {
}
}

fun reviews(mockWebServer: MockWebServerRule) {
fun reviews(mockWebServer: com.appunite.mock_web_server.MockWebServerRule) {
mockWebServer.register {
expectThat(it).url.and {
get("host") { host }.isEqualTo("api.github.com")
path.isEqualTo("/repos/exampleOwner/exampleRepo/pulls/1/reviews")
}
jsonResponse("[]")
com.appunite.mock_web_server.jsonResponse("[]")
}
}

fun comment(mockWebServer: MockWebServerRule) {
fun comment(mockWebServer: com.appunite.mock_web_server.MockWebServerRule) {
mockWebServer.register {
expectThat(it).url.and {
get("host") { host }.isEqualTo("api.github.com")
path.isEqualTo("/repos/exampleOwner/exampleRepo/issues/1/comments")
}
jsonResponse(
com.appunite.mock_web_server.jsonResponse(
"""
{
"id": 1,
Expand Down Expand Up @@ -102,13 +100,13 @@ object Register {
}
}

fun requestedReviewers(mockWebServer: MockWebServerRule) {
fun requestedReviewers(mockWebServer: com.appunite.mock_web_server.MockWebServerRule) {
mockWebServer.register {
expectThat(it).url.and {
get("host") { host }.isEqualTo("api.github.com")
path.isEqualTo("/repos/exampleOwner/exampleRepo/pulls/1/requested_reviewers")
}
jsonResponse(
com.appunite.mock_web_server.jsonResponse(
"""
{
"users": [
Expand Down Expand Up @@ -140,7 +138,7 @@ object Register {
}
}

fun issues(mockWebServer: MockWebServerRule) {
fun issues(mockWebServer: com.appunite.mock_web_server.MockWebServerRule) {
mockWebServer.register {
expectThat(it).url.and {
get("host") { host }.isEqualTo("api.github.com")
Expand All @@ -150,7 +148,7 @@ object Register {
queryParameter("per_page").isEqualTo("100")
}

jsonResponse(
com.appunite.mock_web_server.jsonResponse(
"""
{
"total_count":1,
Expand Down
2 changes: 1 addition & 1 deletion app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ android {

dependencies {
api project(':components')
implementation(project(':mock-web-server-rule'))
implementation(project(':mock-web-server'))

// Desugaring for use of java.time in api lower then 26
coreLibraryDesugaring(libs.desugar)
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/java/com/appunite/loudius/di/NetworkModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import com.appunite.loudius.common.Constants
import com.appunite.loudius.network.intercept.AuthFailureInterceptor
import com.appunite.loudius.network.intercept.AuthInterceptor
import com.appunite.loudius.network.utils.AuthFailureHandler
import com.appunite.mockwebserverrule.TestInterceptor
import com.appunite.mock_web_server.TestInterceptor
import io.ktor.client.HttpClient
import io.ktor.client.engine.okhttp.OkHttp
import io.ktor.client.plugins.contentnegotiation.ContentNegotiation
Expand Down
2 changes: 1 addition & 1 deletion gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ ktor = "2.3.7"
ktx = "1.12.0"
lifecycleKtx = "2.6.2"
lottieCompose = "6.2.0"
mockwebserver = "4.11.0"
mockwebserver = "4.12.0"
mockkAndroid = "1.13.5"
okhttp3 = "4.12.0"
robolectric = "4.10.3"
Expand Down
1 change: 1 addition & 0 deletions mock-web-server/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/build
23 changes: 23 additions & 0 deletions mock-web-server/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
@Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed
plugins {
id("java-library")
alias(libs.plugins.kotlin.jvm)
}

java {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}

kotlin {
jvmToolchain(17)
}

dependencies {
implementation(libs.bundles.okhttp)
implementation(libs.bundles.mock)
implementation(libs.bundles.strikt)
implementation("io.github.oshai:kotlin-logging-jvm:5.1.0")

testImplementation(libs.junit)
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* limitations under the License.
*/

package com.appunite.mockwebserverrule
package com.appunite.mock_web_server

import okhttp3.Headers
import okhttp3.HttpUrl
Expand All @@ -24,15 +24,19 @@ import okio.Buffer
import strikt.api.Assertion
import strikt.assertions.isNotNull

inline val Assertion.Builder<Request>.url: Assertion.Builder<HttpUrl> get() = get(Request::url)
inline val Assertion.Builder<Request>.method: Assertion.Builder<String> get() = get(Request::method)
inline val Assertion.Builder<com.appunite.mock_web_server.Request>.url: Assertion.Builder<HttpUrl> get() = get(
com.appunite.mock_web_server.Request::url)
inline val Assertion.Builder<com.appunite.mock_web_server.Request>.method: Assertion.Builder<String> get() = get(
com.appunite.mock_web_server.Request::method)

@get:JvmName("requestBody")
inline val Assertion.Builder<Request>.body: Assertion.Builder<Buffer> get() = get(Request::body)
inline val Assertion.Builder<com.appunite.mock_web_server.Request>.body: Assertion.Builder<Buffer> get() = get(
com.appunite.mock_web_server.Request::body)
inline val Assertion.Builder<Buffer>.utf8: Assertion.Builder<String> get() = get("utf8 string") { readUtf8() }

@get:JvmName("requestHeaders")
inline val Assertion.Builder<Request>.headers: Assertion.Builder<Headers> get() = get(Request::headers)
inline val Assertion.Builder<com.appunite.mock_web_server.Request>.headers: Assertion.Builder<Headers> get() = get(
com.appunite.mock_web_server.Request::headers)
inline val Assertion.Builder<Response>.code: Assertion.Builder<Int> get() = get("code") { code }

@get:JvmName("responseBody")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@
* limitations under the License.
*/

package com.appunite.mockwebserverrule
package com.appunite.mock_web_server

import android.util.Log
import io.github.oshai.kotlinlogging.KotlinLogging
import okhttp3.Headers
import okhttp3.HttpUrl
import okhttp3.HttpUrl.Companion.toHttpUrl
Expand All @@ -33,6 +33,7 @@ import org.junit.runner.Description
import org.junit.runners.model.Statement

private const val TAG = "MockWebServerRule"
private val logger = KotlinLogging.logger {}

class Request(
val headers: Headers,
Expand Down Expand Up @@ -60,7 +61,9 @@ class MockWebServerRule : TestRule {
MockWebServer().use { server ->
server.dispatcher = dispatcher
TestInterceptor.testInterceptor = UrlOverrideInterceptor(server.url("/"))
Log.v(TAG, "TestInterceptor installed")
logger.info {
TAG + "TestInterceptor installed"
}
try {
base.evaluate()
} catch (e: Throwable) {
Expand All @@ -76,7 +79,9 @@ class MockWebServerRule : TestRule {
)
}
} finally {
Log.v(TAG, "TestInterceptor uninstalled")
logger.info {
TAG + "TestInterceptor uninstalled"
}
TestInterceptor.testInterceptor = null
}
}
Expand Down Expand Up @@ -137,7 +142,9 @@ private class MockDispatcher : Dispatcher() {
return runMocks(mockRequest)
} catch (e: Throwable) {
errors.add(e)
Log.w(TAG, e.message!!)
logger.warn {
TAG + e.message!!
}
return MockResponse().setResponseCode(404)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* limitations under the License.
*/

package com.appunite.mockwebserverrule
package com.appunite.mock_web_server

import okhttp3.Interceptor
import okhttp3.Response
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,11 @@
* limitations under the License.
*/

package com.appunite.mockwebserverrule
package com.appunite.mock_web_server


import android.util.Log
import io.mockk.CapturingSlot
import io.mockk.every
import io.mockk.mockk
import io.mockk.mockkStatic
import io.mockk.slot
import okhttp3.OkHttpClient
import okhttp3.RequestBody.Companion.toRequestBody
Expand All @@ -33,7 +30,6 @@ import org.hamcrest.TypeSafeMatcher
import org.junit.Rule
import org.junit.Test
import org.junit.rules.ExpectedException
import org.junit.rules.TestWatcher
import strikt.api.expectThat
import strikt.assertions.contains
import strikt.assertions.first
Expand All @@ -52,9 +48,6 @@ class MockWebServerRuleTest {
@get:Rule(order = 0)
val expectedException: ExpectedException = ExpectedException.none()

@get:Rule(order = 1)
val loggerMockRule: LoggerMockRule = LoggerMockRule()

@get:Rule(order = 2)
val mockWebServerRule: MockWebServerRule = MockWebServerRule()

Expand Down Expand Up @@ -214,7 +207,6 @@ class MockWebServerRuleTest {
val slot = executeRequestAndGetMockedArgumentRequest {
it.addHeader("Accept", "application/json")
}

expectThat(slot).captured.headers.header("Accept").isEqualTo("application/json")
}

Expand Down Expand Up @@ -307,15 +299,3 @@ private fun <T> matcher(check: (T) -> Unit): Matcher<T> = object : TypeSafeMatch
}
}
}

class LoggerMockRule : TestWatcher() {
override fun starting(description: org.junit.runner.Description?) {
mockkStatic(Log::class)
every { Log.v(any(), any()) } returns 0
every { Log.v(any(), any(), any()) } returns 0
every { Log.w(any(), any<String>()) } returns 0
every { Log.w(any(), any<Throwable>()) } returns 0
every { Log.w(any(), any(), any()) } returns 0
}
}

2 changes: 1 addition & 1 deletion settings.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,4 @@ include ':app'
include ':custom-ktlint-rules'
include ':components'
include ':app-shared-tests'
include ':mock-web-server-rule'
include ':mock-web-server'

0 comments on commit af32a78

Please sign in to comment.