1
package com.ubuntuone.android.music.provider;
3
import static com.ubuntuone.android.music.provider.MusicProviderUtils.QUEUE_URI;
4
import android.database.Cursor;
5
import android.net.Uri;
7
import com.ubuntuone.android.music.provider.MusicContract.Albums;
8
import com.ubuntuone.android.music.provider.MusicContract.Artists;
9
import com.ubuntuone.android.music.provider.MusicContract.PlaylistSongs;
10
import com.ubuntuone.android.music.provider.MusicContract.Playlists;
11
import com.ubuntuone.android.music.provider.MusicContract.Songs;
12
import com.ubuntuone.android.music.util.HashUtils;
14
public class MusicProviderUtilsTest extends MusicProviderMockDataTestBase {
16
public MusicProviderUtilsTest() {
17
super(MusicProvider.class, MusicContract.CONTENT_AUTHORITY);
20
public void testGetArtistSongCount() {
21
String artistId = HashUtils.md5("artist1-artist_name");
22
Uri artistUri = Artists.buildArtistUri(artistId);
23
int songCount = MusicProviderUtils.getArtistSongCount(mContext, artistUri);
24
assertEquals("Wrong artist song count.", 2, songCount);
27
public void testGetAlbumSongCount() {
28
String albumId = HashUtils.md5("album1-album_titleartist1-artist_name");
29
Uri albumUri = Albums.buildAlbumUri(albumId);
30
int songCount = MusicProviderUtils.getAlbumSongCount(mContext, albumUri);
31
assertEquals("Wrong album song count.", 2, songCount);
34
public void testGetSelectedSongCount() {
35
int songCount = MusicProviderUtils.getSongCount(mContext, null);
36
assertEquals("Wrong total song count.", MockData.SONGS_COUNT, songCount);
39
public void testGetSongCount() {
40
int songCount = MusicProviderUtils.getSongCount(mContext);
41
assertEquals("Wrong total song count.", MockData.SONGS_COUNT, songCount);
44
public void testGetStarredSongCount() {
45
int songCount = MusicProviderUtils.getStarredSongCount(mContext);
46
assertEquals("Wrong starred song count.", MockData.STARRED_SONGS_COUNT, songCount);
49
public void testGetSongStarred() {
50
Uri songUri = Songs.buildSongUri("song2-song_id");
52
int starred = MusicProviderUtils.getSongStarred(mContext, songUri);
53
assertEquals("Wrong song starred state.", 0, starred);
56
public void testSetSongStarred() {
57
Uri songUri = Songs.buildSongUri("song2-song_id");
58
String[] projection = new String[] { Songs.STARRED };
60
Cursor cursor = mResolver.query(songUri, projection, null, null, null);
62
assertEquals("Wrong song starred state.",
63
0, cursor.getInt(cursor.getColumnIndex(Songs.STARRED)));
66
MusicProviderUtils.setSongStarred(mContext, songUri, true);
68
cursor = mResolver.query(songUri, projection, null, null, null);
70
assertEquals("Wrong song starred state.",
71
1, cursor.getInt(cursor.getColumnIndex(Songs.STARRED)));
74
MusicProviderUtils.setSongStarred(mContext, songUri, false);
76
cursor = mResolver.query(songUri, projection, null, null, null);
78
assertEquals("Wrong song starred state.",
79
0, cursor.getInt(cursor.getColumnIndex(Songs.STARRED)));
83
public void testToggleSongStarred() {
84
Uri songUri = Songs.buildSongUri("song2-song_id");
85
String[] projection = new String[] { Songs.STARRED };
87
Cursor cursor = mResolver.query(songUri, projection, null, null, null);
89
assertEquals("Wrong song starred state.",
90
0, cursor.getInt(cursor.getColumnIndex(Songs.STARRED)));
93
MusicProviderUtils.toggleSongStarred(mContext, songUri);
95
cursor = mResolver.query(songUri, projection, null, null, null);
97
assertEquals("Wrong song starred state.",
98
1, cursor.getInt(cursor.getColumnIndex(Songs.STARRED)));
101
MusicProviderUtils.toggleSongStarred(mContext, songUri);
103
cursor = mResolver.query(songUri, projection, null, null, null);
104
cursor.moveToFirst();
105
assertEquals("Wrong song starred state.",
106
0, cursor.getInt(cursor.getColumnIndex(Songs.STARRED)));
110
public void testGetCachedSongCount() {
111
int songCount = MusicProviderUtils.getCachedSongCount(mContext);
112
assertEquals("Wrong starred song count.", MockData.CACHED_SONGS_COUNT, songCount);
115
public void testGetPlaylistSongCount() {
116
Uri playlistUri = Playlists.buildPlaylistSongsUri("playlist1-playlist_id");
117
int songCount = MusicProviderUtils.getPlaylistSongCount(mContext, playlistUri);
118
assertEquals("Wrong playlist song count.", 2, songCount);
121
public void testGetPlayQueueSongCount() {
122
Uri playlistUri = MusicProviderUtils.QUEUE_URI;
123
int songCount = MusicProviderUtils.getPlaylistSongCount(mContext, playlistUri);
124
assertEquals("Wrong play queue song count.", 1, songCount);
127
public void testClearPlaylist() {
128
Uri playlistUri = Playlists.buildPlaylistSongsUri("playlist1-playlist_id");
129
int songCount = MusicProviderUtils.getPlaylistSongCount(mContext, playlistUri);
130
assertTrue("Playlist should not be empty.", songCount != 0);
132
MusicProviderUtils.clearPlaylist(mContext, playlistUri);
134
songCount = MusicProviderUtils.getPlaylistSongCount(mContext, playlistUri);
135
assertEquals("Playlist not empty.", 0, songCount);
138
public void testClearPlayQueue() {
139
Uri playlistUri = MusicProviderUtils.QUEUE_URI;
140
int songCount = MusicProviderUtils.getPlaylistSongCount(mContext, playlistUri);
141
assertTrue("Play queue should not be empty.", songCount != 0);
143
MusicProviderUtils.clearPlayQueue(getMockContext());
145
songCount = MusicProviderUtils.getPlaylistSongCount(mContext, playlistUri);
146
assertTrue("Play queue not empty.", songCount == 0);
149
public void testDeletePlaylist() {
150
Uri playlistUri = Playlists.buildPlaylistSongsUri("playlist2-playlist_id");
151
int songCount = MusicProviderUtils.getPlaylistSongCount(mContext, playlistUri);
152
assertTrue("Playlist should not be empty.", songCount > 0);
154
MusicProviderUtils.deletePlaylist(mContext, playlistUri);
156
songCount = MusicProviderUtils.getPlaylistSongCount(mContext, playlistUri);
157
assertEquals("No songs should have been returned.", 0, songCount);
159
Cursor cursor = mResolver.query(playlistUri, new String[] { Playlists._ID },
161
int rowsReturned = cursor.getCount();
163
assertEquals("Playlist should not exists.", 0, rowsReturned);
166
public void testDeletePlaylistDoesNotDeletePlayQueue() {
167
Uri playlistUri = MusicProviderUtils.QUEUE_URI;
168
int songCount = MusicProviderUtils.getPlayQueueSongCount(mContext);
169
assertTrue("Play queue should not be empty.", songCount > 0);
171
MusicProviderUtils.deletePlaylist(mContext, playlistUri);
173
int newSongCount = MusicProviderUtils.getPlaylistSongCount(mContext, playlistUri);
174
assertEquals("No songs should have been deleted.", songCount, newSongCount);
176
Cursor cursor = mResolver.query(playlistUri, new String[] { Playlists._ID },
178
int rowsReturned = cursor.getCount();
180
assertEquals("Play queue should still exists.", 1, rowsReturned);
183
public void testEnqueueSongInPlaylist() {
184
Uri playlistUri = Playlists.buildPlaylistSongsUri("playlist2-playlist_id");
185
int songCount = MusicProviderUtils.getPlaylistSongCount(mContext, playlistUri);
186
assertEquals("Wrong song count of playlist.", 1, songCount);
188
final String newSongId = "song1-song_id";
189
Uri songUri = Songs.buildSongUri("song1-song_id");
190
MusicProviderUtils.enqueueSong(mContext, songUri, playlistUri);
192
int newSongCount = MusicProviderUtils.getPlaylistSongCount(mContext, playlistUri);
193
assertEquals("Wrong new song count of playlist.", songCount + 1, newSongCount);
195
Cursor cursor = null;
197
String[] projection = new String[] { Songs.SONG_ID };
198
cursor = mResolver.query(playlistUri, projection,
199
null, null, PlaylistSongs.DEFAULT_SORT);
200
if (cursor != null && cursor.isBeforeFirst()) {
202
String songId = cursor.getString(cursor.getColumnIndex(Songs.SONG_ID));
203
assertEquals("Wrong queued song id.", newSongId, songId);
206
if (cursor != null) cursor.close();
210
public void testClearAndEnqueueSong() {
211
final String newSongId = "song1-song_id";
212
Uri songUri = Songs.buildSongUri("song1-song_id");
214
MusicProviderUtils.clearAndEnqueueSong(mContext, songUri);
216
int songCount = MusicProviderUtils.getPlayQueueSongCount(mContext);
217
assertEquals("Wrong new song count of play queue.", 1, songCount);
219
Cursor cursor = null;
221
String[] projection = new String[] { Songs.SONG_ID };
222
cursor = mResolver.query(QUEUE_URI, projection,
223
null, null, PlaylistSongs.DEFAULT_SORT);
224
if (cursor != null && cursor.isBeforeFirst()) {
225
cursor.moveToFirst();
226
String songId = cursor.getString(cursor.getColumnIndex(Songs.SONG_ID));
227
assertEquals("Wrong queued song id.", newSongId, songId);
230
if (cursor != null) cursor.close();
234
public void testEnqueueAlbumInPlaylist() {
235
Uri playlistUri = Playlists.buildPlaylistSongsUri("playlist2-playlist_id");
236
int songCount = MusicProviderUtils.getPlaylistSongCount(mContext, playlistUri);
237
assertEquals("Wrong song count of playlist.", 1, songCount);
239
final String newAlbumId = HashUtils.md5("album1-album_titleartist1-artist_name");
240
Uri albumUri = Albums.buildAlbumUri(newAlbumId);
241
int albumSongCount = MusicProviderUtils.getAlbumSongCount(mContext, albumUri);
242
MusicProviderUtils.enqueueAlbum(mContext, albumUri, playlistUri);
244
int newSongCount = MusicProviderUtils.getPlaylistSongCount(mContext, playlistUri);
245
assertEquals("Wrong new song count of playlist.", songCount + albumSongCount, newSongCount);
247
Cursor cursor = null;
249
String[] projection = new String[] { Songs.SONG_ID };
250
cursor = mResolver.query(playlistUri, projection,
251
null, null, PlaylistSongs.DEFAULT_SORT);
252
if (cursor != null && cursor.isBeforeFirst()) {
253
cursor.moveToFirst();
256
String songId = cursor.getString(cursor.getColumnIndex(Songs.SONG_ID));
257
assertEquals("Wrong queued album song id.", "song1-song_id", songId);
260
songId = cursor.getString(cursor.getColumnIndex(Songs.SONG_ID));
261
assertEquals("Wrong queued album song id.", "song2-song_id", songId);
264
if (cursor != null) cursor.close();
268
public void testClearAndEnqueueAlbum() {
269
Uri playlistUri = MusicProviderUtils.QUEUE_URI;
270
int songCount = MusicProviderUtils.getPlayQueueSongCount(mContext);
271
assertEquals("Wrong song count of play queue.", 1, songCount);
273
final String newAlbumId = HashUtils.md5("album1-album_titleartist1-artist_name");
274
Uri albumUri = Albums.buildAlbumUri(newAlbumId);
275
int albumSongCount = MusicProviderUtils.getAlbumSongCount(mContext, albumUri);
276
MusicProviderUtils.clearAndEnqueueAlbum(mContext, albumUri);
278
int newSongCount = MusicProviderUtils.getPlayQueueSongCount(mContext);
279
assertEquals("Wrong new song count of play queue.", albumSongCount, newSongCount);
281
Cursor cursor = null;
283
String[] projection = new String[] { Songs.SONG_ID };
284
cursor = mResolver.query(playlistUri, projection,
285
null, null, PlaylistSongs.DEFAULT_SORT);
286
if (cursor != null && cursor.isBeforeFirst()) {
288
String songId = cursor.getString(cursor.getColumnIndex(Songs.SONG_ID));
289
assertEquals("Wrong queued album song id.", "song1-song_id", songId);
292
songId = cursor.getString(cursor.getColumnIndex(Songs.SONG_ID));
293
assertEquals("Wrong queued album song id.", "song2-song_id", songId);
296
if (cursor != null) cursor.close();
300
public void testEnqueueArtistInPlaylist() {
301
Uri playlistUri = Playlists.buildPlaylistSongsUri("playlist2-playlist_id");
302
int songCount = MusicProviderUtils.getPlaylistSongCount(mContext, playlistUri);
303
assertEquals("Wrong song count of playlist.", 1, songCount);
305
String newArtistId = HashUtils.md5("artist1-artist_name");
306
Uri artistUri = Artists.buildArtistUri(newArtistId);
307
int artistSongCount = MusicProviderUtils.getArtistSongCount(mContext, artistUri);
308
assertTrue("Artist song count should be non zero.", artistSongCount > 0);
309
MusicProviderUtils.enqueueArtist(mContext, artistUri, playlistUri);
311
int newSongCount = MusicProviderUtils.getPlaylistSongCount(mContext, playlistUri);
312
assertEquals("Wrong new song count of playlist.", songCount + artistSongCount, newSongCount);
314
Cursor cursor = null;
316
String[] projection = new String[] { Songs.SONG_ID };
317
cursor = mResolver.query(playlistUri, projection,
318
null, null, PlaylistSongs.DEFAULT_SORT);
319
if (cursor != null && cursor.isBeforeFirst()) {
320
cursor.moveToFirst();
323
String songId = cursor.getString(cursor.getColumnIndex(Songs.SONG_ID));
324
assertEquals("Wrong queued album song id.", "song1-song_id", songId);
327
songId = cursor.getString(cursor.getColumnIndex(Songs.SONG_ID));
328
assertEquals("Wrong queued album song id.", "song2-song_id", songId);
331
if (cursor != null) cursor.close();
335
public void testClearAndEnqueueArtist() {
336
Uri playlistUri = MusicProviderUtils.QUEUE_URI;
337
int songCount = MusicProviderUtils.getPlayQueueSongCount(mContext);
338
assertEquals("Wrong song count of play queue.", 1, songCount);
340
String newArtistId = HashUtils.md5("artist1-artist_name");
341
Uri artistUri = Artists.buildArtistUri(newArtistId);
342
int artistSongCount = MusicProviderUtils.getArtistSongCount(mContext, artistUri);
343
assertTrue("Artist song count should be non zero.", artistSongCount > 0);
344
MusicProviderUtils.enqueueArtist(mContext, artistUri);
346
int newSongCount = MusicProviderUtils.getPlayQueueSongCount(mContext);
347
assertEquals("Wrong new song count of play queue.", artistSongCount, newSongCount);
349
Cursor cursor = null;
351
String[] projection = new String[] { Songs.SONG_ID };
352
cursor = mResolver.query(playlistUri, projection,
353
null, null, PlaylistSongs.DEFAULT_SORT);
354
if (cursor != null && cursor.isBeforeFirst()) {
356
String songId = cursor.getString(cursor.getColumnIndex(Songs.SONG_ID));
357
assertEquals("Wrong queued album song id.", "song1-song_id", songId);
360
songId = cursor.getString(cursor.getColumnIndex(Songs.SONG_ID));
361
assertEquals("Wrong queued album song id.", "song2-song_id", songId);
364
if (cursor != null) cursor.close();