Skip to content

Commit e014838

Browse files
authored
Merge pull request #1160 from diegotorrespy/master
KTLN-860: Unit tests
2 parents 3d4bd8f + f7c4270 commit e014838

File tree

3 files changed

+72
-0
lines changed

3 files changed

+72
-0
lines changed

kotlin-libraries-http/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,18 @@
5959
<artifactId>gson</artifactId>
6060
<version>${gson.version}</version>
6161
</dependency>
62+
<dependency>
63+
<groupId>com.squareup.retrofit2</groupId>
64+
<artifactId>retrofit</artifactId>
65+
<version>${retrofit.version}</version>
66+
</dependency>
6267
</dependencies>
6368

6469
<properties>
6570
<khttp.version>1.3.1</khttp.version>
6671
<fuel.version>2.3.1</fuel.version>
6772
<http4k.version>5.25.0.0</http4k.version>
73+
<retrofit.version>2.9.0</retrofit.version>
6874
</properties>
6975

7076
</project>
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.baeldung.retrofit
2+
3+
import kotlinx.coroutines.Dispatchers
4+
import kotlinx.coroutines.withContext
5+
import okhttp3.ResponseBody
6+
import retrofit2.Retrofit
7+
import retrofit2.http.GET
8+
import retrofit2.http.Url
9+
import java.io.File
10+
import java.io.FileOutputStream
11+
12+
// Retrofit service interface
13+
interface FileDownloadService {
14+
@GET
15+
suspend fun downloadFile(@Url fileUrl: String): ResponseBody
16+
}
17+
18+
// Function to download a PDF using Retrofit
19+
suspend fun downloadPdfWithRetrofit(url: String, outputFile: File) {
20+
val retrofit = Retrofit.Builder()
21+
.baseUrl("https://example.com/") // Base URL is required but won't be used with dynamic @Url
22+
.build()
23+
24+
val service = retrofit.create(FileDownloadService::class.java)
25+
26+
withContext(Dispatchers.IO) {
27+
val responseBody = service.downloadFile(url)
28+
29+
// Save the file to disk
30+
responseBody.byteStream().use { inputStream ->
31+
FileOutputStream(outputFile).use { outputStream ->
32+
inputStream.copyTo(outputStream)
33+
}
34+
}
35+
36+
println("File downloaded successfully to ${outputFile.absolutePath}")
37+
}
38+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.baeldung.retrofit
2+
3+
import kotlinx.coroutines.runBlocking
4+
import org.junit.Test
5+
import java.io.File
6+
import kotlin.test.assertTrue
7+
8+
class FileDownloadServiceUnitTest {
9+
10+
@Test
11+
fun testSuccessfulFileDownload(): Unit = runBlocking {
12+
13+
// File to store the downloaded content
14+
val outputFile = File("test_sample.pdf")
15+
if (outputFile.exists()) {
16+
outputFile.delete()
17+
}
18+
19+
// Call the download function
20+
downloadPdfWithRetrofit("https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf", outputFile)
21+
22+
// Verify the file was created
23+
assertTrue(outputFile.exists())
24+
25+
// Clean up the test file
26+
outputFile.delete()
27+
}
28+
}

0 commit comments

Comments
 (0)