avito-android

Форк
0
1
package com.avito.instrumentation
2

3
import com.avito.instrumentation.configuration.report.ReportConfig
4
import com.avito.instrumentation.internal.LocalRunArgsChecker
5
import com.avito.reportviewer.model.RunId
6
import com.avito.test.gradle.TestProjectGenerator
7
import com.avito.test.gradle.ciRun
8
import com.avito.test.gradle.git
9
import com.avito.test.gradle.module.AndroidAppModule
10
import com.avito.test.gradle.plugin.plugins
11
import com.google.common.truth.Truth.assertThat
12
import org.junit.jupiter.api.DynamicTest
13
import org.junit.jupiter.api.DynamicTest.dynamicTest
14
import org.junit.jupiter.api.TestFactory
15
import org.junit.jupiter.api.io.TempDir
16
import java.io.File
17
import kotlin.io.path.div
18

19
internal class LocalRunArgsTest {
20

21
    private val appName = "app"
22
    private val targetBranch = "another"
23
    private val buildType = "buildType"
24

25
    private val reportConfig = ReportConfig.ReportViewer.SendFromDevice(
26
        reportApiUrl = "http://stub",
27
        reportViewerUrl = "http://stub",
28
        fileStorageUrl = "http://stub",
29
        planSlug = "AppAndroid",
30
        jobSlug = "LocalTests",
31
    )
32

33
    @TestFactory
34
    fun `instrumentation args - passed correctly - kotlin`(@TempDir projectDir: File): List<DynamicTest> {
35
        TestProjectGenerator(
36
            plugins = plugins {
37
                id("com.avito.android.gradle-logger")
38
            },
39
            modules = listOf(
40
                AndroidAppModule(
41
                    name = appName,
42
                    plugins = plugins {
43
                        id(instrumentationPluginId)
44
                    },
45
                    useKts = true,
46
                    imports = listOf(
47
                        "import com.avito.instrumentation.reservation.request.Device",
48
                        "import com.avito.instrumentation.configuration.report.ReportConfig",
49
                    ),
50
                    buildGradleExtra = kotlinStubConfig(reportConfig)
51
                )
52
            ),
53
            useKts = true,
54
        ).generateIn(projectDir)
55

56
        return cases(projectDir)
57
    }
58

59
    private fun cases(projectDir: File): List<DynamicTest> {
60
        with(projectDir) {
61
            git("branch $targetBranch")
62
        }
63
        ciRun(
64
            projectDir,
65
            "help",
66
            "-PteamcityBuildId=0",
67
            "-Pavito.git.state=env",
68
            "-PisGradleTestKitRun=true",
69
            buildType = buildType,
70
        ).assertThat().buildSuccessful()
71

72
        val dumpDir = projectDir.toPath() / "outputs" / dumpDirName
73

74
        val instrumentationArgs = LocalRunArgsChecker { dumpDir.toFile() }.readDump()
75
        val commit = projectDir.git("rev-parse HEAD").trim()
76
        val runId = RunId(
77
            identifier = commit,
78
            buildTypeId = "teamcity-$buildType"
79
        ).toReportViewerFormat()
80

81
        val cases = listOf(
82
            Case("planSlug", "AppAndroid"),
83
            Case("jobSlug", "LocalTests"),
84
            Case("runId", runId),
85
            Case("avito.report.transport", "backend"),
86
            Case("fileStorageUrl", "http://stub"),
87
            Case("deviceName", "local"),
88
            Case("reportApiUrl", "http://stub"),
89
            Case("reportViewerUrl", "http://stub"),
90
            Case("expectedCustomParam", "value"),
91
            Case("override", "createdInInstrumentationRunnerArguments"),
92
        )
93
        return cases.map { case ->
94
            dynamicTest(case.param) {
95
                assertThat(instrumentationArgs).containsEntry(case.param, case.expectedValue)
96
            }
97
        } + dynamicTest("keys count") {
98
            assertThat(instrumentationArgs.keys).hasSize(cases.size)
99
        }
100
    }
101

102
    private data class Case(
103
        val param: String,
104
        val expectedValue: String
105
    )
106
}
107

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.