avito-android

Форк
0
110 строк · 3.2 Кб
1
package com.avito.plugin
2

3
import com.avito.android.Result
4
import com.avito.logger.PrintlnLoggerFactory
5
import com.avito.test.http.MockWebServerFactory
6
import com.avito.truth.ResultSubject.Companion.assertThat
7
import com.avito.truth.assertThat
8
import com.google.common.truth.Truth.assertThat
9
import com.google.common.truth.Truth.assertWithMessage
10
import okhttp3.OkHttpClient
11
import okhttp3.mockwebserver.Dispatcher
12
import okhttp3.mockwebserver.MockResponse
13
import okhttp3.mockwebserver.RecordedRequest
14
import org.junit.jupiter.api.AfterEach
15
import org.junit.jupiter.api.BeforeEach
16
import org.junit.jupiter.api.Test
17
import org.junit.jupiter.api.io.TempDir
18
import java.io.File
19
import java.nio.file.Path
20

21
internal class QAppsUploadActionTest {
22

23
    private lateinit var testProjectDir: File
24

25
    private val server = MockWebServerFactory.create()
26

27
    private val apk: File
28
        get() {
29
            val apk = File(testProjectDir, "test.apk")
30
            apk.createNewFile()
31
            apk.writeText("content")
32
            return apk
33
        }
34

35
    private val action: QAppsUploadAction
36
        get() = QAppsUploadAction(
37
            apk = apk,
38
            comment = "comment",
39
            host = server.url("/").toString(),
40
            branch = "develop",
41
            versionName = "version_name",
42
            versionCode = "0",
43
            packageName = "com.avito.android",
44
            releaseChain = false,
45
            loggerFactory = PrintlnLoggerFactory,
46
            httpClientBuilder = OkHttpClient.Builder(),
47
        )
48

49
    private val failedResponse = MockResponse()
50
        .setResponseCode(500)
51
        .setBody("[error reason]")
52

53
    private val successResponse = MockResponse().setResponseCode(200)
54

55
    @BeforeEach
56
    fun setup(@TempDir tempPath: Path) {
57
        testProjectDir = tempPath.toFile()
58
        server.start()
59
    }
60

61
    @AfterEach
62
    fun tearDown() {
63
        server.shutdown()
64
    }
65

66
    @Test
67
    fun `action failed - when http request failed all attempts`() {
68
        server.dispatcher = object : Dispatcher() {
69
            override fun dispatch(request: RecordedRequest): MockResponse {
70
                return failedResponse
71
            }
72
        }
73

74
        val result = action.upload()
75

76
        assertThat<Result.Failure<*>>(result) {
77
            assertThat(throwable.message).contains("Can't upload apk to qapps")
78
            assertThat(throwable.message).contains("[error reason]")
79
        }
80

81
        assertWithMessage("retry to send")
82
            .that(server.requestCount).isAtLeast(2)
83
    }
84

85
    @Test
86
    fun `action success - successful request after failed`() {
87
        server.enqueue(failedResponse)
88
        server.enqueue(successResponse)
89

90
        val result = action.upload()
91

92
        assertThat(result).isSuccess()
93
        assertThat(server.requestCount).isEqualTo(2)
94
    }
95

96
    @Test
97
    fun `action success - request contains passed params`() {
98
        server.enqueue(successResponse)
99

100
        val result = action.upload()
101

102
        assertThat(server.requestCount).isEqualTo(1)
103
        val recordedRequest = server.takeRequest()
104

105
        assertThat(recordedRequest.path).isEqualTo("/qapps/api/os/android/upload")
106
        assertThat(recordedRequest.body.readUtf8()).contains("content")
107

108
        assertThat(result).isSuccess()
109
    }
110
}
111

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

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

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

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