Skip to content

Commit 428e381

Browse files
committed
Added test for sendFile
1 parent ea00832 commit 428e381

File tree

5 files changed

+90
-1
lines changed

5 files changed

+90
-1
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,22 @@
11
package com.pubnub.kmp
22

3+
import kotlinx.cinterop.ExperimentalForeignApi
4+
import kotlinx.cinterop.addressOf
5+
import kotlinx.cinterop.usePinned
6+
import platform.Foundation.NSData
7+
import platform.Foundation.dataWithBytes
8+
39
internal actual val PLATFORM: String = "iOS"
10+
11+
@OptIn(ExperimentalForeignApi::class)
12+
internal actual fun stringToUploadable(content: String, contentType: String?): Uploadable {
13+
val byteArray = content.encodeToByteArray()
14+
val nsData = byteArray.usePinned {
15+
NSData.dataWithBytes(it.addressOf(0), byteArray.size.toULong())
16+
}
17+
return DataUploadContent(nsData, contentType)
18+
}
19+
20+
internal actual fun readAllBytes(stream: Any?): ByteArray {
21+
TODO("Not yet implemented")
22+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
11
package com.pubnub.kmp
22

33
internal expect val PLATFORM: String
4+
5+
internal expect fun stringToUploadable(content: String, contentType: String? = null): Uploadable
6+
7+
internal expect fun readAllBytes(stream: Any?): ByteArray

pubnub-kotlin/pubnub-kotlin-api/src/commonTest/kotlin/com/pubnub/test/integration/ChannelMetadataTest.kt

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@ import com.pubnub.api.models.consumer.objects.channel.PNChannelMetadata
66
import com.pubnub.api.models.consumer.pubsub.objects.PNDeleteChannelMetadataEventMessage
77
import com.pubnub.api.models.consumer.pubsub.objects.PNObjectEventResult
88
import com.pubnub.api.models.consumer.pubsub.objects.PNSetChannelMetadataEventMessage
9+
import com.pubnub.kmp.PLATFORM
910
import com.pubnub.kmp.createCustomObject
11+
import com.pubnub.kmp.readAllBytes
12+
import com.pubnub.kmp.stringToUploadable
1013
import com.pubnub.test.BaseIntegrationTest
1114
import com.pubnub.test.await
1215
import com.pubnub.test.randomString
@@ -52,6 +55,51 @@ class ChannelMetadataTest : BaseIntegrationTest() {
5255
assertEquals(description, pnuuidMetadata.description?.value)
5356
}
5457

58+
@Test
59+
fun can_send_file_downloadFile() = runTest {
60+
if (PLATFORM == "JS" || PLATFORM == "iOS") { // todo enable for JS/iOS once is implemented
61+
return@runTest
62+
}
63+
val fileName = "test.txt"
64+
val fileContent = "Hello, World!"
65+
// Upload file
66+
val uploadResult = pubnub.sendFile(
67+
channel = channel,
68+
fileName = fileName,
69+
inputStream = stringToUploadable(fileContent, "text/plain"),
70+
message = "Test file upload",
71+
customMessageType = "somethingCustom"
72+
).await()
73+
74+
// Assert upload result
75+
assertNotNull(uploadResult)
76+
assertEquals(fileName, uploadResult.file.name)
77+
assertTrue(uploadResult.file.id.isNotBlank())
78+
79+
// Download file
80+
val downloadResult = pubnub.downloadFile(
81+
channel = channel,
82+
fileName = uploadResult.file.name,
83+
fileId = uploadResult.file.id,
84+
cipherKey = null
85+
).await()
86+
87+
assertNotNull(downloadResult)
88+
assertEquals(fileName, downloadResult.fileName)
89+
assertNotNull(downloadResult.byteStream)
90+
val downloadedBytes = readAllBytes(downloadResult.byteStream)
91+
val downloadedContent = downloadedBytes.decodeToString()
92+
assertEquals(fileContent, downloadedContent)
93+
94+
// Delete file
95+
val deleteResult = pubnub.deleteFile(
96+
channel = channel,
97+
fileName = uploadResult.file.name,
98+
fileId = uploadResult.file.id
99+
).await()
100+
assertEquals(200, deleteResult.status)
101+
}
102+
55103
@Test
56104
fun set_metadata_ifMatch_allows_change() = runTest {
57105
// given
@@ -97,7 +145,8 @@ class ChannelMetadataTest : BaseIntegrationTest() {
97145

98146
// when
99147
val ex = assertFailsWith<PubNubException> {
100-
pubnub.setChannelMetadata(channel, status = "someNewStatus", ifMatchesEtag = pnChannelMetadata.eTag?.value).await()
148+
pubnub.setChannelMetadata(channel, status = "someNewStatus", ifMatchesEtag = pnChannelMetadata.eTag?.value)
149+
.await()
101150
}
102151

103152
// then
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
11
package com.pubnub.kmp
22

33
internal actual val PLATFORM: String = "JS"
4+
5+
internal actual fun stringToUploadable(content: String, contentType: String?): Uploadable =
6+
UploadableImpl(content)
7+
8+
internal actual fun readAllBytes(stream: Any?): ByteArray {
9+
TODO("Not yet implemented")
10+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,13 @@
11
package com.pubnub.kmp
22

3+
import java.io.ByteArrayInputStream
4+
import java.io.InputStream
5+
36
internal actual val PLATFORM: String = "JVM"
7+
8+
internal actual fun stringToUploadable(content: String, contentType: String?): Uploadable =
9+
ByteArrayInputStream(content.toByteArray())
10+
11+
internal actual fun readAllBytes(stream: Any?): ByteArray {
12+
return (stream as InputStream).readBytes()
13+
}

0 commit comments

Comments
 (0)