@@ -2,12 +2,21 @@ package com.adamratzman.spotify.priv
22
33import com.adamratzman.spotify.SpotifyClientApi
44import com.adamratzman.spotify.buildSpotifyApi
5+ import com.adamratzman.spotify.endpoints.client.ClientPlayerApi
6+ import com.adamratzman.spotify.models.CollectionUri
7+ import com.adamratzman.spotify.models.PlayHistoryContext
8+ import com.adamratzman.spotify.models.PlayableUri
59import com.adamratzman.spotify.models.SpotifyTrackUri
6- import com.adamratzman.spotify.models.Track
710import com.adamratzman.spotify.runBlockingTest
11+ import kotlinx.coroutines.delay
812import kotlin.test.Test
13+ import kotlin.test.assertEquals
14+ import kotlin.test.assertNotNull
915import kotlin.test.assertTrue
16+ import kotlin.time.ExperimentalTime
17+ import kotlin.time.measureTime
1018
19+ @ExperimentalTime
1120class ClientPlayerApiTest {
1221 lateinit var api: SpotifyClientApi
1322
@@ -37,32 +46,126 @@ class ClientPlayerApiTest {
3746 playableUrisToPlay = listOf (SpotifyTrackUri (" spotify:track:6WcinC5nKan2DMFUfjVerX" )),
3847 deviceId = device.id
3948 )
49+ delay(1000 )
4050 val getCurrentContext = suspend { api.player.getCurrentContext() }
4151 var context = getCurrentContext()
4252 assertTrue(context != null && context.isPlaying && context.track?.id == " 6WcinC5nKan2DMFUfjVerX" )
4353 api.player.pause()
4454 context = getCurrentContext()!!
4555
46- assertTrue(! context.isPlaying && context.track?.id != null )
56+ assertTrue(! context.isPlaying)
57+ assertNotNull(context.track?.id)
4758
4859 val playlist = api.playlists.getPlaylist(" 37i9dQZF1DXcBWIGoYBM5M" )!!
4960 api.player.startPlayback(
5061 collectionUri = playlist.uri
5162 )
63+ delay(1000 )
5264 context = getCurrentContext()
5365 assertTrue(context != null && context.isPlaying && context.track?.id == playlist.tracks.items.first().track!! .id)
5466 api.player.pause()
67+ }
68+ }
69+
70+ @Test
71+ fun testGetRecentlyPlayed () {
72+ runBlockingTest {
73+ if (! testPrereq()) return @runBlockingTest
74+ api.player.getRecentlyPlayed()
75+ }
76+ }
5577
78+ @Test
79+ fun testGetCurrentlyPlaying () {
80+ runBlockingTest {
81+ if (! testPrereq()) return @runBlockingTest
82+ val device = api.player.getDevices().first()
5683
84+ val trackId = " 7lPN2DXiMsVn7XUKtOW1CS"
85+ api.player.startPlayback(
86+ playableUrisToPlay = listOf (PlayableUri (" spotify:track:$trackId " )),
87+ deviceId = device.id
88+ )
89+ delay(1000 )
90+ val currentlyPlayingObjectTrack = api.player.getCurrentlyPlaying()
91+ assertNotNull(currentlyPlayingObjectTrack)
92+ assertTrue(currentlyPlayingObjectTrack.isPlaying && currentlyPlayingObjectTrack.context == null )
93+
94+ val playlistId = " 3DhwYIoAZ8mXlxiBkCuOx7"
95+ api.player.startPlayback(collectionUri = CollectionUri (" spotify:playlist:3DhwYIoAZ8mXlxiBkCuOx7" ))
96+ delay(1000 )
97+ val currentlyPlayingObjectPlaylist = api.player.getCurrentlyPlaying()
98+ assertNotNull(currentlyPlayingObjectPlaylist)
99+ assertTrue(currentlyPlayingObjectPlaylist.isPlaying)
100+ assertEquals(playlistId, currentlyPlayingObjectPlaylist.context?.uri?.id)
101+ assertEquals(PlayHistoryContext .ContextType .PLAYLIST , currentlyPlayingObjectPlaylist.context?.type)
102+
103+ api.player.pause()
57104 }
58105 }
59106
60107 @Test
61- fun testGetRecentlyPlayed () {
108+ fun testSeek () {
62109 runBlockingTest {
63110 if (! testPrereq()) return @runBlockingTest
64111 val device = api.player.getDevices().first()
65- api.player.getRecentlyPlayed()
112+
113+ val trackId = " 7lPN2DXiMsVn7XUKtOW1CS"
114+ val track = api.tracks.getTrack(trackId)!!
115+ api.player.startPlayback(
116+ playableUrisToPlay = listOf (PlayableUri (" spotify:track:$trackId " )),
117+ deviceId = device.id
118+ )
119+ api.player.pause()
120+
121+ val skipTo = track.length / 2
122+ val delay = measureTime {
123+ api.player.seek(skipTo.toLong())
124+ api.player.resume()
125+ }.inMilliseconds
126+
127+ val waitTime = 3000
128+ delay(waitTime.toLong())
129+ assertTrue(api.player.getCurrentlyPlaying()!! .progressMs!! >= waitTime - delay)
130+ api.player.skipForward()
131+ }
132+ }
133+
134+ @Test
135+ fun testSetPlaybackOptions () {
136+ runBlockingTest {
137+ if (! testPrereq()) return @runBlockingTest
138+ val device = api.player.getDevices().first()
139+ api.player.setRepeatMode(ClientPlayerApi .PlayerRepeatState .OFF , device.id)
140+ api.player.setVolume(50 , device.id)
141+ val context = api.player.getCurrentContext()!!
142+ assertEquals(ClientPlayerApi .PlayerRepeatState .OFF , context.repeatState)
143+
144+ }
145+ }
146+
147+ @Test
148+ fun testSkipForwardBackward () {
149+ runBlockingTest {
150+ if (! testPrereq()) return @runBlockingTest
151+ val device = api.player.getDevices().first()
152+
153+ val playlist = api.playlists.getPlaylist(" 37i9dQZF1DXcBWIGoYBM5M" )!!
154+ api.player.startPlayback(
155+ collectionUri = playlist.uri,
156+ deviceId = device.id
157+ )
158+ delay(1000 )
159+
160+ api.player.skipForward()
161+ delay(500 )
162+ assertEquals(playlist.tracks[1 ].track!! .id, api.player.getCurrentlyPlaying()!! .track.id)
163+
164+ api.player.skipBehind()
165+ delay(500 )
166+ assertEquals(playlist.tracks[0 ].track!! .id, api.player.getCurrentlyPlaying()!! .track.id)
167+
168+ api.player.pause()
66169 }
67170 }
68171
0 commit comments