Skip to content
2 changes: 1 addition & 1 deletion src/RESTController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ const RESTController = {
const responseHeaders = {};
const availableHeaders = response.headers.get('access-control-expose-headers') || '';
availableHeaders.split(', ').forEach((header: string) => {
if (response.headers.has(header)) {
if (header && response.headers.has(header)) {
responseHeaders[header] = response.headers.get(header);
}
});
Expand Down
14 changes: 14 additions & 0 deletions src/__tests__/RESTController-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,20 @@ describe('RESTController', () => {
expect(status).toBe(200);
});

it('resolves without error when access-control-expose-headers header is missing', async () => {
mockFetch([{ status: 200, response: { success: true } }], {});
const { response, status } = await RESTController.ajax('POST', 'users', {});
expect(response).toEqual({ success: true });
expect(status).toBe(200);
});

it('resolves without error when access-control-expose-headers header is empty', async () => {
mockFetch([{ status: 200, response: { success: true } }], { 'access-control-expose-headers': '' });
const { response, status } = await RESTController.ajax('POST', 'users', {});
expect(response).toEqual({ success: true });
expect(status).toBe(200);
});

it('retries on 5XX errors', async () => {
mockFetch([{ status: 500 }, { status: 500 }, { status: 200, response: { success: true } }])
const { response, status } = await RESTController.ajax('POST', 'users', {});
Expand Down
7 changes: 6 additions & 1 deletion src/__tests__/test_helpers/mockFetch.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,12 @@ function mockFetch(results, headers = {}, error) {
},
headers: {
get: header => headers[header],
has: header => headers[header] !== undefined,
has: header => {
if (header === '') {
throw new TypeError('Invalid empty header name.');
}
return headers[header] !== undefined;
},
},
body: {
getReader: () => ({
Expand Down