Skip to content

Commit

Permalink
Merge pull request #12 from DenisBronx/release/0.5.0
Browse files Browse the repository at this point in the history
Release/0.5.0
  • Loading branch information
DenisBronx authored Oct 2, 2024
2 parents 15050cd + 0eb8f07 commit dca3473
Show file tree
Hide file tree
Showing 27 changed files with 222 additions and 148 deletions.
37 changes: 30 additions & 7 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -1,26 +1,49 @@
# https://editorconfig.org
root = true

[*]
indent_style = space

end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[*.{java,kt,kts,scala,rs,xml,kt.spec,kts.spec}]
indent_size = 4

[*.{kt,kts}]
ktlint_code_style = android_studio
ij_kotlin_imports_layout = *
ij_kotlin_allow_trailing_comma = false
ij_kotlin_allow_trailing_comma_on_call_site = false
# General
ktlint_standard_no-wildcard-imports = disabled
max_line_length = off

ktlint_standard_trailing-comma-on-declaration-site = disabled
ktlint_standard_trailing-comma-on-call-site = disabled
ktlint_standard_max-line-length = disabled
ktlint_standard_function-signature = disabled
ktlint_standard_function-expression-body = disabled
ktlint_standard_function-literal = disabled
ktlint_standard_class-signature = disabled
ktlint_standard_block-comment-initial-star-alignment = disabled
ktlint_standard_indent = disabled
ktlint_standard_no-semi = disabled
ktlint_standard_unnecessary-parentheses-before-trailing-lambda = disabled
# Wrapping
ktlint_standard_argument-list-wrapping = disabled
ktlint_standard_parameter-list-wrapping = disabled
ktlint_standard_binary-expression-wrapping = disabled
ktlint_standard_property-wrapping = disabled
ktlint_standard_parameter-wrapping = disabled
ktlint_standard_enum-wrapping = disabled
ktlint_standard_statement-wrapping = disabled
ktlint_standard_condition-wrapping = disabled
ktlint_standard_wrapping = disabled
# Naming
ktlint_standard_function-naming = disabled
ktlint_standard_property-naming = disabled
ktlint_standard_backing-property-naming = disabled
# Spacing
ktlint_standard_spacing-between-declarations-with-comments = disabled
ktlint_standard_function-type-modifier-spacing = disabled
[*.md]
trim_trailing_whitespace = false

[gradle/verification-metadata.xml]
indent_size = 3
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@ jobs:

steps:
- uses: actions/checkout@v3
- name: set up JDK 11
- name: set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '11'
java-version: '17'
distribution: 'temurin'
cache: gradle

Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@ jobs:

steps:
- uses: actions/checkout@v3
- name: set up JDK 11
- name: set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '11'
java-version: '17'
distribution: 'temurin'
cache: gradle

Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,4 @@ local.properties
/kotlin-js-store
secrets.properties
private.pgp
/.kotlin
8 changes: 5 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,11 @@ For Gradle users, add the following to your module’s `build.gradle`
```groovy
dependencies {
//compatible with all libraries
testImplementation "io.github.denisbronx.netmock:netmock-server:0.4.0"
testImplementation "io.github.denisbronx.netmock:netmock-server:0.5.0"
//mutliplatform and lighter weight option for ktor only library users
testImplementation "io.github.denisbronx.netmock:netmock-engine:0.4.0"
testImplementation "io.github.denisbronx.netmock:netmock-engine:0.5.0"
//library for accessing local json files in the test folder
testImplementation "io.github.denisbronx.netmock:netmock-resources:0.5.0"
}
```

Expand Down Expand Up @@ -167,7 +169,7 @@ by doing so, all the not mocked requests will return the specified response and

## Resources
When working with request and response bodies, it may not be ideal to create string constants in your tests (i.e. long JSONs that compromise tests readability, sharing bodies between test classes...).
You can use instead read from a local file in your test `resources` folder:
You can instead read from a local file in your test `resources` folder:
```kotlin
//Reads the text from the module's "src/test/resources/responses/products_response_body.json" file
val responseBody = readFromResources("responses/products_response_body.json")
Expand Down
15 changes: 8 additions & 7 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
plugins {
id("com.android.application") version android_plugin_version apply false
id("com.android.library") version android_plugin_version apply false
id("org.jetbrains.kotlin.android") version kotlin_version apply false
id("org.jetbrains.kotlin.jvm") version kotlin_version apply false
id("org.jetbrains.kotlin.plugin.serialization") version kotlin_version
id("org.jetbrains.kotlin.multiplatform") version kotlin_version apply false
alias(libs.plugins.android.application) apply false
alias(libs.plugins.android.library) apply false
alias(libs.plugins.kotlin.android) apply false
alias(libs.plugins.kotlin.jvm) apply false
alias(libs.plugins.kotlin.serialization) apply false
alias(libs.plugins.kotlin.multiplatform) apply false
alias(libs.plugins.kover) apply false
id("maven-publish")
id("io.github.gradle-nexus.publish-plugin") version nexus_publish_version
alias(libs.plugins.nexus.publish)
}
2 changes: 0 additions & 2 deletions buildSrc/.gitignore

This file was deleted.

7 changes: 0 additions & 7 deletions buildSrc/build.gradle.kts

This file was deleted.

13 changes: 0 additions & 13 deletions buildSrc/src/main/kotlin/Versions.kt

This file was deleted.

40 changes: 40 additions & 0 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
[versions]
agp = "8.6.1"
kotlin = "2.0.20"
junit = "4.13.2"
coroutines-test = "1.7.3"
kover = "0.8.3"
ktor = "2.3.12"
netmock = "0.5.0"
nexus-publish = "1.1.0"
okhttp = "4.12.0"
retrofit = "2.11.0"
retrofit-serialization = "1.0.0"
serialization-version = "1.7.3"
kermit = "2.0.0-RC4"

[libraries]
kotlin-test = { group = "org.jetbrains.kotlin", name = "kotlin-test", version.ref = "kotlin"}
junit = { group = "junit", name = "junit", version.ref = "junit" }
coroutines-test = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-test", version.ref = "coroutines-test" }
ktor = { group = "io.ktor", name = "ktor-client-core", version.ref = "ktor" }
ktor-okhttp = { group = "io.ktor", name = "ktor-client-okhttp", version.ref = "ktor" }
ktor-cio = { group = "io.ktor", name = "ktor-client-cio", version.ref = "ktor" }
ktor-content-negotiation = { group = "io.ktor", name = "ktor-client-content-negotiation", version.ref = "ktor" }
ktor-serialization = { group = "io.ktor", name = "ktor-serialization-kotlinx-json", version.ref = "ktor" }
ktor-mock = { group = "io.ktor", name = "ktor-client-mock", version.ref = "ktor" }
kotlin-serialization = { group = "org.jetbrains.kotlinx", name = "kotlinx-serialization-json", version.ref = "serialization-version" }
kermit = { group = "co.touchlab", name = "kermit", version.ref = "kermit" }
retrofit = { group = "com.squareup.retrofit2", name = "retrofit", version.ref = "retrofit" }
retrofit-converter-scalars= { group = "com.squareup.retrofit2", name = "converter-scalars", version.ref = "retrofit" }
retrofit-serialization = { group = "com.jakewharton.retrofit", name = "retrofit2-kotlinx-serialization-converter", version.ref = "retrofit-serialization" }

[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }
android-library = { id = "com.android.library", version.ref = "agp" }
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
kover = { id = "org.jetbrains.kotlinx.kover", version.ref = "kover" }
nexus-publish = { id = "io.github.gradle-nexus.publish-plugin", version.ref = "nexus-publish" }
21 changes: 12 additions & 9 deletions netmock-core/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,35 +1,38 @@
plugins {
kotlin("multiplatform") version "1.8.21"
id("org.jetbrains.kotlin.plugin.serialization")
alias(libs.plugins.kotlin.multiplatform)
alias(libs.plugins.kotlin.serialization)
alias(libs.plugins.kover)
id("maven-publish")
id("convention.publication")
id("org.jetbrains.kotlinx.kover") version kover_version
}

publishing {
publications.withType<MavenPublication> {
groupId = "io.github.denisbronx.netmock"
artifactId = "netmock-core"
version = netmock_version
version = libs.versions.netmock.get()
}
}

kotlin {
jvmToolchain(17)
jvm {
jvmToolchain(11)
withJava()
testRuns["test"].executionTask.configure {
useJUnit()
}
}
val hostOs = System.getProperty("os.name")
val isMingwX64 = hostOs.startsWith("Windows")
val nativeTarget = when {
when {
hostOs == "Mac OS X" -> macosX64("native")
hostOs == "Linux" -> linuxX64("native")
isMingwX64 -> mingwX64("native")
else -> throw GradleException("Host OS is not supported in Kotlin/Native.")
}
iosX64()
iosArm64()
iosSimulatorArm64()
js(IR) {
nodejs()
binaries.executable()
Expand All @@ -44,13 +47,13 @@ kotlin {
sourceSets {
commonMain {
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:${serialization_version}")
implementation("co.touchlab:kermit:$kermit_version")
implementation(libs.kotlin.serialization)
implementation(libs.kermit)
}
}
commonTest {
dependencies {
implementation("org.jetbrains.kotlin:kotlin-test")
implementation(libs.kotlin.test)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,22 @@ interface NetMock {
*/
fun addMock(request: NetMockRequest, response: NetMockResponse)

/**
* See [NetMock.addMock]
* Alternative way of adding request/response to the queue using builders.
*
* @param [request] The request that has to match with the intercepted HTTP request
* @param [response] Function that allows you to create a [NetMockResponse] using a builder.
*/
fun addMock(
request: NetMockRequest,
response: NetMockResponseBuilder.() -> Unit
) {
val responseBuilder = NetMockResponseBuilder()
response(responseBuilder)
addMock(request, responseBuilder.build())
}

/**
* See [NetMock.addMock]
* Alternative way of adding request/response to the queue using builders.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,12 +52,21 @@ class NetMockTest {
@JsName("call_withRequest")
@Test
fun `EXPECT interface method properly called with all fields WHEN passing requests and responses`() {
sut.addMock(EXPECTED_REQUEST, EXPECTED_RESPONSE)

assertEquals(
listOf(NetMockRequestResponse(EXPECTED_REQUEST, EXPECTED_RESPONSE)),
sut.allowedMocks
)
}

@JsName("call_withRequestAndBuilder")
@Test
fun `EXPECT interface method properly called with all fields WHEN passing requests and response builder`() {
sut.addMock(
request = {
fromRequest(EXPECTED_REQUEST)
},
request = EXPECTED_REQUEST,
response = {
fromResponse(EXPECTED_RESPONSE)
fromBuilder(EXPECTED_RESPONSE_BUILDER)
}
)

Expand Down
28 changes: 15 additions & 13 deletions netmock-engine/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,53 +1,55 @@
plugins {
kotlin("multiplatform") version "1.8.21"
id("org.jetbrains.kotlin.plugin.serialization")
alias(libs.plugins.kotlin.multiplatform)
alias(libs.plugins.kotlin.serialization)
alias(libs.plugins.kover)
id("maven-publish")
id("convention.publication")
id("org.jetbrains.kotlinx.kover") version kover_version
}

publishing {
publications.withType<MavenPublication> {
groupId = "io.github.denisbronx.netmock"
artifactId = "netmock-engine"
version = netmock_version
version = libs.versions.netmock.get()
}
}

kotlin {
jvmToolchain(17)
jvm {
jvmToolchain(11)
withJava()
testRuns["test"].executionTask.configure {
useJUnit()
}
}
val hostOs = System.getProperty("os.name")
val isMingwX64 = hostOs.startsWith("Windows")
val nativeTarget = when {
when {
hostOs == "Mac OS X" -> macosX64("native")
hostOs == "Linux" -> linuxX64("native")
isMingwX64 -> mingwX64("native")
else -> throw GradleException("Host OS is not supported in Kotlin/Native.")
}
iosX64()
iosArm64()
iosSimulatorArm64()
sourceSets {
commonMain {
sourceSets {
dependencies {
api(project(":netmock-core"))
api(project(":netmock-resources"))
api("io.ktor:ktor-client-core:$ktor_version")
implementation("io.ktor:ktor-serialization-kotlinx-json:$ktor_version")
api("io.ktor:ktor-client-mock:$ktor_version")
api(libs.ktor)
implementation(libs.ktor.serialization)
api(libs.ktor.mock)
}
}
}
commonTest {
sourceSets {
dependencies {
implementation("io.ktor:ktor-client-content-negotiation:$ktor_version")
implementation("org.jetbrains.kotlin:kotlin-test")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:$coroutines_test_version")
implementation(libs.ktor.content.negotiation)
implementation(libs.kotlin.test)
implementation(libs.coroutines.test)
}
}
}
Expand Down
Loading

0 comments on commit dca3473

Please sign in to comment.