From 57aa2e38f5d07304bd5ed0ad4727b12754c58aaf Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Wed, 12 Aug 2026 19:07:02 -0400 Subject: [PATCH] test: drive BlossomClientTest's fakes through Call.enqueue() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit BlossomClient now calls executeAsync(), which is enqueue(Callback) plus invokeOnCancellation { cancel() } — it never touches Call.execute(). The MockK fakes only stubbed execute(), so all 10 tests failed on the unstubbed enqueue. Adds a small bridge that answers enqueue() from the execute() stub already set up in each test, so the response fixtures are unchanged and only the call path moves. Co-Authored-By: Claude Opus 5 (1M context) --- .../desktop/service/upload/BlossomClientTest.kt | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/desktopApp/src/jvmTest/kotlin/com/vitorpamplona/amethyst/desktop/service/upload/BlossomClientTest.kt b/desktopApp/src/jvmTest/kotlin/com/vitorpamplona/amethyst/desktop/service/upload/BlossomClientTest.kt index 723ec05c0b..c07128309c 100644 --- a/desktopApp/src/jvmTest/kotlin/com/vitorpamplona/amethyst/desktop/service/upload/BlossomClientTest.kt +++ b/desktopApp/src/jvmTest/kotlin/com/vitorpamplona/amethyst/desktop/service/upload/BlossomClientTest.kt @@ -24,11 +24,14 @@ import com.vitorpamplona.amethyst.commons.service.upload.BlossomClient import com.vitorpamplona.amethyst.commons.service.upload.BlossomMirrorUnsupportedException import com.vitorpamplona.quartz.nip01Core.core.toHexKey import com.vitorpamplona.quartz.utils.sha256.sha256 +import io.mockk.Runs import io.mockk.every +import io.mockk.just import io.mockk.mockk import io.mockk.slot import kotlinx.coroutines.test.runTest import okhttp3.Call +import okhttp3.Callback import okhttp3.Headers import okhttp3.MediaType.Companion.toMediaType import okhttp3.OkHttpClient @@ -45,6 +48,15 @@ import kotlin.test.assertFalse import kotlin.test.assertTrue class BlossomClientTest { + /** + * BlossomClient calls Call.executeAsync(), which drives [Call.enqueue] — not [Call.execute]. + * Bridge the execute() stub set up above onto the async path so the response setup still applies. + */ + private fun Call.answerAsyncFromExecuteStub() { + every { cancel() } just Runs + every { enqueue(any()) } answers { firstArg().onResponse(this@answerAsyncFromExecuteStub, execute()) } + } + private fun mockOkHttp( responseCode: Int, body: String = "", @@ -65,6 +77,7 @@ class BlossomClientTest { .headers(headers) .body(body.toResponseBody()) .build() + mockCall.answerAsyncFromExecuteStub() return mockClient } @@ -76,6 +89,7 @@ class BlossomClientTest { val request = firstArg() val call = mockk() every { call.execute() } returns handler(request) + call.answerAsyncFromExecuteStub() call } return mockClient @@ -326,6 +340,7 @@ class BlossomClientTest { .message("OK") .body("""{"url":"https://example.com/hash"}""".toResponseBody()) .build() + mockCall.answerAsyncFromExecuteStub() val client = BlossomClient(mockClient) val file = File.createTempFile("test_", ".png") @@ -366,6 +381,7 @@ class BlossomClientTest { .message("OK") .body("""{"url":"https://example.com/hash"}""".toResponseBody()) .build() + mockCall.answerAsyncFromExecuteStub() val client = BlossomClient(mockClient) val file = File.createTempFile("test_", ".png")