diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetVideosListTest.kt b/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetVideosListTest.kt new file mode 100644 index 00000000..c89b801e --- /dev/null +++ b/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiGetVideosListTest.kt @@ -0,0 +1,37 @@ +package org.moire.ultrasonic.api.subsonic + +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 + +/** + * Integration test for [SubsonicAPIDefinition.getVideos] call. + */ +class SubsonicApiGetVideosListTest : SubsonicAPIClientTest() { + @Test + fun `Should handle error response`() { + val response = checkErrorCallParsed(mockWebServerRule) { + client.api.getVideos().execute() + } + + response.videosList `should equal` emptyList() + } + + @Test + fun `Should handle ok response`() { + mockWebServerRule.enqueueResponse("get_videos_ok.json") + + val response = client.api.getVideos().execute() + + assertResponseSuccessful(response) + with(response.body().videosList) { + size `should equal to` 1 + this[0] `should equal` MusicDirectoryChild(id = 10402, parent = 10401, isDir = false, + title = "MVI_0512", album = "Incoming", size = 21889646, + contentType = "video/avi", suffix = "avi", transcodedContentType = "video/x-flv", + transcodedSuffix = "flv", path = "Incoming/MVI_0512.avi", isVideo = true, + playCount = 0, created = parseDate("2017-11-19T12:34:33.000Z"), type = "video") + } + } +} diff --git a/subsonic-api/src/integrationTest/resources/get_videos_ok.json b/subsonic-api/src/integrationTest/resources/get_videos_ok.json new file mode 100644 index 00000000..6b934ab6 --- /dev/null +++ b/subsonic-api/src/integrationTest/resources/get_videos_ok.json @@ -0,0 +1,25 @@ +{ + "subsonic-response" : { + "status" : "ok", + "version" : "1.15.0", + "videos" : { + "video" : [ { + "id" : "10402", + "parent" : "10401", + "isDir" : false, + "title" : "MVI_0512", + "album" : "Incoming", + "size" : 21889646, + "contentType" : "video/avi", + "suffix" : "avi", + "transcodedContentType" : "video/x-flv", + "transcodedSuffix" : "flv", + "path" : "Incoming/MVI_0512.avi", + "isVideo" : true, + "playCount" : 0, + "created" : "2017-11-19T12:34:33.000Z", + "type" : "video" + } ] + } + } +} \ No newline at end of file diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIDefinition.kt b/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIDefinition.kt index de921ba9..a91a1a43 100644 --- a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIDefinition.kt +++ b/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIDefinition.kt @@ -30,6 +30,7 @@ import org.moire.ultrasonic.api.subsonic.response.SearchThreeResponse import org.moire.ultrasonic.api.subsonic.response.SearchTwoResponse import org.moire.ultrasonic.api.subsonic.response.SharesResponse import org.moire.ultrasonic.api.subsonic.response.SubsonicResponse +import org.moire.ultrasonic.api.subsonic.response.VideosResponse import retrofit2.Call import retrofit2.http.GET import retrofit2.http.Header @@ -233,4 +234,7 @@ interface SubsonicAPIDefinition { @GET("deleteBookmark.view") fun deleteBookmark(@Query("id") id: Int): Call + + @GET("getVideos.view") + fun getVideos(): Call } diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/VideosResponse.kt b/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/VideosResponse.kt new file mode 100644 index 00000000..9ac4ff11 --- /dev/null +++ b/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/response/VideosResponse.kt @@ -0,0 +1,18 @@ +package org.moire.ultrasonic.api.subsonic.response + +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.MusicDirectoryChild + +class VideosResponse( + status: Status, + version: SubsonicAPIVersions, + error: SubsonicError?) : SubsonicResponse(status, version, error) { + @JsonProperty("videos") private val videosWrapper = VideosWrapper() + + val videosList: List get() = videosWrapper.videosList +} + +internal class VideosWrapper( + @JsonProperty("video") val videosList: List = emptyList())