From f7498409b972ff6d1295a55f225c6c47b6fc1f04 Mon Sep 17 00:00:00 2001 From: Yahor Berdnikau Date: Sat, 2 Sep 2017 19:40:32 +0200 Subject: [PATCH] Split new subsonic api converting extension functions into different files. Signed-off-by: Yahor Berdnikau --- .../ultrasonic/service/RESTMusicService.java | 31 +- .../ultrasonic/data/APIAlbumConverter.kt | 25 ++ .../ultrasonic/data/APIArtistConverter.kt | 18 + .../ultrasonic/data/APIIndexesConverter.kt | 16 + .../data/APIMusicDirectoryConverter.kt | 41 +++ .../data/APIMusicFolderConverter.kt | 12 + .../ultrasonic/data/APIPlaylistConverter.kt | 21 ++ .../ultrasonic/data/APISearchConverter.kt | 22 ++ .../ultrasonic/data/SubsonicAPIConverter.kt | 120 ------- .../ultrasonic/data/APIAlbumConverterTest.kt | 54 +++ .../ultrasonic/data/APIArtistConverterTest.kt | 42 +++ .../moire/ultrasonic/data/APIConverterTest.kt | 327 ------------------ .../data/APIIndexesConverterTest.kt | 40 +++ .../data/APIMusicDirectoryConverterTest.kt | 72 ++++ .../data/APIMusicFolderConverterTest.kt | 39 +++ .../data/APIPlaylistConverterTest.kt | 66 ++++ .../ultrasonic/data/APISearchConverterTest.kt | 79 +++++ 17 files changed, 566 insertions(+), 459 deletions(-) create mode 100644 ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/APIAlbumConverter.kt create mode 100644 ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/APIArtistConverter.kt create mode 100644 ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/APIIndexesConverter.kt create mode 100644 ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/APIMusicDirectoryConverter.kt create mode 100644 ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/APIMusicFolderConverter.kt create mode 100644 ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/APIPlaylistConverter.kt create mode 100644 ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/APISearchConverter.kt delete mode 100644 ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/SubsonicAPIConverter.kt create mode 100644 ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIAlbumConverterTest.kt create mode 100644 ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIArtistConverterTest.kt delete mode 100644 ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIConverterTest.kt create mode 100644 ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIIndexesConverterTest.kt create mode 100644 ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIMusicDirectoryConverterTest.kt create mode 100644 ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIMusicFolderConverterTest.kt create mode 100644 ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIPlaylistConverterTest.kt create mode 100644 ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APISearchConverterTest.kt diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/service/RESTMusicService.java b/ultrasonic/src/main/java/org/moire/ultrasonic/service/RESTMusicService.java index 26944926..13177ab0 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/service/RESTMusicService.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/service/RESTMusicService.java @@ -69,7 +69,13 @@ import org.moire.ultrasonic.api.subsonic.response.SearchResponse; import org.moire.ultrasonic.api.subsonic.response.SearchThreeResponse; import org.moire.ultrasonic.api.subsonic.response.SearchTwoResponse; import org.moire.ultrasonic.api.subsonic.response.SubsonicResponse; -import org.moire.ultrasonic.data.APIConverter; +import org.moire.ultrasonic.data.APIAlbumConverter; +import org.moire.ultrasonic.data.APIArtistConverter; +import org.moire.ultrasonic.data.APIIndexesConverter; +import org.moire.ultrasonic.data.APIMusicDirectoryConverter; +import org.moire.ultrasonic.data.APIMusicFolderConverter; +import org.moire.ultrasonic.data.APIPlaylistConverter; +import org.moire.ultrasonic.data.APISearchConverter; import org.moire.ultrasonic.domain.Bookmark; import org.moire.ultrasonic.domain.ChatMessage; import org.moire.ultrasonic.domain.Genre; @@ -234,7 +240,8 @@ public class RESTMusicService implements MusicService Response response = subsonicAPIClient.getApi().getMusicFolders().execute(); checkResponseSuccessful(response); - List musicFolders = APIConverter.toDomainEntityList(response.body().getMusicFolders()); + List musicFolders = APIMusicFolderConverter + .toDomainEntityList(response.body().getMusicFolders()); writeCachedMusicFolders(context, musicFolders); return musicFolders; } @@ -269,7 +276,7 @@ public class RESTMusicService implements MusicService .getIndexes(musicFolderId == null ? null : Long.valueOf(musicFolderId), null).execute(); checkResponseSuccessful(response); - Indexes indexes = APIConverter.toDomainEntity(response.body().getIndexes()); + Indexes indexes = APIIndexesConverter.toDomainEntity(response.body().getIndexes()); writeCachedIndexes(context, indexes, musicFolderId); return indexes; } @@ -303,7 +310,7 @@ public class RESTMusicService implements MusicService Response response = subsonicAPIClient.getApi().getArtists(null).execute(); checkResponseSuccessful(response); - Indexes indexes = APIConverter.toDomainEntity(response.body().getIndexes()); + Indexes indexes = APIIndexesConverter.toDomainEntity(response.body().getIndexes()); writeCachedArtists(context, indexes); return indexes; } @@ -370,7 +377,7 @@ public class RESTMusicService implements MusicService .getMusicDirectory(Long.valueOf(id)).execute(); checkResponseSuccessful(response); - return APIConverter.toDomainEntity(response.body().getMusicDirectory()); + return APIMusicDirectoryConverter.toDomainEntity(response.body().getMusicDirectory()); } @Override @@ -388,7 +395,7 @@ public class RESTMusicService implements MusicService .getArtist(Long.valueOf(id)).execute(); checkResponseSuccessful(response); - return APIConverter.toMusicDirectoryDomainEntity(response.body().getArtist()); + return APIArtistConverter.toMusicDirectoryDomainEntity(response.body().getArtist()); } @Override @@ -406,7 +413,7 @@ public class RESTMusicService implements MusicService .getAlbum(Long.valueOf(id)).execute(); checkResponseSuccessful(response); - return APIConverter.toMusicDirectoryDomainEntity(response.body().getAlbum()); + return APIAlbumConverter.toMusicDirectoryDomainEntity(response.body().getAlbum()); } @Override @@ -435,7 +442,7 @@ public class RESTMusicService implements MusicService criteria.getSongCount(), null, null).execute(); checkResponseSuccessful(response); - return APIConverter.toDomainEntity(response.body().getSearchResult()); + return APISearchConverter.toDomainEntity(response.body().getSearchResult()); } /** @@ -454,7 +461,7 @@ public class RESTMusicService implements MusicService criteria.getSongCount(), null).execute(); checkResponseSuccessful(response); - return APIConverter.toDomainEntity(response.body().getSearchResult()); + return APISearchConverter.toDomainEntity(response.body().getSearchResult()); } private SearchResult search3(SearchCriteria criteria, @@ -470,7 +477,7 @@ public class RESTMusicService implements MusicService criteria.getSongCount(), null).execute(); checkResponseSuccessful(response); - return APIConverter.toDomainEntity(response.body().getSearchResult()); + return APISearchConverter.toDomainEntity(response.body().getSearchResult()); } @Override @@ -487,7 +494,7 @@ public class RESTMusicService implements MusicService .getPlaylist(Long.valueOf(id)).execute(); checkResponseSuccessful(response); - MusicDirectory playlist = APIConverter + MusicDirectory playlist = APIPlaylistConverter .toMusicDirectoryDomainEntity(response.body().getPlaylist()); savePlaylist(name, context, playlist); return playlist; @@ -563,7 +570,7 @@ public class RESTMusicService implements MusicService .getPlaylists(null).execute(); checkResponseSuccessful(response); - return APIConverter.toDomainEntitiesList(response.body().getPlaylists()); + return APIPlaylistConverter.toDomainEntitiesList(response.body().getPlaylists()); } @Override diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/APIAlbumConverter.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/APIAlbumConverter.kt new file mode 100644 index 00000000..c9fb3bef --- /dev/null +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/APIAlbumConverter.kt @@ -0,0 +1,25 @@ +// Converts Album entity from [org.moire.ultrasonic.api.subsonic.SubsonicAPIClient] +// to app domain entities. +@file:JvmName("APIAlbumConverter") +package org.moire.ultrasonic.data + +import org.moire.ultrasonic.api.subsonic.models.Album +import org.moire.ultrasonic.domain.MusicDirectory + +fun Album.toDomainEntity(): MusicDirectory.Entry = MusicDirectory.Entry().apply { + id = this@toDomainEntity.id.toString() + setIsDirectory(true) + title = this@toDomainEntity.name + coverArt = this@toDomainEntity.coverArt + artist = this@toDomainEntity.artist + artistId = this@toDomainEntity.artistId.toString() + songCount = this@toDomainEntity.songCount.toLong() + duration = this@toDomainEntity.duration + created = this@toDomainEntity.created?.time + year = this@toDomainEntity.year + genre = this@toDomainEntity.genre +} + +fun Album.toMusicDirectoryDomainEntity(): MusicDirectory = MusicDirectory().apply { + addAll(this@toMusicDirectoryDomainEntity.songList.map { it.toDomainEntity() }) +} diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/APIArtistConverter.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/APIArtistConverter.kt new file mode 100644 index 00000000..9719b0c6 --- /dev/null +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/APIArtistConverter.kt @@ -0,0 +1,18 @@ +// Converts Artist entity from [org.moire.ultrasonic.api.subsonic.SubsonicAPIClient] +// to app domain entities. +@file:JvmName("APIArtistConverter") +package org.moire.ultrasonic.data + +import org.moire.ultrasonic.domain.Artist +import org.moire.ultrasonic.domain.MusicDirectory +import org.moire.ultrasonic.api.subsonic.models.Artist as APIArtist + +fun APIArtist.toDomainEntity(): Artist = Artist().apply { + id = this@toDomainEntity.id.toString() + name = this@toDomainEntity.name +} + +fun APIArtist.toMusicDirectoryDomainEntity(): MusicDirectory = MusicDirectory().apply { + name = this@toMusicDirectoryDomainEntity.name + addAll(this@toMusicDirectoryDomainEntity.albumsList.map { it.toDomainEntity() }) +} diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/APIIndexesConverter.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/APIIndexesConverter.kt new file mode 100644 index 00000000..58aa2995 --- /dev/null +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/APIIndexesConverter.kt @@ -0,0 +1,16 @@ +// Converts Indexes entity from [org.moire.ultrasonic.api.subsonic.SubsonicAPIClient] +// to app domain entities. +@file:JvmName("APIIndexesConverter") +package org.moire.ultrasonic.data + +import org.moire.ultrasonic.api.subsonic.models.Index +import org.moire.ultrasonic.domain.Artist +import org.moire.ultrasonic.domain.Indexes +import org.moire.ultrasonic.api.subsonic.models.Indexes as APIIndexes + +fun APIIndexes.toDomainEntity(): Indexes = Indexes(this.lastModified, this.ignoredArticles, + this.shortcutList.map { it.toDomainEntity() }, this.indexList.foldIndexToArtistList()) + +private fun List.foldIndexToArtistList(): List = this.fold(listOf(), { + acc, index -> acc + index.artists.map { it.toDomainEntity() } +}) diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/APIMusicDirectoryConverter.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/APIMusicDirectoryConverter.kt new file mode 100644 index 00000000..ec702d08 --- /dev/null +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/APIMusicDirectoryConverter.kt @@ -0,0 +1,41 @@ +// Converts MusicDirectory entity from [org.moire.ultrasonic.api.subsonic.SubsonicAPIClient] +// to app domain entities. +@file:JvmName("APIMusicDirectoryConverter") +package org.moire.ultrasonic.data + +import org.moire.ultrasonic.api.subsonic.models.MusicDirectoryChild +import org.moire.ultrasonic.domain.MusicDirectory +import org.moire.ultrasonic.api.subsonic.models.MusicDirectory as APIMusicDirectory + +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 + size = this@toDomainEntity.size + duration = this@toDomainEntity.duration + bitRate = this@toDomainEntity.bitRate + path = this@toDomainEntity.path + setIsVideo(this@toDomainEntity.isVideo) + created = 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/main/kotlin/org/moire/ultrasonic/data/APIMusicFolderConverter.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/APIMusicFolderConverter.kt new file mode 100644 index 00000000..fb967263 --- /dev/null +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/APIMusicFolderConverter.kt @@ -0,0 +1,12 @@ +// Converts MusicFolder entity from [org.moire.ultrasonic.api.subsonic.SubsonicAPIClient] +// to app domain entities. +@file:JvmName("APIMusicFolderConverter") +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 List.toDomainEntityList(): List + = this.map { it.toDomainEntity() } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/APIPlaylistConverter.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/APIPlaylistConverter.kt new file mode 100644 index 00000000..1dfc0efb --- /dev/null +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/APIPlaylistConverter.kt @@ -0,0 +1,21 @@ +// Converts Playlist entity from [org.moire.ultrasonic.api.subsonic.SubsonicAPIClient] +// to app domain entities. +@file:JvmName("APIPlaylistConverter") +package org.moire.ultrasonic.data + +import org.moire.ultrasonic.domain.MusicDirectory +import org.moire.ultrasonic.domain.Playlist +import java.text.SimpleDateFormat +import org.moire.ultrasonic.api.subsonic.models.Playlist as APIPlaylist + +fun APIPlaylist.toMusicDirectoryDomainEntity(): MusicDirectory = MusicDirectory().apply { + name = this@toMusicDirectoryDomainEntity.name + addAll(this@toMusicDirectoryDomainEntity.entriesList.map { it.toDomainEntity() }) +} + +fun APIPlaylist.toDomainEntity(): Playlist = Playlist(this.id.toString(), this.name, this.owner, + this.comment, this.songCount.toString(), + this.created?.let { SimpleDateFormat.getDateTimeInstance().format(it.time) }, + public.toString()) + +fun List.toDomainEntitiesList(): List = this.map { it.toDomainEntity() } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/APISearchConverter.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/APISearchConverter.kt new file mode 100644 index 00000000..7a1dafc0 --- /dev/null +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/APISearchConverter.kt @@ -0,0 +1,22 @@ +// Converts SearchResult entities from [org.moire.ultrasonic.api.subsonic.SubsonicAPIClient] +// to app domain entities. +@file:JvmName("APISearchConverter") +package org.moire.ultrasonic.data + +import org.moire.ultrasonic.api.subsonic.models.SearchThreeResult +import org.moire.ultrasonic.api.subsonic.models.SearchTwoResult +import org.moire.ultrasonic.domain.SearchResult +import org.moire.ultrasonic.api.subsonic.models.SearchResult as APISearchResult + +fun APISearchResult.toDomainEntity(): SearchResult = SearchResult(emptyList(), emptyList(), + this.matchList.map { it.toDomainEntity() }) + +fun SearchTwoResult.toDomainEntity(): SearchResult = SearchResult( + this.artistList.map { it.toDomainEntity() }, + this.albumList.map { it.toDomainEntity() }, + this.songList.map { it.toDomainEntity() }) + +fun SearchThreeResult.toDomainEntity(): SearchResult = SearchResult( + this.artistList.map { it.toDomainEntity() }, + this.albumList.map { it.toDomainEntity() }, + this.songList.map { it.toDomainEntity() }) diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/SubsonicAPIConverter.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/SubsonicAPIConverter.kt deleted file mode 100644 index 3454e9ba..00000000 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/SubsonicAPIConverter.kt +++ /dev/null @@ -1,120 +0,0 @@ -// Converts entities from [org.moire.ultrasonic.api.subsonic.SubsonicAPIClient] to app domain entities. -@file:JvmName("APIConverter") -package org.moire.ultrasonic.data - -import org.moire.ultrasonic.api.subsonic.models.Album -import org.moire.ultrasonic.api.subsonic.models.Index -import org.moire.ultrasonic.api.subsonic.models.MusicDirectoryChild -import org.moire.ultrasonic.api.subsonic.models.SearchThreeResult -import org.moire.ultrasonic.api.subsonic.models.SearchTwoResult -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.domain.Playlist -import org.moire.ultrasonic.domain.SearchResult -import java.text.SimpleDateFormat -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 -import org.moire.ultrasonic.api.subsonic.models.Playlist as APIPlaylist -import org.moire.ultrasonic.api.subsonic.models.SearchResult as APISearchResult - -fun APIMusicFolder.toDomainEntity(): MusicFolder = MusicFolder(this.id.toString(), this.name) - -fun List.toDomainEntityList(): List - = this.map { it.toDomainEntity() } - -fun APIIndexes.toDomainEntity(): Indexes = Indexes(this.lastModified, this.ignoredArticles, - this.shortcutList.map { it.toDomainEntity() }, this.indexList.foldIndexToArtistList()) - -private fun List.foldIndexToArtistList(): List = this.fold(listOf(), { - acc, index -> acc + index.artists.map { it.toDomainEntity() } -}) - -fun APIArtist.toDomainEntity(): Artist = Artist().apply { - id = this@toDomainEntity.id.toString() - name = this@toDomainEntity.name -} - -fun APIArtist.toMusicDirectoryDomainEntity(): MusicDirectory = MusicDirectory().apply { - name = this@toMusicDirectoryDomainEntity.name - addAll(this@toMusicDirectoryDomainEntity.albumsList.map { it.toDomainEntity() }) -} - -fun Album.toDomainEntity(): MusicDirectory.Entry = MusicDirectory.Entry().apply { - id = this@toDomainEntity.id.toString() - setIsDirectory(true) - title = this@toDomainEntity.name - coverArt = this@toDomainEntity.coverArt - artist = this@toDomainEntity.artist - artistId = this@toDomainEntity.artistId.toString() - songCount = this@toDomainEntity.songCount.toLong() - duration = this@toDomainEntity.duration - created = this@toDomainEntity.created?.time - year = this@toDomainEntity.year - genre = this@toDomainEntity.genre -} - -fun Album.toMusicDirectoryDomainEntity(): MusicDirectory = MusicDirectory().apply { - addAll(this@toMusicDirectoryDomainEntity.songList.map { it.toDomainEntity() }) -} - -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 - size = this@toDomainEntity.size - duration = this@toDomainEntity.duration - bitRate = this@toDomainEntity.bitRate - path = this@toDomainEntity.path - setIsVideo(this@toDomainEntity.isVideo) - created = 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() }) -} - -fun APISearchResult.toDomainEntity(): SearchResult = SearchResult(emptyList(), emptyList(), - this.matchList.map { it.toDomainEntity() }) - -fun SearchTwoResult.toDomainEntity(): SearchResult = SearchResult( - this.artistList.map { it.toDomainEntity() }, - this.albumList.map { it.toDomainEntity() }, - this.songList.map { it.toDomainEntity() }) - -fun SearchThreeResult.toDomainEntity(): SearchResult = SearchResult( - this.artistList.map { it.toDomainEntity() }, - this.albumList.map { it.toDomainEntity() }, - this.songList.map { it.toDomainEntity() }) - -fun APIPlaylist.toMusicDirectoryDomainEntity(): MusicDirectory = MusicDirectory().apply { - name = this@toMusicDirectoryDomainEntity.name - addAll(this@toMusicDirectoryDomainEntity.entriesList.map { it.toDomainEntity() }) -} - -fun APIPlaylist.toDomainEntity(): Playlist = Playlist(this.id.toString(), this.name, this.owner, - this.comment, this.songCount.toString(), - this.created?.let { SimpleDateFormat.getDateTimeInstance().format(it.time) }, - public.toString()) - -fun List.toDomainEntitiesList(): List = this.map { it.toDomainEntity() } diff --git a/ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIAlbumConverterTest.kt b/ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIAlbumConverterTest.kt new file mode 100644 index 00000000..4ab75e2a --- /dev/null +++ b/ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIAlbumConverterTest.kt @@ -0,0 +1,54 @@ +@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.Album +import org.moire.ultrasonic.api.subsonic.models.MusicDirectoryChild +import java.util.Calendar + +/** + * Unit test for extension functions in [APIAlbumConverter.kt] file. + */ +class APIAlbumConverterTest { + @Test + fun `Should convert Album to domain entity`() { + val entity = Album(id = 387L, name = "some-name", coverArt = "asdas", artist = "some-artist", + artistId = 390L, songCount = 12, duration = 841, created = Calendar.getInstance(), + year = 2017, genre = "some-genre") + + val convertedEntity = entity.toDomainEntity() + + with(convertedEntity) { + id `should equal to` entity.id.toString() + title `should equal to` entity.name + isDirectory `should equal to` true + coverArt `should equal to` entity.coverArt + artist `should equal to` entity.artist + artistId `should equal to` entity.artistId.toString() + songCount `should equal to` entity.songCount.toLong() + duration `should equal to` entity.duration + created `should equal` entity.created?.time + year `should equal to` entity.year + genre `should equal to` entity.genre + } + } + + @Test + fun `Should convert to MusicDirectory domain entity`() { + val entity = Album(id = 101L, name = "some-album", artist = "some-artist", artistId = 54L, + coverArt = "some-id", songCount = 10, duration = 456, + created = Calendar.getInstance(), year = 2022, genre = "Hard Rock", + songList = listOf(MusicDirectoryChild())) + + val convertedEntity = entity.toMusicDirectoryDomainEntity() + + with(convertedEntity) { + name `should equal` null + children.size `should equal to` entity.songList.size + children[0] `should equal` entity.songList[0].toDomainEntity() + } + } +} diff --git a/ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIArtistConverterTest.kt b/ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIArtistConverterTest.kt new file mode 100644 index 00000000..3eae741b --- /dev/null +++ b/ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIArtistConverterTest.kt @@ -0,0 +1,42 @@ +@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.Album +import org.moire.ultrasonic.api.subsonic.models.Artist +import java.util.Calendar + +/** + * Unit test for extension functions in [APIArtistConverter.kt] file. + */ +class APIArtistConverterTest { + @Test + fun `Should convert artist entity`() { + val entity = Artist(id = 10, name = "artist-name", starred = Calendar.getInstance()) + + val convertedEntity = entity.toDomainEntity() + + with(convertedEntity) { + id `should equal to` entity.id.toString() + name `should equal to` entity.name + } + } + + @Test + fun `Should convert Artist entity to domain MusicDirectory entity`() { + val entity = Artist(id = 101L, name = "artist-name", coverArt = "some-art", albumCount = 10, + albumsList = listOf(Album(id = 562L, name = "some-name", coverArt = "zzz", + artist = "artist-name", artistId = 256L, songCount = 10, duration = 345, + created = Calendar.getInstance(), year = 2011, genre = "Math Rock"))) + + val convertedEntity = entity.toMusicDirectoryDomainEntity() + + with(convertedEntity) { + name `should equal to` entity.name + children `should equal` entity.albumsList.map { it.toDomainEntity() }.toMutableList() + } + } +} diff --git a/ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIConverterTest.kt b/ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIConverterTest.kt deleted file mode 100644 index 4b7584f0..00000000 --- a/ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIConverterTest.kt +++ /dev/null @@ -1,327 +0,0 @@ -@file:Suppress("IllegalIdentifier") - -package org.moire.ultrasonic.data - -import org.amshove.kluent.`should equal to` -import org.amshove.kluent.`should equal` -import org.amshove.kluent.`should not equal` -import org.junit.Test -import org.moire.ultrasonic.api.subsonic.models.Album -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 org.moire.ultrasonic.api.subsonic.models.Playlist -import org.moire.ultrasonic.api.subsonic.models.SearchResult -import org.moire.ultrasonic.api.subsonic.models.SearchThreeResult -import org.moire.ultrasonic.api.subsonic.models.SearchTwoResult -import java.text.SimpleDateFormat -import java.util.Calendar - -/** - * Unit test for functions in SubsonicAPIConverter file. - * - * @author Yahor Berdnikau - */ -@Suppress("TooManyFunctions", "LargeClass") -class APIConverterTest { - @Test - fun `Should convert MusicFolder entity`() { - val entity = createMusicFolder(10, "some-name") - - val convertedEntity = entity.toDomainEntity() - - convertedEntity.name `should equal to` entity.name - convertedEntity.id `should equal to` entity.id.toString() - } - - @Test - fun `Should convert list of MusicFolder entities`() { - val entityList = listOf( - createMusicFolder(3, "some-name-3"), - createMusicFolder(4, "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].name `should equal to` entityList[0].name - this[1].id `should equal to` entityList[1].id.toString() - this[1].name `should equal to` entityList[1].name - } - } - - @Test - fun `Should convert artist entity`() { - val entity = createArtist(10, "artist-name", Calendar.getInstance()) - - val convertedEntity = entity.toDomainEntity() - - with(convertedEntity) { - id `should equal to` entity.id.toString() - name `should equal to` entity.name - } - } - - @Test - fun `Should convert Indexes entity`() { - val artistsA = listOf(createArtist(4, "AC/DC"), createArtist(45, "ABBA")) - val artistsT = listOf(createArtist(10, "Taproot"), createArtist(12, "Teebee")) - val entity = createIndexes(154, "Le Tre Ze", listOf( - createIndex("A", artistsA), - createIndex("T", artistsT) - ), artistsA) - - val convertedEntity = entity.toDomainEntity() - - val expectedArtists = (artistsA + artistsT).map { it.toDomainEntity() }.toMutableList() - with(convertedEntity) { - lastModified `should equal to` entity.lastModified - ignoredArticles `should equal to` entity.ignoredArticles - artists.size `should equal to` expectedArtists.size - artists `should equal` expectedArtists - shortcuts `should equal` artistsA.map { it.toDomainEntity() }.toMutableList() - } - } - - @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 = "952", 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 - 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 - } - } - - @Test - fun `Should convert Artist entity to domain MusicDirectory entity`() { - val entity = Artist(id = 101L, name = "artist-name", coverArt = "some-art", albumCount = 10, - albumsList = listOf(Album(id = 562L, name = "some-name", coverArt = "zzz", - artist = "artist-name", artistId = 256L, songCount = 10, duration = 345, - created = Calendar.getInstance(), year = 2011, genre = "Math Rock"))) - - val convertedEntity = entity.toMusicDirectoryDomainEntity() - - with(convertedEntity) { - name `should equal to` entity.name - children `should equal` entity.albumsList.map { it.toDomainEntity() }.toMutableList() - } - } - - @Test - fun `Should convert Album to domain entity`() { - val entity = Album(id = 387L, name = "some-name", coverArt = "asdas", artist = "some-artist", - artistId = 390L, songCount = 12, duration = 841, created = Calendar.getInstance(), - year = 2017, genre = "some-genre") - - val convertedEntity = entity.toDomainEntity() - - with(convertedEntity) { - id `should equal to` entity.id.toString() - title `should equal to` entity.name - isDirectory `should equal to` true - coverArt `should equal to` entity.coverArt - artist `should equal to` entity.artist - artistId `should equal to` entity.artistId.toString() - songCount `should equal to` entity.songCount.toLong() - duration `should equal to` entity.duration - created `should equal` entity.created?.time - year `should equal to` entity.year - genre `should equal to` entity.genre - } - } - - @Test - fun `Should convert to MusicDirectory domain entity`() { - val entity = Album(id = 101L, name = "some-album", artist = "some-artist", artistId = 54L, - coverArt = "some-id", songCount = 10, duration = 456, - created = Calendar.getInstance(), year = 2022, genre = "Hard Rock", - songList = listOf(MusicDirectoryChild())) - - val convertedEntity = entity.toMusicDirectoryDomainEntity() - - with(convertedEntity) { - name `should equal` null - children.size `should equal to` entity.songList.size - children[0] `should equal` entity.songList[0].toDomainEntity() - } - } - - @Test - fun `Should convert SearchResult to domain entity`() { - val entity = SearchResult(offset = 10, totalHits = 3, matchList = listOf( - MusicDirectoryChild(id = 101L) - )) - - val convertedEntity = entity.toDomainEntity() - - with(convertedEntity) { - albums `should not equal` null - albums.size `should equal to` 0 - artists `should not equal` null - artists.size `should equal to` 0 - songs.size `should equal to` entity.matchList.size - songs[0] `should equal` entity.matchList[0].toDomainEntity() - } - } - - @Test - fun `Should convert SearchTwoResult to domain entity`() { - val entity = SearchTwoResult(listOf( - Artist(id = 82, name = "great-artist-name") - ), listOf( - MusicDirectoryChild(id = 762, artist = "bzz") - ), listOf( - MusicDirectoryChild(id = 9118, parent = 112) - )) - - val convertedEntity = entity.toDomainEntity() - - with(convertedEntity) { - artists.size `should equal to` entity.artistList.size - artists[0] `should equal` entity.artistList[0].toDomainEntity() - albums.size `should equal to` entity.albumList.size - albums[0] `should equal` entity.albumList[0].toDomainEntity() - songs.size `should equal to` entity.songList.size - songs[0] `should equal` entity.songList[0].toDomainEntity() - } - } - - @Test - fun `Should convert SearchThreeResult to domain entity`() { - val entity = SearchThreeResult( - artistList = listOf(Artist(id = 612, name = "artist1")), - albumList = listOf(Album(id = 221, name = "album1")), - songList = listOf(MusicDirectoryChild(id = 7123, title = "song1")) - ) - - val convertedEntity = entity.toDomainEntity() - - with(convertedEntity) { - artists.size `should equal to` entity.artistList.size - artists[0] `should equal` entity.artistList[0].toDomainEntity() - albums.size `should equal to` entity.albumList.size - albums[0] `should equal` entity.albumList[0].toDomainEntity() - songs.size `should equal to` entity.songList.size - songs[0] `should equal` entity.songList[0].toDomainEntity() - } - } - - @Test - fun `Should convert Playlist to MusicDirectory domain entity`() { - val entity = Playlist(name = "some-playlist-name", entriesList = listOf( - MusicDirectoryChild(id = 10L, parent = 1393), - MusicDirectoryChild(id = 11L, parent = 1393) - )) - - val convertedEntity = entity.toMusicDirectoryDomainEntity() - - with(convertedEntity) { - name `should equal to` entity.name - children.size `should equal to` entity.entriesList.size - children[0] `should equal` entity.entriesList[0].toDomainEntity() - children[1] `should equal` entity.entriesList[1].toDomainEntity() - } - } - - @Test - fun `Should convert playlist to domain entity`() { - val entity = Playlist(id = 634, name = "some-name", owner = "some-owner", - comment = "some-comment", public = false, songCount = 256, duration = 1150, - created = Calendar.getInstance(), changed = Calendar.getInstance(), - coverArt = "some-art") - - val convertedEntity = entity.toDomainEntity() - - with(convertedEntity) { - id `should equal to` entity.id.toString() - name `should equal to` entity.name - comment `should equal to` entity.comment - owner `should equal to` entity.owner - public `should equal to` entity.public - songCount `should equal to` entity.songCount.toString() - created `should equal to` SimpleDateFormat.getDateTimeInstance() - .format(entity.created?.time) - } - } - - @Test - fun `Should convert list of playlists to list of domain entities`() { - val entitiesList = listOf(Playlist(id = 23, name = "some-name", songCount = 10)) - - val convertedList = entitiesList.toDomainEntitiesList() - - with(convertedList) { - size `should equal to` entitiesList.size - this[0] `should equal` entitiesList[0].toDomainEntity() - } - } - - private fun createMusicFolder(id: Long = 0, name: String = ""): MusicFolder = - MusicFolder(id, name) - - private fun createArtist(id: Long = -1, name: String = "", starred: Calendar? = null): Artist - = Artist(id = id, name = name, starred = starred) - - private fun createIndex(name: String = "", artistList: List = emptyList()): Index - = Index(name, artistList) - - private fun createIndexes( - lastModified: Long = 0, - ignoredArticles: String, - indexList: List = emptyList(), - shortcuts: List = emptyList()): Indexes - = Indexes(lastModified, ignoredArticles, indexList, shortcuts) -} diff --git a/ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIIndexesConverterTest.kt b/ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIIndexesConverterTest.kt new file mode 100644 index 00000000..44eea513 --- /dev/null +++ b/ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIIndexesConverterTest.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.Artist +import org.moire.ultrasonic.api.subsonic.models.Index +import org.moire.ultrasonic.api.subsonic.models.Indexes + +/** + * Unit tests for extension functions in [APIIndexesConverter.kt]. + */ +class APIIndexesConverterTest { + @Test + fun `Should convert Indexes entity`() { + val artistsA = listOf( + Artist(id =4, name = "AC/DC"), + Artist(id =45, name = "ABBA")) + val artistsT = listOf( + Artist(id = 10, name = "Taproot"), + Artist(id = 12, name = "Teebee")) + val entity = Indexes(lastModified = 154, ignoredArticles = "Le Tre Ze", indexList = listOf( + Index(name = "A", artists = artistsA), + Index(name = "T", artists = artistsT) + ), shortcutList = artistsA) + + val convertedEntity = entity.toDomainEntity() + + val expectedArtists = (artistsA + artistsT).map { it.toDomainEntity() }.toMutableList() + with(convertedEntity) { + lastModified `should equal to` entity.lastModified + ignoredArticles `should equal to` entity.ignoredArticles + artists.size `should equal to` expectedArtists.size + artists `should equal` expectedArtists + shortcuts `should equal` artistsA.map { it.toDomainEntity() }.toMutableList() + } + } +} diff --git a/ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIMusicDirectoryConverterTest.kt b/ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIMusicDirectoryConverterTest.kt new file mode 100644 index 00000000..52d53810 --- /dev/null +++ b/ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIMusicDirectoryConverterTest.kt @@ -0,0 +1,72 @@ +@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.MusicDirectory +import org.moire.ultrasonic.api.subsonic.models.MusicDirectoryChild +import java.util.Calendar + +/** + * Unit test for extension functions in [APIMusicDirectoryConverter.kt] file. + */ +class APIMusicDirectoryConverterTest { + @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 = "952", 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 + 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 + } + } +} diff --git a/ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIMusicFolderConverterTest.kt b/ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIMusicFolderConverterTest.kt new file mode 100644 index 00000000..ef70a69d --- /dev/null +++ b/ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIMusicFolderConverterTest.kt @@ -0,0 +1,39 @@ +@file:Suppress("IllegalIdentifier") + +package org.moire.ultrasonic.data + +import org.amshove.kluent.`should equal to` +import org.junit.Test +import org.moire.ultrasonic.api.subsonic.models.MusicFolder + +/** + * Unit test for extension functions in file APIMusicFolderConverter.kt. + */ +class APIMusicFolderConverterTest { + @Test + fun `Should convert MusicFolder entity`() { + 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() + } + + @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")) + + val convertedList = entityList.toDomainEntityList() + + with(convertedList) { + size `should equal to` entityList.size + this[0].id `should equal to` entityList[0].id.toString() + this[0].name `should equal to` entityList[0].name + this[1].id `should equal to` entityList[1].id.toString() + this[1].name `should equal to` entityList[1].name + } + } +} diff --git a/ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIPlaylistConverterTest.kt b/ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIPlaylistConverterTest.kt new file mode 100644 index 00000000..e04fc01a --- /dev/null +++ b/ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIPlaylistConverterTest.kt @@ -0,0 +1,66 @@ +@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.MusicDirectoryChild +import org.moire.ultrasonic.api.subsonic.models.Playlist +import java.text.SimpleDateFormat +import java.util.Calendar + +/** + * Unit test for extension functions in [APIPlaylistConverter.kt] file. + */ +class APIPlaylistConverterTest { + @Test + fun `Should convert Playlist to MusicDirectory domain entity`() { + val entity = Playlist(name = "some-playlist-name", entriesList = listOf( + MusicDirectoryChild(id = 10L, parent = 1393), + MusicDirectoryChild(id = 11L, parent = 1393) + )) + + val convertedEntity = entity.toMusicDirectoryDomainEntity() + + with(convertedEntity) { + name `should equal to` entity.name + children.size `should equal to` entity.entriesList.size + children[0] `should equal` entity.entriesList[0].toDomainEntity() + children[1] `should equal` entity.entriesList[1].toDomainEntity() + } + } + + @Test + fun `Should convert playlist to domain entity`() { + val entity = Playlist(id = 634, name = "some-name", owner = "some-owner", + comment = "some-comment", public = false, songCount = 256, duration = 1150, + created = Calendar.getInstance(), changed = Calendar.getInstance(), + coverArt = "some-art") + + val convertedEntity = entity.toDomainEntity() + + with(convertedEntity) { + id `should equal to` entity.id.toString() + name `should equal to` entity.name + comment `should equal to` entity.comment + owner `should equal to` entity.owner + public `should equal to` entity.public + songCount `should equal to` entity.songCount.toString() + created `should equal to` SimpleDateFormat.getDateTimeInstance() + .format(entity.created?.time) + } + } + + @Test + fun `Should convert list of playlists to list of domain entities`() { + val entitiesList = listOf(Playlist(id = 23, name = "some-name", songCount = 10)) + + val convertedList = entitiesList.toDomainEntitiesList() + + with(convertedList) { + size `should equal to` entitiesList.size + this[0] `should equal` entitiesList[0].toDomainEntity() + } + } +} diff --git a/ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APISearchConverterTest.kt b/ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APISearchConverterTest.kt new file mode 100644 index 00000000..218cd0b1 --- /dev/null +++ b/ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APISearchConverterTest.kt @@ -0,0 +1,79 @@ +@file:Suppress("IllegalIdentifier") + +package org.moire.ultrasonic.data + +import org.amshove.kluent.`should equal to` +import org.amshove.kluent.`should equal` +import org.amshove.kluent.`should not equal` +import org.junit.Test +import org.moire.ultrasonic.api.subsonic.models.Album +import org.moire.ultrasonic.api.subsonic.models.Artist +import org.moire.ultrasonic.api.subsonic.models.MusicDirectoryChild +import org.moire.ultrasonic.api.subsonic.models.SearchResult +import org.moire.ultrasonic.api.subsonic.models.SearchThreeResult +import org.moire.ultrasonic.api.subsonic.models.SearchTwoResult + +/** + * Unit test for extension function in [APISearchConverter.kt] file. + */ +class APISearchConverterTest { + @Test + fun `Should convert SearchResult to domain entity`() { + val entity = SearchResult(offset = 10, totalHits = 3, matchList = listOf( + MusicDirectoryChild(id = 101L) + )) + + val convertedEntity = entity.toDomainEntity() + + with(convertedEntity) { + albums `should not equal` null + albums.size `should equal to` 0 + artists `should not equal` null + artists.size `should equal to` 0 + songs.size `should equal to` entity.matchList.size + songs[0] `should equal` entity.matchList[0].toDomainEntity() + } + } + + @Test + fun `Should convert SearchTwoResult to domain entity`() { + val entity = SearchTwoResult(listOf( + Artist(id = 82, name = "great-artist-name") + ), listOf( + MusicDirectoryChild(id = 762, artist = "bzz") + ), listOf( + MusicDirectoryChild(id = 9118, parent = 112) + )) + + val convertedEntity = entity.toDomainEntity() + + with(convertedEntity) { + artists.size `should equal to` entity.artistList.size + artists[0] `should equal` entity.artistList[0].toDomainEntity() + albums.size `should equal to` entity.albumList.size + albums[0] `should equal` entity.albumList[0].toDomainEntity() + songs.size `should equal to` entity.songList.size + songs[0] `should equal` entity.songList[0].toDomainEntity() + } + } + + @Test + fun `Should convert SearchThreeResult to domain entity`() { + val entity = SearchThreeResult( + artistList = listOf(Artist(id = 612, name = "artist1")), + albumList = listOf(Album(id = 221, name = "album1")), + songList = listOf(MusicDirectoryChild(id = 7123, title = "song1")) + ) + + val convertedEntity = entity.toDomainEntity() + + with(convertedEntity) { + artists.size `should equal to` entity.artistList.size + artists[0] `should equal` entity.artistList[0].toDomainEntity() + albums.size `should equal to` entity.albumList.size + albums[0] `should equal` entity.albumList[0].toDomainEntity() + songs.size `should equal to` entity.songList.size + songs[0] `should equal` entity.songList[0].toDomainEntity() + } + } +}