@Override public PaginatedCollection<Character> getPage(Page page) throws MarvelApiException { int offset = page.getOffset(); int limit = page.getLimit(); MarvelResponse<CharactersDto> charactersApiResponse = characterApiClient.getAll(offset, limit); CharactersDto charactersDto = charactersApiResponse.getResponse(); Collection<Character> characters = mapper.reverseMap(charactersDto.getCharacters()); PaginatedCollection<Character> charactersPage = new PaginatedCollection<>(characters); charactersPage.setPage(page); charactersPage.setHasMore( charactersDto.getOffset() + charactersDto.getCount() < charactersDto.getTotal()); return charactersPage; } }
PaginatedReadableDataSource<String, Character> createDataSource() { if (hasKeys()) { MarvelApiConfig marvelApiConfig = MarvelApiConfig.with(BuildConfig.MARVEL_PUBLIC_KEY, BuildConfig.MARVEL_PRIVATE_KEY); CharacterApiClient characterApiClient = new CharacterApiClient(marvelApiConfig); return new CharactersApiDataSource(characterApiClient); } else { return new CharactersFakeDataSource(); } }
@Override public Character getByKey(String key) throws Exception { MarvelResponse<CharacterDto> characterResponse = characterApiClient.getCharacter(key); CharacterDto characterDto = characterResponse.getResponse(); return mapper.reverseMap(characterDto); }
CharacterApiClient characterApiClient = new CharacterApiClient(marvelApiConfig); CharactersQuery spider = CharactersQuery.Builder.create().withOffset(0).withLimit(10).build(); MarvelResponse<CharactersDto> all = characterApiClient.getAll(spider); System.out.println(all.toString()); } else if (operation.equals("getCharacter")) { CharacterApiClient characterApiClient = new CharacterApiClient(marvelApiConfig); MarvelResponse<CharacterDto> character = characterApiClient.getCharacter("1011334"); System.out.println(character.toString()); } else if (operation.equals("getComics")) {
public MarvelResponse<CharactersDto> getAll(CharactersQuery charactersQuery) throws MarvelApiException { CharacterApiRest api = getApi(CharacterApiRest.class); Map<String, Object> queryAsMap = charactersQuery.toMap(); Call<MarvelResponse<CharactersDto>> call = api.getCharacters(queryAsMap); return execute(call); }
public MarvelResponse<CharacterDto> getCharacter(String characterId) throws MarvelApiException { if (characterId == null || characterId.isEmpty()) { throw new IllegalArgumentException("The CharacterId must not be null or empty"); } CharacterApiRest api = getApi(CharacterApiRest.class); Call<MarvelResponse<CharactersDto>> call = api.getCharacter(characterId); MarvelResponse<CharactersDto> characters = execute(call); CharactersDto charactersDto = characters.getResponse(); if (charactersDto != null && charactersDto.getCount() > 0) { CharacterDto characterDto = charactersDto.getCharacters().get(0); MarvelResponse<CharacterDto> characterResponse = new MarvelResponse<>(characters); characterResponse.setResponse(characterDto); return characterResponse; } else { throw new MarvelApiException("Character not found", null); } } }
public MarvelResponse<CharactersDto> getAll(int offset, int limit) throws MarvelApiException { CharactersQuery query = CharactersQuery.Builder.create().withOffset(offset).withLimit(limit).build(); return getAll(query); }
@Test(expected = IllegalArgumentException.class) public void shouldNotAcceptEmptyCharacterIds() throws Exception { CharacterApiClient characterApiClient = givenCharacterApiClient(); characterApiClient.getCharacter(INVALID_CHARACTER_ID); }
private CharacterApiClient givenCharacterApiClient() { 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 CharacterApiClient(marvelApiConfig); }
@Test(expected = IllegalArgumentException.class) public void shouldThrowExceptionWhenLimitIsZero() throws Exception { CharacterApiClient characterApiClient = givenCharacterApiClient(); enqueueMockResponse(); characterApiClient.getAll(ANY_OFFSET, INVALID_LIMIT); }
@Test public void shouldSendGetCharacterRequestToTheCorrectEndpoint() throws Exception { CharacterApiClient characterApiClient = givenCharacterApiClient(); enqueueMockResponse("getCharacter.json"); characterApiClient.getCharacter(THREED_MAN_CHARACTER_ID); assertRequestSentToContains("characters/" + THREED_MAN_CHARACTER_ID); }
@Test public void shouldRequestCharactersByOffsetAndLimitWithAsParams() throws Exception { CharacterApiClient characterApiClient = givenCharacterApiClient(); enqueueMockResponse(); characterApiClient.getAll(ANY_OFFSET, ANY_LIMIT); assertRequestSentToContains("offset=" + ANY_OFFSET, "limit=" + ANY_LIMIT); }
@Test public void shouldParseGetCharacterResponse() throws Exception { CharacterApiClient characterApiClient = givenCharacterApiClient(); enqueueMockResponse("getCharacter.json"); MarvelResponse<CharacterDto> character = characterApiClient.getCharacter(THREED_MAN_CHARACTER_ID); assertBasicMarvelResponse(character); CharacterDto response = character.getResponse(); assertIs3dManCharacter(response); }
@Test public void shouldParseGetAllCharactersResponse() throws Exception { CharacterApiClient characterApiClient = givenCharacterApiClient(); enqueueMockResponse("getCharacters.json"); MarvelResponse<CharactersDto> characters = characterApiClient.getAll(0, ANY_LIMIT); assertBasicMarvelResponse(characters); assertGetAllCharactersResponseIsProperlyParsed(characters); }
@Test(expected = MarvelApiException.class) public void shouldReturnMarvelExceptionWhenTheIdDoesNotExist() throws Exception { CharacterApiClient characterApiClient = givenCharacterApiClient(); enqueueMockResponse(404, "{\"code\":404,\"status\":\"We couldn't find that character\"}"); try { characterApiClient.getCharacter(ANY_NOT_FOUND_ID); } catch (MarvelApiException e) { assertEquals("404", e.getMarvelCode()); assertEquals("We couldn't find that character", e.getMessage()); throw e; } }
@Test(expected = MarvelAuthApiException.class) public void shouldThrowMarvelApiExceptionOnAuthHttpError() throws Exception { CharacterApiClient characterApiClient = givenCharacterApiClient(); enqueueMockResponse(401, "{\"code\":\"InvalidCredentials\",\"message\":\"That hash, timestamp and key " + "combination is invalid.\"}"); try { characterApiClient.getAll(ANY_OFFSET, ANY_LIMIT); } catch (MarvelApiException e) { assertEquals("InvalidCredentials", e.getMarvelCode()); assertEquals("That hash, timestamp and key combination is invalid.", e.getMessage()); throw e; } }
@Test public void shouldRequestCharactersUsingAllTheRequestParams() throws Exception { CharacterApiClient characterApiClient = givenCharacterApiClient(); enqueueMockResponse(); CharactersQuery query = CharactersQuery.Builder.create() .withName(ANY_NAME) .withNameStartWith(ANY_START_NAME) .withLimit(ANY_LIMIT) .withOffset(ANY_OFFSET) .withModifiedSince(getAnyDate()) .withOrderBy(OrderBy.NAME, false) .addComic(ANY_COMIC_1) .addComic(ANY_COMIC_2) .addEvents(getAnyEvents()) .addSerie(ANY_SERIE) .addStory(ANY_STORY) .build(); characterApiClient.getAll(query); assertRequestSentToContains("offset=" + ANY_OFFSET, "limit=" + ANY_LIMIT, "name=" + ANY_NAME, "nameStartsWith=" + ANY_START_NAME, "modifiedSince=" + ANY_MODIFIED_SINCE, "orderBy=" + ORDER_NAME_DESCEDANT_VALUE, "comics=" + COMICS_REQUEST, "events=" + EVENTS_REQUEST, "series=" + ANY_SERIE, "stories=" + ANY_STORY); }