Skip to content

Commit

Permalink
Document "429 Too Many Requests"
Browse files Browse the repository at this point in the history
  • Loading branch information
tkrotoff committed Dec 5, 2021
1 parent 8be4d8e commit 13984ce
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 10 deletions.
17 changes: 16 additions & 1 deletion src/Heroes.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ test('render "No results found :("', async () => {
getByText('No results found :(');
});

test('fetchCharacters() error', () => {
test('fetchCharacters() error "500 Internal Server Error"', () => {
const consoleSpy = jest.spyOn(console, 'error').mockImplementation();

expect(() =>
Expand All @@ -75,3 +75,18 @@ test('fetchCharacters() error', () => {

consoleSpy.mockRestore();
});

test('fetchCharacters() error "429 Too Many Requests"', () => {
const consoleSpy = jest.spyOn(console, 'error').mockImplementation();

expect(() =>
render(
<MemoryRouter>
<Heroes page={429} />
</MemoryRouter>
)
).toThrow('429 Too Many Requests');
expect(fetchCharactersSpy).toHaveBeenCalledTimes(1);

consoleSpy.mockRestore();
});
43 changes: 34 additions & 9 deletions src/api/Marvel.test.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
/* eslint-disable jest/no-mocks-import */

import { fakeFetchResponseError, fakeFetchResponseSuccess } from '../utils/fakeFetchResponse';
import { config } from '../config';
import character_id_1011334 from './__mocks__/character_id_1011334.json';
import characters_offset_0 from './__mocks__/characters_offset_0.json';
import characters_offset_10200 from './__mocks__/characters_offset_10200.json';
import * as Marvel from './Marvel';

test('getQueryParams()', () => {
Expand All @@ -15,28 +17,51 @@ test('getQueryParams()', () => {
);
});

describe('fetch*()', () => {
const fetchSpy = jest.spyOn(window, 'fetch');
afterEach(fetchSpy.mockClear);
const fetchSpy = jest.spyOn(window, 'fetch');
afterEach(fetchSpy.mockClear);

test('fetchCharacters() success', async () => {
describe('fetchCharacters()', () => {
test('success "200 OK"', async () => {
fetchSpy.mockResolvedValue(fakeFetchResponseSuccess(characters_offset_0));

const characters = await Marvel.fetchCharacters(0);
const characters = await Marvel.fetchCharacters(0 * config.nbCharactersPerPage);
expect(characters).toEqual(characters_offset_0.data.results);

expect(fetchSpy).toHaveBeenCalledTimes(1);
});

test('fetchCharacters() error', async () => {
test('success "200 OK" with empty data.results', async () => {
fetchSpy.mockResolvedValue(fakeFetchResponseSuccess(characters_offset_10200));

const characters = await Marvel.fetchCharacters(204 * config.nbCharactersPerPage);
expect(characters).toEqual(characters_offset_10200.data.results);

expect(fetchSpy).toHaveBeenCalledTimes(1);
});

test('error "500 Internal Server Error"', async () => {
fetchSpy.mockResolvedValue(fakeFetchResponseError('500 Internal Server Error'));

await expect(Marvel.fetchCharacters(0)).rejects.toThrow('500 Internal Server Error');
await expect(Marvel.fetchCharacters(500 * config.nbCharactersPerPage)).rejects.toThrow(
'500 Internal Server Error'
);

expect(fetchSpy).toHaveBeenCalledTimes(1);
});

test('fetchCharacter() success', async () => {
test('error "429 Too Many Requests"', async () => {
fetchSpy.mockResolvedValue(fakeFetchResponseError('429 Too Many Requests'));

await expect(Marvel.fetchCharacters(429 * config.nbCharactersPerPage)).rejects.toThrow(
'429 Too Many Requests'
);

expect(fetchSpy).toHaveBeenCalledTimes(1);
});
});

describe('fetchCharacter()', () => {
test('success "200 OK"', async () => {
fetchSpy.mockResolvedValue(fakeFetchResponseSuccess(character_id_1011334));

const characters = await Marvel.fetchCharacter('1011334');
Expand All @@ -45,7 +70,7 @@ describe('fetch*()', () => {
expect(fetchSpy).toHaveBeenCalledTimes(1);
});

test('fetchCharacter() error', async () => {
test('error "404 Not Found"', async () => {
fetchSpy.mockResolvedValue(fakeFetchResponseError('404 Not Found'));

await expect(Marvel.fetchCharacter('unknown')).rejects.toThrow('404 Not Found');
Expand Down
2 changes: 2 additions & 0 deletions src/api/__mocks__/Marvel.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ export function fetchCharacters(offset: number) {
case 204 /* 204 No Content ;-) */ * config.nbCharactersPerPage:
characters = characters_offset_10200.data.results;
break;
case 429 /* 429 Too Many Requests */ * config.nbCharactersPerPage:
throw new Error('429 Too Many Requests');
case 500 * config.nbCharactersPerPage:
throw new Error('500 Internal Server Error');
default:
Expand Down

0 comments on commit 13984ce

Please sign in to comment.