diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/APIChatMessageConverter.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/APIChatMessageConverter.kt new file mode 100644 index 00000000..96119075 --- /dev/null +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/APIChatMessageConverter.kt @@ -0,0 +1,15 @@ +// Contains helper functions to convert from api ChatMessage entity to domain entity +@file:JvmName("APIChatMessageConverter") +package org.moire.ultrasonic.data + +import org.moire.ultrasonic.domain.ChatMessage +import org.moire.ultrasonic.api.subsonic.models.ChatMessage as ApiChatMessage + +fun ApiChatMessage.toDomainEntity(): ChatMessage = ChatMessage().apply { + username = this@toDomainEntity.username + time = this@toDomainEntity.time + message = this@toDomainEntity.message +} + +fun List.toDomainEntitiesList(): List = this + .map { it.toDomainEntity() } diff --git a/ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIChatMessageConverterTest.kt b/ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIChatMessageConverterTest.kt new file mode 100644 index 00000000..fc213ca5 --- /dev/null +++ b/ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIChatMessageConverterTest.kt @@ -0,0 +1,40 @@ +@file:Suppress("IllegalIdentifier") + +package org.moire.ultrasonic.data + +import org.amshove.kluent.`should equal to` +import org.amshove.kluent.`should equal` +import org.junit.Test +import org.moire.ultrasonic.api.subsonic.models.ChatMessage + +/** + * Unit test for functions converting api [ChatMessage] to domain entity. + */ +class APIChatMessageConverterTest { + @Test + fun `Should convert entity`() { + val entity = ChatMessage("Woohoo", 553434L, "Wow") + + val domainEntity = entity.toDomainEntity() + + with(domainEntity) { + username `should equal to` entity.username + time `should equal to` entity.time + message `should equal to` entity.message + } + } + + @Test + fun `Should convert list of entities`() { + val entitiesList = listOf(ChatMessage("AAA"), ChatMessage("BBB")) + + val domainEntitiesList = entitiesList.toDomainEntitiesList() + + with(domainEntitiesList) { + size `should equal to` entitiesList.size + forEachIndexed { index, chatMessage -> + chatMessage `should equal` entitiesList[index].toDomainEntity() + } + } + } +}