From 597cde3f58e29de2d26c93f21d191c0590f44a6a Mon Sep 17 00:00:00 2001 From: Eugene Date: Thu, 17 Sep 2026 21:12:47 +0300 Subject: [PATCH] add apitest --- apps/vbox/client/shared/build.gradle.kts | 3 + .../ru/shadowsparky/vbox/shared/ApiTest.kt | 18 +++++ .../ru/shadowsparky/vbox/shared/BaseTest.kt | 65 +++++++++++++++++++ 3 files changed, 86 insertions(+) create mode 100644 apps/vbox/client/shared/src/desktopTest/kotlin/ru/shadowsparky/vbox/shared/ApiTest.kt create mode 100644 apps/vbox/client/shared/src/desktopTest/kotlin/ru/shadowsparky/vbox/shared/BaseTest.kt diff --git a/apps/vbox/client/shared/build.gradle.kts b/apps/vbox/client/shared/build.gradle.kts index 55f38fa..0653671 100644 --- a/apps/vbox/client/shared/build.gradle.kts +++ b/apps/vbox/client/shared/build.gradle.kts @@ -39,6 +39,9 @@ kotlin { implementation(kotlin("test")) } } + desktopTest.dependencies { + implementation(kotlin("test")) + } val wasmJsMain by getting { dependencies { implementation(libs.sqldelight.web.driver) diff --git a/apps/vbox/client/shared/src/desktopTest/kotlin/ru/shadowsparky/vbox/shared/ApiTest.kt b/apps/vbox/client/shared/src/desktopTest/kotlin/ru/shadowsparky/vbox/shared/ApiTest.kt new file mode 100644 index 0000000..f1f070b --- /dev/null +++ b/apps/vbox/client/shared/src/desktopTest/kotlin/ru/shadowsparky/vbox/shared/ApiTest.kt @@ -0,0 +1,18 @@ +package ru.shadowsparky.vbox.shared + +import kotlinx.coroutines.runBlocking +import ru.shadowsparky.domain.Log +import ru.shadowsparky.koin +import ru.shadowsparky.vbox.shared.domain.VideoApi +import kotlin.test.Test + +class ApiTest : BaseTest() { + private val videoApi by lazy { koin.get() } + private val log by lazy { koin.get() } + + @Test + fun test(): Unit = runBlocking { + val videos = videoApi.fetchNewVideos("Южный парк") + log.d("GetVideosTest", videos.items.joinToString()) + } +} diff --git a/apps/vbox/client/shared/src/desktopTest/kotlin/ru/shadowsparky/vbox/shared/BaseTest.kt b/apps/vbox/client/shared/src/desktopTest/kotlin/ru/shadowsparky/vbox/shared/BaseTest.kt new file mode 100644 index 0000000..6656a28 --- /dev/null +++ b/apps/vbox/client/shared/src/desktopTest/kotlin/ru/shadowsparky/vbox/shared/BaseTest.kt @@ -0,0 +1,65 @@ +package ru.shadowsparky.vbox.shared + +import kotlinx.coroutines.runBlocking +import org.koin.core.annotation.KoinApplication +import org.koin.core.annotation.Module +import org.koin.core.annotation.Single +import org.koin.core.context.stopKoin +import org.koin.plugin.module.dsl.startKoin +import ru.shadowsparky.domain.AppConfig +import ru.shadowsparky.http.domain.TokenInfo +import ru.shadowsparky.koin +import ru.shadowsparky.vbox.shared.domain.AuthTokenRepository +import ru.shadowsparky.vbox.shared.domain.TokenRequest +import ru.shadowsparky.vbox.shared.domain.model.LoginInfo +import kotlin.test.AfterTest +import kotlin.test.BeforeTest + +abstract class BaseTest { + private lateinit var tokenInfo: TokenInfo + + private val authRepository by lazy { koin.get() } + + @BeforeTest + fun before() { + startKoin() + runBlocking { + tokenInfo = authRepository.login( + LoginInfo( + System.getenv("VBOX_LOGIN"), + System.getenv("VBOX_PASSWORD") + ) + ) + onBefore() + } + } + + @AfterTest + fun after() { + runBlocking { + authRepository.revoke(TokenRequest(tokenInfo.refresh!!)) + onAfter() + } + stopKoin() + } + + open suspend fun onAfter() {} + open suspend fun onBefore() {} +} + +@KoinApplication(modules = [AppModule::class]) +object VBox + +@Module +class AppModule { + + @Single + fun provideAppConfig(): AppConfig { + return object : AppConfig { + override val debug = true + override val appId = "VBoxTest" + override val versionCode = 1L + override val versionName = "1.0" + } + } +}