From 768616d14ab25e895fd5e673107c92ba05b3bf93 Mon Sep 17 00:00:00 2001 From: Yahor Berdnikau Date: Sun, 20 Aug 2017 14:53:04 +0200 Subject: [PATCH] Add converter from api MusicDirectory to domain MusicDirectory. Signed-off-by: Yahor Berdnikau --- .../ultrasonic/domain/MusicDirectory.java | 4 ++ .../ultrasonic/data/SubsonicAPIConverter.kt | 36 +++++++++++ .../moire/ultrasonic/data/APIConverterTest.kt | 59 +++++++++++++++++++ 3 files changed, 99 insertions(+) diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/domain/MusicDirectory.java b/ultrasonic/src/main/java/org/moire/ultrasonic/domain/MusicDirectory.java index 983a7a88..5d3d4786 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/domain/MusicDirectory.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/domain/MusicDirectory.java @@ -416,6 +416,10 @@ public class MusicDirectory } } + public void setCreated(Date created) { + this.created = created; + } + public int getCloseness() { return closeness; diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/SubsonicAPIConverter.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/SubsonicAPIConverter.kt index 5851e96b..4afba002 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/SubsonicAPIConverter.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/SubsonicAPIConverter.kt @@ -3,11 +3,14 @@ package org.moire.ultrasonic.data import org.moire.ultrasonic.api.subsonic.models.Index +import org.moire.ultrasonic.api.subsonic.models.MusicDirectoryChild import org.moire.ultrasonic.domain.Artist import org.moire.ultrasonic.domain.Indexes +import org.moire.ultrasonic.domain.MusicDirectory import org.moire.ultrasonic.domain.MusicFolder import org.moire.ultrasonic.api.subsonic.models.Artist as APIArtist import org.moire.ultrasonic.api.subsonic.models.Indexes as APIIndexes +import org.moire.ultrasonic.api.subsonic.models.MusicDirectory as APIMusicDirectory import org.moire.ultrasonic.api.subsonic.models.MusicFolder as APIMusicFolder fun APIMusicFolder.toDomainEntity(): MusicFolder = MusicFolder(this.id.toString(), this.name) @@ -26,3 +29,36 @@ fun APIArtist.toDomainEntity(): Artist = Artist().apply { id = this@toDomainEntity.id.toString() name = this@toDomainEntity.name } + +fun MusicDirectoryChild.toDomainEntity(): MusicDirectory.Entry = MusicDirectory.Entry().apply { + id = this@toDomainEntity.id.toString() + parent = this@toDomainEntity.parent.toString() + setIsDirectory(this@toDomainEntity.isDir) + title = this@toDomainEntity.title + album = this@toDomainEntity.album + albumId = this@toDomainEntity.albumId.toString() + artist = this@toDomainEntity.artist + artistId = this@toDomainEntity.artistId.toString() + track = this@toDomainEntity.track + year = this@toDomainEntity.year + genre = this@toDomainEntity.genre + contentType = this@toDomainEntity.contentType + suffix = this@toDomainEntity.suffix + transcodedContentType = this@toDomainEntity.transcodedContentType + transcodedSuffix = this@toDomainEntity.transcodedSuffix + coverArt = this@toDomainEntity.coverArt.toString() + size = this@toDomainEntity.size + duration = this@toDomainEntity.duration + bitRate = this@toDomainEntity.bitRate + path = this@toDomainEntity.path + setIsVideo(this@toDomainEntity.isVideo) + setCreated(this@toDomainEntity.created?.time) + starred = this@toDomainEntity.starred != null + discNumber = this@toDomainEntity.discNumber + type = this@toDomainEntity.type +} + +fun APIMusicDirectory.toDomainEntity(): MusicDirectory = MusicDirectory().apply { + name = this@toDomainEntity.name + addAll(this@toDomainEntity.childList.map { it.toDomainEntity() }) +} diff --git a/ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIConverterTest.kt b/ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIConverterTest.kt index e07feb8f..da2f2fc1 100644 --- a/ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIConverterTest.kt +++ b/ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIConverterTest.kt @@ -8,6 +8,8 @@ import org.junit.Test import org.moire.ultrasonic.api.subsonic.models.Artist import org.moire.ultrasonic.api.subsonic.models.Index import org.moire.ultrasonic.api.subsonic.models.Indexes +import org.moire.ultrasonic.api.subsonic.models.MusicDirectory +import org.moire.ultrasonic.api.subsonic.models.MusicDirectoryChild import org.moire.ultrasonic.api.subsonic.models.MusicFolder import java.util.Calendar @@ -78,6 +80,63 @@ class APIConverterTest { } } + @Test + fun `Should convert MusicDirectory entity`() { + val entity = MusicDirectory(id = 1982L, parent = 345L, name = "some-name", userRating = 3, + averageRating = 3.4f, starred = Calendar.getInstance(), playCount = 10, + childList = listOf(MusicDirectoryChild(1L), MusicDirectoryChild(2L))) + + val convertedEntity = entity.toDomainEntity() + + with(convertedEntity) { + name `should equal to` entity.name + children.size `should equal to` entity.childList.size + children `should equal` entity.childList.map { it.toDomainEntity() }.toMutableList() + } + } + + @Test + fun `Should convert MusicDirectoryChild entity`() { + val entity = MusicDirectoryChild(id = 929L, parent = 11L, title = "some-title", + album = "some-album", albumId = 231L, artist = "some-artist", artistId = 1233L, + track = 12, year = 2002, genre = "some-genre", coverArt = 952L, size = 9418123L, + contentType = "some-content-type", suffix = "some-suffix", + transcodedContentType = "some-transcoded-content-type", + transcodedSuffix = "some-transcoded-suffix", duration = 11, bitRate = 256, + path = "some-path", isDir = true, isVideo = true, playCount = 323, discNumber = 2, + created = Calendar.getInstance(), type = "some-type", starred = Calendar.getInstance()) + + val convertedEntity = entity.toDomainEntity() + + with(convertedEntity) { + id `should equal to` entity.id.toString() + parent `should equal to` entity.parent.toString() + isDirectory `should equal to` entity.isDir + title `should equal` entity.title + album `should equal` entity.album + albumId `should equal to` entity.albumId.toString() + artist `should equal to` entity.artist + artistId `should equal to` entity.artistId.toString() + track `should equal to` entity.track + year `should equal to` entity.year!! + genre `should equal to` entity.genre + contentType `should equal to` entity.contentType + suffix `should equal to` entity.suffix + transcodedContentType `should equal to` entity.transcodedContentType + transcodedSuffix `should equal to` entity.transcodedSuffix + coverArt `should equal to` entity.coverArt.toString() + size `should equal to` entity.size + duration `should equal to` entity.duration + bitRate `should equal to` entity.bitRate + path `should equal to` entity.path + isVideo `should equal to` entity.isVideo + created `should equal` entity.created?.time + starred `should equal to` (entity.starred != null) + discNumber `should equal to` entity.discNumber + type `should equal to` entity.type + } + } + private fun createMusicFolder(id: Long = 0, name: String = ""): MusicFolder = MusicFolder(id, name)