tgbotapi/tgbotapi.core/src/commonTest/kotlin/dev/inmo/tgbotapi/types/BotActionTests.kt

65 lines
2.3 KiB
Kotlin

package dev.inmo.tgbotapi.types
import dev.inmo.tgbotapi.TestsJsonFormat
import dev.inmo.tgbotapi.types.actions.*
import kotlinx.serialization.Serializable
import kotlin.test.Test
import kotlin.test.assertEquals
class BotActionTests {
@Serializable
data class Example(
@Serializable(BotActionSerializer::class)
val botAction: BotAction
)
private fun checkBotAction(example: Example, sourceAction: BotAction) {
assertEquals(
sourceAction.actionName,
when (example.botAction) {
TypingAction -> example.botAction.actionName
UploadPhotoAction -> example.botAction.actionName
RecordVideoAction -> example.botAction.actionName
UploadVideoAction -> example.botAction.actionName
RecordVoiceAction -> example.botAction.actionName
UploadVoiceAction -> example.botAction.actionName
UploadDocumentAction -> example.botAction.actionName
FindLocationAction -> example.botAction.actionName
RecordVideoNoteAction -> example.botAction.actionName
UploadVideoNoteAction -> example.botAction.actionName
is CustomBotAction -> example.botAction.actionName
}
)
}
private fun checkBotActionSerializeDeserialize(example: Example) {
val stringified = TestsJsonFormat.encodeToString(Example.serializer(), example)
assertEquals("{\"botAction\":\"${example.botAction.actionName}\"}", stringified)
val deserialized = TestsJsonFormat.decodeFromString(Example.serializer(), stringified)
assertEquals(example, deserialized)
checkBotAction(deserialized, example.botAction)
}
@Test
fun `BotAction_correctly_serialized_and_deserialized`() {
fun BotAction.example() = Example(this)
listOf(
TypingAction.example(),
UploadPhotoAction.example(),
RecordVideoAction.example(),
UploadVideoAction.example(),
RecordVoiceAction.example(),
UploadVoiceAction.example(),
UploadDocumentAction.example(),
FindLocationAction.example(),
RecordVideoNoteAction.example(),
UploadVideoNoteAction.example()
).forEach {
checkBotActionSerializeDeserialize(it)
}
}
}