Skip to content

Commit

Permalink
Adding tests for pagination attributes and fixing out-by-one error ca…
Browse files Browse the repository at this point in the history
…used by LastFm returning 1-indexed page numbers for populated result sets, and 0-indexed page numbers for empty results sets
  • Loading branch information
michaellavelle committed Mar 20, 2012
1 parent 5003a41 commit 2b9beec
Show file tree
Hide file tree
Showing 5 changed files with 95 additions and 33 deletions.
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ public Page<TrackSearchResult> searchByArtistAndTrackName(
return new PageImpl<TrackSearchResult>(new ArrayList<TrackSearchResult>(),pageable,pageInfo.getTotal()); return new PageImpl<TrackSearchResult>(new ArrayList<TrackSearchResult>(),pageable,pageInfo.getTotal());
} }


return new PageImpl<TrackSearchResult>(trackSearchListResponse.getTracks(),new PageRequest(pageInfo.getPage(),pageInfo.getPerPage()),pageInfo.getTotal()); return new PageImpl<TrackSearchResult>(trackSearchListResponse.getTracks(),new PageRequest(pageInfo.getZeroIndexedPage(),pageInfo.getPerPage()),pageInfo.getTotal());






Expand Down Expand Up @@ -116,11 +116,9 @@ private Page<Track> getSimilarTracksWithLimit(TrackDescriptor trackDescriptor,In
.getForObject(buildLastFmApiUrl(methodParameters), .getForObject(buildLastFmApiUrl(methodParameters),
LastFmTracksResponse.class) LastFmTracksResponse.class)
.getNestedResponse(); .getNestedResponse();


PageInfo pageInfo = trackListResponse.getPageInfo();



return new PageImpl<Track>(trackListResponse.getTracks(),new PageRequest(1,limit == null ? trackListResponse.getTracks().size() : limit),trackListResponse.getTracks().size()); return new PageImpl<Track>(trackListResponse.getTracks(),new PageRequest(0,limit == null ? trackListResponse.getTracks().size() : limit),trackListResponse.getTracks().size());
} }


} }
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ public Page<SimpleTrack> getRecentTracks(String userName,Pageable pageable) {
return new PageImpl<SimpleTrack>(new ArrayList<SimpleTrack>(),pageable,pageInfo.getTotal()); return new PageImpl<SimpleTrack>(new ArrayList<SimpleTrack>(),pageable,pageInfo.getTotal());
} }


return new PageImpl<SimpleTrack>(simpleTrackListResponse.getTracks(),new PageRequest(pageInfo.getPage(),pageInfo.getPerPage()),simpleTrackListResponse.getPageInfo().getTotal()); return new PageImpl<SimpleTrack>(simpleTrackListResponse.getTracks(),new PageRequest(pageInfo.getZeroIndexedPage(),pageInfo.getPerPage()),simpleTrackListResponse.getPageInfo().getTotal());




} }
Expand Down Expand Up @@ -152,7 +152,7 @@ public Page<Track> getLovedTracks(String userName,Pageable pageable) {
return new PageImpl<Track>(new ArrayList<Track>(),pageable,pageInfo.getTotal()); return new PageImpl<Track>(new ArrayList<Track>(),pageable,pageInfo.getTotal());
} }


return new PageImpl<Track>(trackListResponse.getTracks(),new PageRequest(pageInfo.getPage(),pageInfo.getPerPage()),trackListResponse.getPageInfo().getTotal()); return new PageImpl<Track>(trackListResponse.getTracks(),new PageRequest(pageInfo.getZeroIndexedPage(),pageInfo.getPerPage()),trackListResponse.getPageInfo().getTotal());


} }


Expand Down Expand Up @@ -187,7 +187,7 @@ public Page<Track> getTopTracks(String userName,Pageable pageable) {
return new PageImpl<Track>(new ArrayList<Track>(),pageable,pageInfo.getTotal()); return new PageImpl<Track>(new ArrayList<Track>(),pageable,pageInfo.getTotal());
} }


return new PageImpl<Track>(trackListResponse.getTracks(),new PageRequest(pageInfo.getPage(),pageInfo.getPerPage()),trackListResponse.getPageInfo().getTotal()); return new PageImpl<Track>(trackListResponse.getTracks(),new PageRequest(pageInfo.getZeroIndexedPage(),pageInfo.getPerPage()),trackListResponse.getPageInfo().getTotal());


} }


Expand Down Expand Up @@ -222,7 +222,7 @@ public Page<Artist> getTopArtists(String userName,Pageable pageable) {
return new PageImpl<Artist>(new ArrayList<Artist>(),pageable,pageInfo.getTotal()); return new PageImpl<Artist>(new ArrayList<Artist>(),pageable,pageInfo.getTotal());
} }


return new PageImpl<Artist>(artistListResponse.getArtists(),new PageRequest(pageInfo.getPage(),pageInfo.getPerPage()),pageInfo.getTotal()); return new PageImpl<Artist>(artistListResponse.getArtists(),new PageRequest(pageInfo.getZeroIndexedPage(),pageInfo.getPerPage()),pageInfo.getTotal());


} }


Expand Down Expand Up @@ -308,7 +308,7 @@ public Page<Shout> getShouts(String userName,Pageable pageable) {
return new PageImpl<Shout>(new ArrayList<Shout>(),pageable,pageInfo.getTotal()); return new PageImpl<Shout>(new ArrayList<Shout>(),pageable,pageInfo.getTotal());
} }


return new PageImpl<Shout>(shoutListResponse.getShouts(),new PageRequest(pageInfo.getPage(),pageInfo.getPerPage()),pageInfo.getTotal()); return new PageImpl<Shout>(shoutListResponse.getShouts(),new PageRequest(pageInfo.getZeroIndexedPage(),pageInfo.getPerPage()),pageInfo.getTotal());
} }


@Override @Override
Expand Down Expand Up @@ -340,7 +340,7 @@ public Page<Artist> getRecommendedArtists(Pageable pageable) {
return new PageImpl<Artist>(new ArrayList<Artist>(),pageable,pageInfo.getTotal()); return new PageImpl<Artist>(new ArrayList<Artist>(),pageable,pageInfo.getTotal());
} }


return new PageImpl<Artist>(artistListResponse.getArtists(),new PageRequest(pageInfo.getPage(),pageInfo.getPerPage()),pageInfo.getTotal()); return new PageImpl<Artist>(artistListResponse.getArtists(),new PageRequest(pageInfo.getZeroIndexedPage(),pageInfo.getPerPage()),pageInfo.getTotal());
} }




Expand Down Expand Up @@ -376,7 +376,7 @@ public Page<LastFmProfile> getFriends(String userName,Pageable pageable) {
return new PageImpl<LastFmProfile>(new ArrayList<LastFmProfile>(),pageable,pageInfo.getTotal()); return new PageImpl<LastFmProfile>(new ArrayList<LastFmProfile>(),pageable,pageInfo.getTotal());
} }


return new PageImpl<LastFmProfile>(userListResponse.getUsers(),new PageRequest(pageInfo.getPage(),pageInfo.getPerPage()),pageInfo.getTotal()); return new PageImpl<LastFmProfile>(userListResponse.getUsers(),new PageRequest(pageInfo.getZeroIndexedPage(),pageInfo.getPerPage()),pageInfo.getTotal());


} }


Expand Down
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public PageInfo getPageInfo() {
pageInfo.setPerPage(itemsPerPage); pageInfo.setPerPage(itemsPerPage);
pageInfo.setTotal(totalResults); pageInfo.setTotal(totalResults);
pageInfo.setTotalPages(((int)((totalResults - 1)/itemsPerPage)) + 1); pageInfo.setTotalPages(((int)((totalResults - 1)/itemsPerPage)) + 1);
pageInfo.setPage(((int)(startIndex/itemsPerPage)) + 1); pageInfo.setPage(((int)(startIndex/itemsPerPage)));


return pageInfo; return pageInfo;
} }
Expand Down
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -21,6 +21,11 @@ public PageInfo(@JsonProperty("page") int page,@JsonProperty("perPage") int perP
this.totalPages = totalPages; this.totalPages = totalPages;
} }


public int getZeroIndexedPage()
{
return page == 0 ? 0 : page - 1;
}

public PageInfo() public PageInfo()
{ {


Expand Down
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import java.util.List; import java.util.List;


import org.junit.Test; import org.junit.Test;
import org.springframework.data.domain.Page;
import org.springframework.social.NotAuthorizedException; import org.springframework.social.NotAuthorizedException;
import org.springframework.social.ResourceNotFoundException; import org.springframework.social.ResourceNotFoundException;
import org.springframework.social.lastfm.api.impl.UserAgentHelper; import org.springframework.social.lastfm.api.impl.UserAgentHelper;
Expand Down Expand Up @@ -86,8 +87,11 @@ public void getRecentTracks() {
withResponse(jsonResource("testdata/recent-tracks"), withResponse(jsonResource("testdata/recent-tracks"),
responseHeaders)); responseHeaders));


List<SimpleTrack> tracks = lastFm.userOperations().getRecentTracks( Page<SimpleTrack> simpleTracks = lastFm.userOperations().getRecentTracks(
"mattslip").getContent(); "mattslip");
assertEquals(0,simpleTracks.getNumber());
assertEquals(1,simpleTracks.getTotalElements());
List<SimpleTrack> tracks = simpleTracks.getContent();
assertSimpleTrackData(tracks.get(0)); assertSimpleTrackData(tracks.get(0));
} }


Expand All @@ -102,7 +106,10 @@ public void getRecentTracksSingleTrackResponse() {
withResponse(jsonResource("testdata/recent-tracks-single-track-response"), withResponse(jsonResource("testdata/recent-tracks-single-track-response"),
responseHeaders)); responseHeaders));


List<SimpleTrack> tracks = lastFm.userOperations().getRecentTracks("mattslip").getContent(); Page<SimpleTrack> simpleTracks = lastFm.userOperations().getRecentTracks("mattslip");
assertEquals(0,simpleTracks.getNumber());
assertEquals(1,simpleTracks.getTotalElements());
List<SimpleTrack> tracks = simpleTracks.getContent();
assertSimpleTrackData(tracks.get(0)); assertSimpleTrackData(tracks.get(0));
} }


Expand All @@ -123,7 +130,10 @@ public void getRecentTracksEmptyResponse() {
jsonResource("testdata/recent-tracks-empty"), jsonResource("testdata/recent-tracks-empty"),
responseHeaders)); responseHeaders));


List<SimpleTrack> tracks = lastFm.userOperations().getRecentTracks("mattslip").getContent(); Page<SimpleTrack> simpleTracks = lastFm.userOperations().getRecentTracks("mattslip");
List<SimpleTrack> tracks = simpleTracks.getContent();
assertEquals(0,simpleTracks.getNumber());
assertEquals(0,simpleTracks.getTotalElements());
assertNotNull(tracks); assertNotNull(tracks);
assertEquals(0,tracks.size()); assertEquals(0,tracks.size());


Expand All @@ -141,7 +151,10 @@ public void getTopTracks() {
withResponse(jsonResource("testdata/top-tracks"), withResponse(jsonResource("testdata/top-tracks"),
responseHeaders)); responseHeaders));


List<Track> tracks = lastFm.userOperations().getTopTracks("mattslip").getContent(); Page<Track> tracksPage = lastFm.userOperations().getTopTracks("mattslip");
assertEquals(0,tracksPage.getNumber());
assertEquals(1,tracksPage.getTotalElements());
List<Track> tracks = tracksPage.getContent();
assertTrackData(tracks.get(0)); assertTrackData(tracks.get(0));
} }


Expand All @@ -156,7 +169,10 @@ public void getTopArtists() {
withResponse(jsonResource("testdata/top-artists"), withResponse(jsonResource("testdata/top-artists"),
responseHeaders)); responseHeaders));


List<Artist> artists = lastFm.userOperations().getTopArtists("mattslip").getContent(); Page<Artist> artistsPage = lastFm.userOperations().getTopArtists("mattslip");
assertEquals(0,artistsPage.getNumber());
assertEquals(133,artistsPage.getTotalElements());
List<Artist> artists = artistsPage.getContent();
assertArtistData(artists.get(0)); assertArtistData(artists.get(0));
} }


Expand All @@ -171,7 +187,10 @@ public void getTopArtistsEmptyResponse() {
withResponse(jsonResource("testdata/top-artists-empty"), withResponse(jsonResource("testdata/top-artists-empty"),
responseHeaders)); responseHeaders));


List<Artist> artists = lastFm.userOperations().getTopArtists("mattslip").getContent(); Page<Artist> artistsPage = lastFm.userOperations().getTopArtists("mattslip");
assertEquals(0,artistsPage.getNumber());
assertEquals(0,artistsPage.getTotalElements());
List<Artist> artists = artistsPage.getContent();
assertNotNull(artists); assertNotNull(artists);
assertEquals(0,artists.size()); assertEquals(0,artists.size());
} }
Expand All @@ -187,7 +206,10 @@ public void getRecommendedArtists() {
withResponse(jsonResource("testdata/recommended-artists"), withResponse(jsonResource("testdata/recommended-artists"),
responseHeaders)); responseHeaders));


List<Artist> artists = lastFm.userOperations().getRecommendedArtists().getContent(); Page<Artist> artistsPage = lastFm.userOperations().getRecommendedArtists();
List<Artist> artists = artistsPage.getContent();
assertEquals(0,artistsPage.getNumber());
assertEquals(250,artistsPage.getTotalElements());
assertArtistData(artists.get(0)); assertArtistData(artists.get(0));




Expand All @@ -205,7 +227,11 @@ public void getTopTracksSingleTrackResponse() {
withResponse(jsonResource("testdata/top-tracks-single-track-response"), withResponse(jsonResource("testdata/top-tracks-single-track-response"),
responseHeaders)); responseHeaders));


List<Track> tracks = lastFm.userOperations().getTopTracks("mattslip").getContent(); Page<Track> tracksPage = lastFm.userOperations().getTopTracks("mattslip");
assertEquals(0,tracksPage.getNumber());
assertEquals(1,tracksPage.getTotalElements());
List<Track> tracks = tracksPage.getContent();

assertTrackData(tracks.get(0)); assertTrackData(tracks.get(0));
} }


Expand All @@ -226,7 +252,10 @@ public void getTopTracksEmptyResponse() {
jsonResource("testdata/top-tracks-empty"), jsonResource("testdata/top-tracks-empty"),
responseHeaders)); responseHeaders));


List<Track> tracks = lastFm.userOperations().getTopTracks("mattslip").getContent(); Page<Track> tracksPage = lastFm.userOperations().getTopTracks("mattslip");
assertEquals(0,tracksPage.getNumber());
assertEquals(0,tracksPage.getTotalElements());
List<Track> tracks = tracksPage.getContent();
assertNotNull(tracks); assertNotNull(tracks);
assertEquals(0,tracks.size()); assertEquals(0,tracks.size());


Expand All @@ -246,7 +275,10 @@ public void getLovedTracks() {
withResponse(jsonResource("testdata/loved-tracks"), withResponse(jsonResource("testdata/loved-tracks"),
responseHeaders)); responseHeaders));


List<Track> tracks = lastFm.userOperations().getLovedTracks("mattslip").getContent(); Page<Track> tracksPage = lastFm.userOperations().getLovedTracks("mattslip");
assertEquals(0,tracksPage.getNumber());
assertEquals(1,tracksPage.getTotalElements());
List<Track> tracks = tracksPage.getContent();
assertTrackData(tracks.get(0)); assertTrackData(tracks.get(0));


} }
Expand All @@ -262,7 +294,10 @@ public void getSimilarTracks() {
withResponse(jsonResource("testdata/similar-tracks"), withResponse(jsonResource("testdata/similar-tracks"),
responseHeaders)); responseHeaders));


List<Track> tracks = lastFm.trackOperations().getSimilarTracks(new SimpleTrackDescriptor("Madonna","Music")).getContent(); Page<Track> tracksPage = lastFm.trackOperations().getSimilarTracks(new SimpleTrackDescriptor("Madonna","Music"));
List<Track> tracks = tracksPage.getContent();
assertEquals(0,tracksPage.getNumber());
assertEquals(250,tracksPage.getTotalElements());
assertEquals("Don't Tell Me",tracks.get(0).getName()); assertEquals("Don't Tell Me",tracks.get(0).getName());
assertEquals("Madonna",tracks.get(0).getArtistName()); assertEquals("Madonna",tracks.get(0).getArtistName());


Expand All @@ -279,7 +314,10 @@ public void getShouts() {
withResponse(jsonResource("testdata/shouts"), withResponse(jsonResource("testdata/shouts"),
responseHeaders)); responseHeaders));


List<Shout> shouts = lastFm.userOperations().getShouts("mattslip").getContent(); Page<Shout> shoutsPage = lastFm.userOperations().getShouts("mattslip");
assertEquals(0,shoutsPage.getNumber());
assertEquals(3,shoutsPage.getTotalElements());
List<Shout> shouts = shoutsPage.getContent();
assertShoutData(shouts.get(2)); assertShoutData(shouts.get(2));




Expand All @@ -297,7 +335,10 @@ public void getShoutsSingleShoutResponse() {
withResponse(jsonResource("testdata/single-shout-response"), withResponse(jsonResource("testdata/single-shout-response"),
responseHeaders)); responseHeaders));


List<Shout> shouts = lastFm.userOperations().getShouts("mattslip").getContent(); Page<Shout> shoutsPage = lastFm.userOperations().getShouts("mattslip");
assertEquals(0,shoutsPage.getNumber());
assertEquals(1,shoutsPage.getTotalElements());
List<Shout> shouts = shoutsPage.getContent();
assertShoutData(shouts.get(0)); assertShoutData(shouts.get(0));


} }
Expand All @@ -313,7 +354,10 @@ public void getShoutsEmptyShoutsResponse() {
withResponse(jsonResource("testdata/empty-shouts-response"), withResponse(jsonResource("testdata/empty-shouts-response"),
responseHeaders)); responseHeaders));


List<Shout> shouts = lastFm.userOperations().getShouts("mattslip").getContent(); Page<Shout> shoutsPage = lastFm.userOperations().getShouts("mattslip");
List<Shout> shouts = shoutsPage.getContent();
assertEquals(0,shoutsPage.getNumber());
assertEquals(0,shoutsPage.getTotalElements());
assertNotNull(shouts); assertNotNull(shouts);
assertEquals(shouts.size(),0); assertEquals(shouts.size(),0);
} }
Expand All @@ -329,7 +373,10 @@ public void getFriendsEmptyFriendsResponse() {
withResponse(jsonResource("testdata/empty-friends-response"), withResponse(jsonResource("testdata/empty-friends-response"),
responseHeaders)); responseHeaders));


List<LastFmProfile> friends = lastFm.userOperations().getFriends("mattslip").getContent(); Page<LastFmProfile> friendsPage = lastFm.userOperations().getFriends("mattslip");
List<LastFmProfile> friends = friendsPage.getContent();
assertEquals(0,friendsPage.getNumber());
assertEquals(0,friendsPage.getTotalElements());
assertNotNull(friends); assertNotNull(friends);
assertEquals(0,friends.size()); assertEquals(0,friends.size());
} }
Expand All @@ -345,7 +392,10 @@ public void getFriends() {
withResponse(jsonResource("testdata/friends"), withResponse(jsonResource("testdata/friends"),
responseHeaders)); responseHeaders));


List<LastFmProfile> friends = lastFm.userOperations().getFriends("mattslip").getContent(); Page<LastFmProfile> friendsPage = lastFm.userOperations().getFriends("mattslip");
List<LastFmProfile> friends = friendsPage.getContent();
assertEquals(0,friendsPage.getNumber());
assertEquals(3,friendsPage.getTotalElements());
assertNotNull(friends); assertNotNull(friends);
assertEquals(3,friends.size()); assertEquals(3,friends.size());
} }
Expand Down Expand Up @@ -377,9 +427,12 @@ public void getFriendsSingleFriendResponse() {
withResponse(jsonResource("testdata/single-friend-response"), withResponse(jsonResource("testdata/single-friend-response"),
responseHeaders)); responseHeaders));


List<LastFmProfile> friends = lastFm.userOperations().getFriends("mattslip").getContent(); Page<LastFmProfile> friendsPage = lastFm.userOperations().getFriends("mattslip");
List<LastFmProfile> friends = friendsPage.getContent();
assertNotNull(friends); assertNotNull(friends);
assertEquals(1,friends.size()); assertEquals(1,friends.size());
assertEquals(0,friendsPage.getNumber());
assertEquals(1,friendsPage.getTotalElements());
assertEquals("michaellavelle",friends.get(0).getName()); assertEquals("michaellavelle",friends.get(0).getName());
assertEquals("Michael Lavelle",friends.get(0).getRealName()); assertEquals("Michael Lavelle",friends.get(0).getRealName());
assertEquals("http://www.last.fm/user/michaellavelle",friends.get(0).getUrl()); assertEquals("http://www.last.fm/user/michaellavelle",friends.get(0).getUrl());
Expand All @@ -404,7 +457,10 @@ public void getLovedTracksSingleTrackResponse() {
jsonResource("testdata/loved-tracks-single-track-response"), jsonResource("testdata/loved-tracks-single-track-response"),
responseHeaders)); responseHeaders));


List<Track> tracks = lastFm.userOperations().getLovedTracks("mattslip").getContent(); Page<Track> tracksPage = lastFm.userOperations().getLovedTracks("mattslip");
assertEquals(0,tracksPage.getNumber());
assertEquals(1,tracksPage.getTotalElements());
List<Track> tracks = tracksPage.getContent();
assertTrackData(tracks.get(0)); assertTrackData(tracks.get(0));


} }
Expand All @@ -426,7 +482,10 @@ public void getLovedTracksEmptyResponse() {
jsonResource("testdata/loved-tracks-empty"), jsonResource("testdata/loved-tracks-empty"),
responseHeaders)); responseHeaders));


List<Track> tracks = lastFm.userOperations().getLovedTracks("mattslip").getContent(); Page<Track> tracksPage = lastFm.userOperations().getLovedTracks("mattslip");
List<Track> tracks = tracksPage.getContent();
assertEquals(0,tracksPage.getNumber());
assertEquals(0,tracksPage.getTotalElements());
assertNotNull(tracks); assertNotNull(tracks);
assertEquals(0,tracks.size()); assertEquals(0,tracks.size());


Expand Down

0 comments on commit 2b9beec

Please sign in to comment.