avito-android
110 строк · 3.2 Кб
1package com.avito.plugin
2
3import com.avito.android.Result
4import com.avito.logger.PrintlnLoggerFactory
5import com.avito.test.http.MockWebServerFactory
6import com.avito.truth.ResultSubject.Companion.assertThat
7import com.avito.truth.assertThat
8import com.google.common.truth.Truth.assertThat
9import com.google.common.truth.Truth.assertWithMessage
10import okhttp3.OkHttpClient
11import okhttp3.mockwebserver.Dispatcher
12import okhttp3.mockwebserver.MockResponse
13import okhttp3.mockwebserver.RecordedRequest
14import org.junit.jupiter.api.AfterEach
15import org.junit.jupiter.api.BeforeEach
16import org.junit.jupiter.api.Test
17import org.junit.jupiter.api.io.TempDir
18import java.io.File
19import java.nio.file.Path
20
21internal class QAppsUploadActionTest {
22
23private lateinit var testProjectDir: File
24
25private val server = MockWebServerFactory.create()
26
27private val apk: File
28get() {
29val apk = File(testProjectDir, "test.apk")
30apk.createNewFile()
31apk.writeText("content")
32return apk
33}
34
35private val action: QAppsUploadAction
36get() = QAppsUploadAction(
37apk = apk,
38comment = "comment",
39host = server.url("/").toString(),
40branch = "develop",
41versionName = "version_name",
42versionCode = "0",
43packageName = "com.avito.android",
44releaseChain = false,
45loggerFactory = PrintlnLoggerFactory,
46httpClientBuilder = OkHttpClient.Builder(),
47)
48
49private val failedResponse = MockResponse()
50.setResponseCode(500)
51.setBody("[error reason]")
52
53private val successResponse = MockResponse().setResponseCode(200)
54
55@BeforeEach
56fun setup(@TempDir tempPath: Path) {
57testProjectDir = tempPath.toFile()
58server.start()
59}
60
61@AfterEach
62fun tearDown() {
63server.shutdown()
64}
65
66@Test
67fun `action failed - when http request failed all attempts`() {
68server.dispatcher = object : Dispatcher() {
69override fun dispatch(request: RecordedRequest): MockResponse {
70return failedResponse
71}
72}
73
74val result = action.upload()
75
76assertThat<Result.Failure<*>>(result) {
77assertThat(throwable.message).contains("Can't upload apk to qapps")
78assertThat(throwable.message).contains("[error reason]")
79}
80
81assertWithMessage("retry to send")
82.that(server.requestCount).isAtLeast(2)
83}
84
85@Test
86fun `action success - successful request after failed`() {
87server.enqueue(failedResponse)
88server.enqueue(successResponse)
89
90val result = action.upload()
91
92assertThat(result).isSuccess()
93assertThat(server.requestCount).isEqualTo(2)
94}
95
96@Test
97fun `action success - request contains passed params`() {
98server.enqueue(successResponse)
99
100val result = action.upload()
101
102assertThat(server.requestCount).isEqualTo(1)
103val recordedRequest = server.takeRequest()
104
105assertThat(recordedRequest.path).isEqualTo("/qapps/api/os/android/upload")
106assertThat(recordedRequest.body.readUtf8()).contains("content")
107
108assertThat(result).isSuccess()
109}
110}
111