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:
parent
46cf8a71c2
commit
66d7973c5a
|
@ -17,7 +17,9 @@ class SubsonicApiGetMusicFoldersTest : SubsonicAPIClientTest() {
|
||||||
assertResponseSuccessful(response)
|
assertResponseSuccessful(response)
|
||||||
with(response.body()) {
|
with(response.body()) {
|
||||||
assertBaseResponseOk()
|
assertBaseResponseOk()
|
||||||
musicFolders `should equal` listOf(MusicFolder(0, "Music"), MusicFolder(2, "Test"))
|
musicFolders `should equal` listOf(
|
||||||
|
MusicFolder("0", "Music"),
|
||||||
|
MusicFolder("2", "Test"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
package org.moire.ultrasonic.api.subsonic.models
|
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 = "")
|
||||||
|
|
|
@ -1,33 +1,18 @@
|
||||||
package org.moire.ultrasonic.api.subsonic.response
|
package org.moire.ultrasonic.api.subsonic.response
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.JsonParser
|
import com.fasterxml.jackson.annotation.JsonProperty
|
||||||
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 org.moire.ultrasonic.api.subsonic.SubsonicAPIVersions
|
import org.moire.ultrasonic.api.subsonic.SubsonicAPIVersions
|
||||||
import org.moire.ultrasonic.api.subsonic.SubsonicError
|
import org.moire.ultrasonic.api.subsonic.SubsonicError
|
||||||
import org.moire.ultrasonic.api.subsonic.models.MusicFolder
|
import org.moire.ultrasonic.api.subsonic.models.MusicFolder
|
||||||
|
|
||||||
class MusicFoldersResponse(status: Status,
|
class MusicFoldersResponse(status: Status,
|
||||||
version: SubsonicAPIVersions,
|
version: SubsonicAPIVersions,
|
||||||
error: SubsonicError?,
|
error: SubsonicError?) :
|
||||||
@JsonDeserialize(using = MusicFoldersDeserializer::class)
|
|
||||||
val musicFolders: List<MusicFolder> = emptyList()) :
|
|
||||||
SubsonicResponse(status, version, error) {
|
SubsonicResponse(status, version, error) {
|
||||||
companion object {
|
@JsonProperty("musicFolders") private val wrapper = MusicFoldersWrapper()
|
||||||
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)
|
|
||||||
}
|
|
||||||
|
|
||||||
throw JsonMappingException(p, "Failed to parse music folders list")
|
val musicFolders get() = wrapper.musicFolders
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal class MusicFoldersWrapper(
|
||||||
|
@JsonProperty("musicFolder") val musicFolders: List<MusicFolder> = emptyList())
|
||||||
|
|
|
@ -6,7 +6,7 @@ package org.moire.ultrasonic.data
|
||||||
import org.moire.ultrasonic.domain.MusicFolder
|
import org.moire.ultrasonic.domain.MusicFolder
|
||||||
import org.moire.ultrasonic.api.subsonic.models.MusicFolder as APIMusicFolder
|
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>
|
fun List<APIMusicFolder>.toDomainEntityList(): List<MusicFolder>
|
||||||
= this.map { it.toDomainEntity() }
|
= this.map { it.toDomainEntity() }
|
||||||
|
|
|
@ -12,27 +12,27 @@ import org.moire.ultrasonic.api.subsonic.models.MusicFolder
|
||||||
class APIMusicFolderConverterTest {
|
class APIMusicFolderConverterTest {
|
||||||
@Test
|
@Test
|
||||||
fun `Should convert MusicFolder entity`() {
|
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()
|
val convertedEntity = entity.toDomainEntity()
|
||||||
|
|
||||||
convertedEntity.name `should equal to` entity.name
|
convertedEntity.name `should equal to` entity.name
|
||||||
convertedEntity.id `should equal to` entity.id.toString()
|
convertedEntity.id `should equal to` entity.id
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `Should convert list of MusicFolder entities`() {
|
fun `Should convert list of MusicFolder entities`() {
|
||||||
val entityList = listOf(
|
val entityList = listOf(
|
||||||
MusicFolder(id = 3, name = "some-name-3"),
|
MusicFolder(id = "3", name = "some-name-3"),
|
||||||
MusicFolder(id = 4, name = "some-name-4"))
|
MusicFolder(id = "4", name = "some-name-4"))
|
||||||
|
|
||||||
val convertedList = entityList.toDomainEntityList()
|
val convertedList = entityList.toDomainEntityList()
|
||||||
|
|
||||||
with(convertedList) {
|
with(convertedList) {
|
||||||
size `should equal to` entityList.size
|
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[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
|
this[1].name `should equal to` entityList[1].name
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue