Replace type of id property to String.

Some api implementations are using UUID string for ids.

Signed-off-by: Yahor Berdnikau <egorr.berd@gmail.com>
This commit is contained in:
Yahor Berdnikau 2017-12-12 21:08:49 +01:00
parent 46cf8a71c2
commit 66d7973c5a
5 changed files with 18 additions and 31 deletions

View File

@ -17,7 +17,9 @@ class SubsonicApiGetMusicFoldersTest : SubsonicAPIClientTest() {
assertResponseSuccessful(response)
with(response.body()) {
assertBaseResponseOk()
musicFolders `should equal` listOf(MusicFolder(0, "Music"), MusicFolder(2, "Test"))
musicFolders `should equal` listOf(
MusicFolder("0", "Music"),
MusicFolder("2", "Test"))
}
}

View File

@ -1,3 +1,3 @@
package org.moire.ultrasonic.api.subsonic.models
data class MusicFolder(val id: Long = -1, val name: String = "")
data class MusicFolder(val id: String = "", val name: String = "")

View File

@ -1,33 +1,18 @@
package org.moire.ultrasonic.api.subsonic.response
import com.fasterxml.jackson.core.JsonParser
import com.fasterxml.jackson.core.JsonToken
import com.fasterxml.jackson.databind.DeserializationContext
import com.fasterxml.jackson.databind.JsonDeserializer
import com.fasterxml.jackson.databind.JsonMappingException
import com.fasterxml.jackson.databind.annotation.JsonDeserialize
import com.fasterxml.jackson.annotation.JsonProperty
import org.moire.ultrasonic.api.subsonic.SubsonicAPIVersions
import org.moire.ultrasonic.api.subsonic.SubsonicError
import org.moire.ultrasonic.api.subsonic.models.MusicFolder
class MusicFoldersResponse(status: Status,
version: SubsonicAPIVersions,
error: SubsonicError?,
@JsonDeserialize(using = MusicFoldersDeserializer::class)
val musicFolders: List<MusicFolder> = emptyList()) :
error: SubsonicError?) :
SubsonicResponse(status, version, error) {
companion object {
class MusicFoldersDeserializer() : JsonDeserializer<List<MusicFolder>>() {
override fun deserialize(p: JsonParser, ctxt: DeserializationContext?): List<MusicFolder> {
p.nextToken()
if (p.currentName == "musicFolder" && p.nextToken() == JsonToken.START_ARRAY) {
val mfJavaType = ctxt!!.typeFactory
.constructCollectionType(List::class.java, MusicFolder::class.java)
return ctxt.readValue(p, mfJavaType)
}
@JsonProperty("musicFolders") private val wrapper = MusicFoldersWrapper()
throw JsonMappingException(p, "Failed to parse music folders list")
}
}
}
val musicFolders get() = wrapper.musicFolders
}
internal class MusicFoldersWrapper(
@JsonProperty("musicFolder") val musicFolders: List<MusicFolder> = emptyList())

View File

@ -6,7 +6,7 @@ package org.moire.ultrasonic.data
import org.moire.ultrasonic.domain.MusicFolder
import org.moire.ultrasonic.api.subsonic.models.MusicFolder as APIMusicFolder
fun APIMusicFolder.toDomainEntity(): MusicFolder = MusicFolder(this.id.toString(), this.name)
fun APIMusicFolder.toDomainEntity(): MusicFolder = MusicFolder(this.id, this.name)
fun List<APIMusicFolder>.toDomainEntityList(): List<MusicFolder>
= this.map { it.toDomainEntity() }

View File

@ -12,27 +12,27 @@ import org.moire.ultrasonic.api.subsonic.models.MusicFolder
class APIMusicFolderConverterTest {
@Test
fun `Should convert MusicFolder entity`() {
val entity = MusicFolder(id = 10, name = "some-name")
val entity = MusicFolder(id = "10", name = "some-name")
val convertedEntity = entity.toDomainEntity()
convertedEntity.name `should equal to` entity.name
convertedEntity.id `should equal to` entity.id.toString()
convertedEntity.id `should equal to` entity.id
}
@Test
fun `Should convert list of MusicFolder entities`() {
val entityList = listOf(
MusicFolder(id = 3, name = "some-name-3"),
MusicFolder(id = 4, name = "some-name-4"))
MusicFolder(id = "3", name = "some-name-3"),
MusicFolder(id = "4", name = "some-name-4"))
val convertedList = entityList.toDomainEntityList()
with(convertedList) {
size `should equal to` entityList.size
this[0].id `should equal to` entityList[0].id.toString()
this[0].id `should equal to` entityList[0].id
this[0].name `should equal to` entityList[0].name
this[1].id `should equal to` entityList[1].id.toString()
this[1].id `should equal to` entityList[1].id
this[1].name `should equal to` entityList[1].name
}
}