@Override public PaginatedCollection<ComicSeries> getPage(Page page) throws MarvelApiException { int offset = page.getOffset(); int limit = page.getLimit(); MarvelResponse<SeriesCollectionDto> seriesApiResponse = seriesApiClient.getAll(offset, limit); SeriesCollectionDto seriesCollectionDto = seriesApiResponse.getResponse(); Collection<ComicSeries> comicSeries = mapper.reverseMap(seriesCollectionDto.getSeries()); PaginatedCollection<ComicSeries> comicSeriesPage = new PaginatedCollection<>(comicSeries); comicSeriesPage.setPage(page); comicSeriesPage.setHasMore( seriesCollectionDto.getOffset() + seriesCollectionDto.getCount() < seriesCollectionDto.getTotal()); return comicSeriesPage; }
ComicSeriesDataSource createDataSource() { if (hasKeys()) { MarvelApiConfig marvelApiConfig = MarvelApiConfig.with(BuildConfig.MARVEL_PUBLIC_KEY, BuildConfig.MARVEL_PRIVATE_KEY); SeriesApiClient seriesApiClient = new SeriesApiClient(marvelApiConfig); return new ComicSeriesApiDataSource(seriesApiClient); } else { return new ComicSeriesFakeDataSource(); } }
@Override public List<Comic> getComicBySeries(int key) throws Exception { MarvelResponse<ComicsDto> comicsBySeries = seriesApiClient.getComicsBySeries(Integer.toString(key), 0, MAX_COMICS_BY_SERIES); ComicsDto comicsDto = comicsBySeries.getResponse(); List<Comic> comics = new ArrayList<>(); for (ComicDto comicDto : comicsDto.getComics()) { Comic comic = new Comic(); comic.setKey(comicDto.getId()); comic.setName(comicDto.getTitle()); comic.setThumbnailUrl(comicDto.getThumbnail().getImageUrl(MarvelImage.Size.PORTRAIT_UNCANNY)); comics.add(comic); } return comics; }
System.out.println(comic.toString()); } else if (operation.equals("getSeries")) { SeriesApiClient seriesApiClient = new SeriesApiClient(marvelApiConfig); MarvelResponse<SeriesCollectionDto> series = seriesApiClient.getAll(0, 10); System.out.println(series.toString()); } else if (operation.equals("getSeriesById")) { SeriesApiClient seriesApiClient = new SeriesApiClient(marvelApiConfig); MarvelResponse<SeriesDto> serie = seriesApiClient.getSeriesById("15276"); System.out.println(serie.toString());
@Override public ComicSeries getByKey(Integer key) throws Exception { MarvelResponse<SeriesDto> seriesResponse = seriesApiClient.getSeriesById(key.toString()); SeriesDto seriesDto = seriesResponse.getResponse(); ComicSeries comicSeries = mapper.reverseMap(seriesDto); return comicSeries; }
public MarvelResponse<ComicsDto> getComicsBySeries(String seriesId, ComicsQuery comicsQuery) throws MarvelApiException { if (seriesId == null || seriesId.isEmpty()) { throw new IllegalArgumentException("The seriesId must not be null or empty"); } SeriesApiRest api = getApi(SeriesApiRest.class); Map<String, Object> queryMap = comicsQuery.toMap(); Call<MarvelResponse<ComicsDto>> call = api.getComicsBySerie(seriesId, queryMap); return execute(call); } }
@Test(expected = IllegalArgumentException.class) public void shouldNotAcceptEmptySeriesId() throws Exception { SeriesApiClient seriesApiClient = givenSeriesApiClient(); seriesApiClient.getSeriesById(INVALID_SERIES_ID); }
public MarvelResponse<SeriesCollectionDto> getAll(SeriesQuery seriesQuery) throws MarvelApiException { SeriesApiRest api = getApi(SeriesApiRest.class); Map<String, Object> queryAsMap = seriesQuery.toMap(); Call<MarvelResponse<SeriesCollectionDto>> call = api.getSeries(queryAsMap); return execute(call); }
public MarvelResponse<SeriesCollectionDto> getAll(int offset, int limit) throws MarvelApiException { SeriesQuery query = SeriesQuery.Builder.create().withOffset(offset).withLimit(limit).build(); return getAll(query); }
@Test public void shouldSendGetSeriesRequestToTheCorrectEndpoint() throws Exception { SeriesApiClient seriesApiClient = givenSeriesApiClient(); enqueueMockResponse("getSeriesCollection.json"); seriesApiClient.getSeriesById(ANY_SERIE_ID); assertRequestSentToContains("series/" + ANY_SERIE_ID); }
public MarvelResponse<ComicsDto> getComicsBySeries(String seriesId, int offset, int limit) throws MarvelApiException { ComicsQuery query = ComicsQuery.Builder.create().withOffset(offset).withLimit(limit).build(); return getComicsBySeries(seriesId, query); }
private SeriesApiClient givenSeriesApiClient() { Retrofit retrofit = new Retrofit.Builder().baseUrl(getBaseEndpoint()) .addConverterFactory(GsonConverterFactory.create()) .build(); MarvelApiConfig marvelApiConfig = new MarvelApiConfig.Builder(ANY_PUBLIC_KEY, ANY_PRIVATE_KEY).baseUrl(ANY_URL) .retrofit(retrofit) .build(); return new SeriesApiClient(marvelApiConfig); }
public MarvelResponse<SeriesDto> getSeriesById(String seriesId) throws MarvelApiException { if (seriesId == null || seriesId.isEmpty()) { throw new IllegalArgumentException("The seriesId must not be null or empty"); } SeriesApiRest api = getApi(SeriesApiRest.class); Call<MarvelResponse<SeriesCollectionDto>> call = api.getSerie(seriesId); MarvelResponse<SeriesCollectionDto> series = execute(call); SeriesCollectionDto seriesCollectionDto = series.getResponse(); if (seriesCollectionDto != null && seriesCollectionDto.getCount() > 0) { SeriesDto seriesDto = seriesCollectionDto.getSeries().get(0); MarvelResponse<SeriesDto> serieResponse = new MarvelResponse<>(series); serieResponse.setResponse(seriesDto); return serieResponse; } else { throw new MarvelApiException("Series not found", null); } }
@Test(expected = IllegalArgumentException.class) public void shouldThrowExceptionWhenLimitIsZero() throws Exception { SeriesApiClient seriesApiClient = givenSeriesApiClient(); enqueueMockResponse(); seriesApiClient.getAll(ANY_OFFSET, INVALID_LIMIT); }
@Test public void shouldParseGetSeriesResponse() throws Exception { SeriesApiClient seriesApiClient = givenSeriesApiClient(); enqueueMockResponse("getSeries.json"); MarvelResponse<SeriesDto> series = seriesApiClient.getSeriesById(ANY_SERIE_ID); assertBasicMarvelResponse(series); SeriesDto response = series.getResponse(); assertIs5Ronnin(response); }
@Test(expected = IllegalArgumentException.class) public void shouldThrowExceptionWhenCallGetComicBySerieAndLimitIsZero() throws Exception { SeriesApiClient seriesApiClient = givenSeriesApiClient(); enqueueMockResponse(); seriesApiClient.getComicsBySeries(ANY_SERIE_ID, ANY_OFFSET, INVALID_LIMIT); }
@Test public void shouldSendOffsetAsLimitAsParamsWhenGetAll() throws Exception { SeriesApiClient seriesApiClient = givenSeriesApiClient(); enqueueMockResponse(); seriesApiClient.getAll(ANY_OFFSET, ANY_LIMIT); assertRequestSentToContains("offset=" + ANY_OFFSET, "limit=" + ANY_LIMIT); }
@Test(expected = MarvelApiException.class) public void shouldReturnMarvelExceptionWhenTheIdDoesNotExist() throws Exception { SeriesApiClient seriesApiClient = givenSeriesApiClient(); enqueueMockResponse(404, "{\"code\":404,\"status\":\"We couldn't find that series\"}"); try { seriesApiClient.getSeriesById(ANY_NOT_FOUND_ID); } catch (MarvelApiException e) { assertEquals("404", e.getMarvelCode()); assertEquals("We couldn't find that series", e.getMessage()); throw e; } }
@Test(expected = IllegalArgumentException.class) public void shouldThrowExceptionWhenCallGetComicBySerieAndSerieIdIsEmpty() throws Exception { SeriesApiClient seriesApiClient = givenSeriesApiClient(); enqueueMockResponse(); seriesApiClient.getComicsBySeries("", ANY_OFFSET, INVALID_LIMIT); }
@Test public void shouldParseGetAllSeriesResponse() throws Exception { SeriesApiClient seriesApiClient = givenSeriesApiClient(); enqueueMockResponse("getSeriesCollection.json"); MarvelResponse<SeriesCollectionDto> series = seriesApiClient.getAll(0, ANY_LIMIT); assertBasicMarvelResponse(series); assertGetAllSeriesResponseIsProperlyParsed(series); }