* #10 add localization * #10 revert locale from dev page * #10 add more examples * #10 localize auth panel * #10 localize some comment message * #10 localize some comment form message * #10 translate vote messages * #10 translate comment message * #10 use messages value for translate reference * #10 fix compile issue * #10 use messages value for translate reference * #10 use messages value for translate reference * #10 use messages value for translate reference * #10 use messages value for translate reference * #10 use messages value for translate reference * #10 translate comment message * #10 translate comment form * #10 translate comment form * #10 translate root component * #10 translate user info * #10 translate settings * #10 translate settings * #10 translate toolbar * #10 translate errors messages * #10 sort dict * #10 fix after rebase * #10 localize anonymousLoginForm * #10 localize emailLoginForm * #10 update size-limit * #10 localize subscribe by rss * #10 localize subscribe by email * #10 add de locale * #10 increase limit size * #10 auto generate loadLocale * #10 add some documentation * #10 fix error messages * fix typo * don't bundle en locale * fix message id * change size limits * Update extract message pattern Co-Authored-By: Pavel Mineev <pavel@mineev.me> Co-authored-by: Pavel Mineev <pavel@mineev.me>
85 lines
2.3 KiB
TypeScript
85 lines
2.3 KiB
TypeScript
import fetcher from './fetcher';
|
|
import { mockHeaders } from '@app/testUtils/mockHeaders';
|
|
|
|
describe('fetcher', () => {
|
|
beforeAll(() => {
|
|
mockHeaders.mock();
|
|
});
|
|
|
|
afterAll(() => {
|
|
mockHeaders.restore();
|
|
});
|
|
|
|
afterEach(() => {
|
|
(window.fetch as any).mockRestore();
|
|
});
|
|
|
|
describe('errors', () => {
|
|
it('should throw json on api json response with >= 400 status code', async () => {
|
|
const response = {
|
|
code: 2,
|
|
error: 'you just cant',
|
|
details: 'you just cant at all',
|
|
};
|
|
(window.fetch as any) = jest.fn().mockImplementation(async () => ({
|
|
status: 400,
|
|
headers: new (window as any).Headers(),
|
|
json: async () => response,
|
|
text: async () => JSON.stringify(response),
|
|
}));
|
|
|
|
return fetcher
|
|
.get('/api/some')
|
|
.then(data => {
|
|
fail(data);
|
|
})
|
|
.catch(e => {
|
|
expect(e.code).toBe(2);
|
|
expect(e.error).toBe('you just cant');
|
|
expect(e.details).toBe('you just cant at all');
|
|
});
|
|
});
|
|
it('should throw special error object on 401 status', async () => {
|
|
const response = '<html>unauthorized nginx response</html>';
|
|
(window.fetch as any) = jest.fn().mockImplementation(async () => ({
|
|
status: 401,
|
|
headers: new (window as any).Headers(),
|
|
json: async () => {
|
|
throw new Error('json parse error');
|
|
},
|
|
text: async () => response,
|
|
}));
|
|
|
|
return fetcher
|
|
.get('/api/some')
|
|
.then(data => {
|
|
fail(data);
|
|
})
|
|
.catch(e => {
|
|
expect(e.code).toBe(401);
|
|
expect(e.error).toBe('Not authorized.');
|
|
});
|
|
});
|
|
it('should throw "Something went wrong." object on unknown status', async () => {
|
|
(jest.spyOn(window, 'fetch') as any).mockImplementation(async () => ({
|
|
status: 400,
|
|
headers: new (window as any).Headers(),
|
|
json: async () => {
|
|
throw new Error('json parse error');
|
|
},
|
|
text: async () => 'you given me something wrong',
|
|
}));
|
|
|
|
return fetcher
|
|
.get({ url: '/api/some', logError: false })
|
|
.then(data => {
|
|
fail(data);
|
|
})
|
|
.catch(e => {
|
|
expect(e.code).toBe(0);
|
|
expect(e.error).toBe('Something went wrong.');
|
|
});
|
|
});
|
|
});
|
|
});
|