Skip to content

Commit 18ddc8d

Browse files
committed
change PagingObject#getAll to return PagingObjects list
add ClientLibraryAPI tests
1 parent a5c2448 commit 18ddc8d

File tree

4 files changed

+79
-17
lines changed

4 files changed

+79
-17
lines changed

src/main/kotlin/com/adamratzman/spotify/endpoints/client/ClientLibraryAPI.kt

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@ class ClientLibraryAPI(api: SpotifyAPI) : SpotifyEndpoint(api) {
3838
*
3939
* @throws BadRequestException if [id] is not found
4040
*/
41-
fun doesLibraryContain(type: LibraryType, id: String): SpotifyRestAction<Boolean> {
41+
fun contains(type: LibraryType, id: String): SpotifyRestAction<Boolean> {
4242
return toAction(Supplier {
43-
doesLibraryContain(type, ids = *arrayOf(id)).complete()[0]
43+
contains(type, ids = *arrayOf(id)).complete()[0]
4444
})
4545
}
4646

@@ -49,7 +49,7 @@ class ClientLibraryAPI(api: SpotifyAPI) : SpotifyEndpoint(api) {
4949
*
5050
* @throws BadRequestException if any of the provided ids is invalid
5151
*/
52-
fun doesLibraryContain(type: LibraryType, vararg ids: String): SpotifyRestAction<List<Boolean>> {
52+
fun contains(type: LibraryType, vararg ids: String): SpotifyRestAction<List<Boolean>> {
5353
return toAction(Supplier {
5454
get(EndpointBuilder("/me/$type/contains").with("ids", ids.joinToString(",") { it.encode() })
5555
.toString()).toObject<List<Boolean>>(api)
@@ -61,9 +61,9 @@ class ClientLibraryAPI(api: SpotifyAPI) : SpotifyEndpoint(api) {
6161
*
6262
* @throws BadRequestException if the id is invalid
6363
*/
64-
fun addToLibrary(type: LibraryType, id: String): SpotifyRestAction<Unit> {
64+
fun add(type: LibraryType, id: String): SpotifyRestAction<Unit> {
6565
return toAction(Supplier {
66-
addToLibrary(type, ids = *arrayOf(id)).complete()
66+
add(type, ids = *arrayOf(id)).complete()
6767
})
6868
}
6969

@@ -72,7 +72,7 @@ class ClientLibraryAPI(api: SpotifyAPI) : SpotifyEndpoint(api) {
7272
*
7373
* @throws BadRequestException if any of the provided ids is invalid
7474
*/
75-
fun addToLibrary(type: LibraryType, vararg ids: String): SpotifyRestAction<Unit> {
75+
fun add(type: LibraryType, vararg ids: String): SpotifyRestAction<Unit> {
7676
return toAction(Supplier {
7777
put(EndpointBuilder("/me/$type").with("ids", ids.joinToString(",") { it.encode() }).toString())
7878
Unit
@@ -84,9 +84,9 @@ class ClientLibraryAPI(api: SpotifyAPI) : SpotifyEndpoint(api) {
8484
*
8585
* @throws BadRequestException if any of the provided ids is invalid
8686
*/
87-
fun removeFromLibrary(type: LibraryType, id: String): SpotifyRestAction<Unit> {
87+
fun remove(type: LibraryType, id: String): SpotifyRestAction<Unit> {
8888
return toAction(Supplier {
89-
removeFromLibrary(type, ids = *arrayOf(id)).complete()
89+
remove(type, ids = *arrayOf(id)).complete()
9090
})
9191
}
9292

@@ -95,16 +95,16 @@ class ClientLibraryAPI(api: SpotifyAPI) : SpotifyEndpoint(api) {
9595
*
9696
* @throws BadRequestException if any of the provided ids is invalid
9797
*/
98-
fun removeFromLibrary(type: LibraryType, vararg ids: String): SpotifyRestAction<Unit> {
98+
fun remove(type: LibraryType, vararg ids: String): SpotifyRestAction<Unit> {
9999
return toAction(Supplier {
100100
delete(EndpointBuilder("/me/$type").with("ids", ids.joinToString(",") { it.encode() }).toString())
101101
Unit
102102
})
103103
}
104+
}
104105

105-
enum class LibraryType(private val value: String) {
106-
TRACK("tracks"), ALBUM("albums");
106+
enum class LibraryType(private val value: String) {
107+
TRACK("tracks"), ALBUM("albums");
107108

108-
override fun toString() = value
109-
}
109+
override fun toString() = value
110110
}

src/main/kotlin/com/adamratzman/spotify/endpoints/client/ClientPlaylistAPI.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ class ClientPlaylistAPI(api: SpotifyAPI) : PlaylistsAPI(api) {
121121
fun getClientPlaylist(id: String): SpotifyRestAction<SimplePlaylist?> {
122122
return toAction(Supplier {
123123
val playlists = getClientPlaylists().complete()
124-
playlists.items.find { it.id == id } ?: playlists.getAll<SimplePlaylist>().complete().find { it.id == id }
124+
playlists.items.find { it.id == id } ?: playlists.getAllItems<SimplePlaylist>().complete().find { it.id == id }
125125
})
126126
}
127127

src/main/kotlin/com/adamratzman/spotify/utils/Helpers.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ data class PagingObject<out T>(val href: String, val items: List<T>, val limit:
5858
}
5959
})
6060

61-
inline fun <reified T> getAll(): SpotifyRestAction<List<T>> {
61+
inline fun <reified T> getAll(): SpotifyRestAction<List<PagingObject<T>>> {
6262
this as PagingObject<T>
6363
return endpoint.toAction(
6464
Supplier {
@@ -78,7 +78,7 @@ data class PagingObject<out T>(val href: String, val items: List<T>, val limit:
7878
nxt = nxt.next?.let { nxt?.getNext<T>()?.complete() }
7979
}
8080
// we don't need to reverse here, as it's in order
81-
pagingObjects.map { it.items }.flatten()
81+
pagingObjects.toList()
8282
})
8383
}
8484

Lines changed: 63 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,75 @@
11
package com.adamratzman.spotify.private
22

33
import com.adamratzman.spotify.api
4+
import com.adamratzman.spotify.endpoints.client.LibraryType
45
import com.adamratzman.spotify.main.SpotifyClientAPI
6+
import com.adamratzman.spotify.utils.BadRequestException
7+
import com.adamratzman.spotify.utils.SavedAlbum
8+
import com.adamratzman.spotify.utils.SavedTrack
9+
import org.junit.jupiter.api.Assertions.assertFalse
10+
import org.junit.jupiter.api.Assertions.assertTrue
11+
import org.junit.jupiter.api.assertThrows
512
import org.spekframework.spek2.Spek
613
import org.spekframework.spek2.style.specification.describe
714

8-
class ClientLibraryAPITest: Spek({
15+
class ClientLibraryAPITest : Spek({
916
describe("Client Library tests") {
1017
if (api !is SpotifyClientAPI) return@describe
18+
it("library track tests") {
19+
val testTrack = "3yi3SEVFj0mSiYVu8xT9sF"
20+
if (api.library.contains(LibraryType.TRACK, testTrack).complete()) {
21+
api.library.remove(LibraryType.TRACK, testTrack)
22+
}
1123

24+
assertFalse(api.library.contains(LibraryType.TRACK, testTrack).complete())
25+
assertFalse(api.library.getSavedTracks().complete().getAllItems<SavedTrack>().complete()
26+
.map { it.track.id }.contains(testTrack))
27+
28+
api.library.add(LibraryType.TRACK, testTrack).complete()
29+
30+
assertTrue(api.library.contains(LibraryType.TRACK, testTrack).complete())
31+
assertTrue(api.library.getSavedTracks().complete().getAllItems<SavedTrack>().complete()
32+
.map { it.track.id }.contains(testTrack))
33+
34+
api.library.remove(LibraryType.TRACK, testTrack).complete()
35+
36+
assertFalse(api.library.contains(LibraryType.TRACK, testTrack).complete())
37+
assertFalse(api.library.getSavedTracks().complete().getAllItems<SavedTrack>().complete()
38+
.map { it.track.id }.contains(testTrack))
39+
}
40+
41+
it("library album tests") {
42+
val testAlbum = "1UAt4G020TgW3lb2CkXr2N"
43+
if (api.library.contains(LibraryType.ALBUM, testAlbum).complete()) {
44+
api.library.remove(LibraryType.ALBUM, testAlbum).complete()
45+
}
46+
47+
assertFalse(api.library.contains(LibraryType.ALBUM, testAlbum).complete())
48+
assertFalse(api.library.getSavedAlbums().complete().getAllItems<SavedAlbum>().complete()
49+
.map { it.album.id }.contains(testAlbum))
50+
51+
api.library.add(LibraryType.ALBUM, testAlbum).complete()
52+
53+
assertTrue(api.library.contains(LibraryType.ALBUM, testAlbum).complete())
54+
assertTrue(api.library.getSavedAlbums().complete().getAllItems<SavedAlbum>().complete()
55+
.map { it.album.id }.contains(testAlbum))
56+
57+
api.library.remove(LibraryType.ALBUM, testAlbum).complete()
58+
59+
assertFalse(api.library.contains(LibraryType.ALBUM, testAlbum).complete())
60+
assertFalse(api.library.getSavedAlbums().complete().getAllItems<SavedAlbum>().complete()
61+
.map { it.album.id }.contains(testAlbum))
62+
}
63+
64+
it("invalid inputs") {
65+
assertThrows<BadRequestException> { api.library.remove(LibraryType.TRACK, "ajksdfkjasjfd").complete()}
66+
assertThrows<BadRequestException> { api.library.contains(LibraryType.TRACK, "adsfjk").complete()}
67+
assertThrows<BadRequestException> { api.library.add(LibraryType.TRACK, "wer").complete()}
68+
69+
70+
assertThrows<BadRequestException> { api.library.remove(LibraryType.ALBUM, "elkars").complete()}
71+
assertThrows<BadRequestException> { api.library.contains(LibraryType.ALBUM, "").complete()}
72+
assertThrows<BadRequestException> { api.library.add(LibraryType.ALBUM, "oieriwkjrjkawer").complete()}
73+
}
1274
}
1375
})

0 commit comments

Comments
 (0)