@zendesk/zcli-themes
Version:
zcli theme commands live here
218 lines (217 loc) • 8.43 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const test_1 = require("@oclif/test");
const parseAxiosError_1 = require("./parseAxiosError");
describe('parseAxiosError', () => {
it('extracts message and response from a standard AxiosError', () => {
var _a, _b;
const mockResponse = {
status: 400,
statusText: 'Bad Request',
data: { errors: [{ code: 'TestError', title: 'Test error' }] },
headers: {},
config: {}
};
const error = {
message: 'Request failed with status code 400',
name: 'AxiosError',
isAxiosError: true,
toJSON: () => ({}),
response: mockResponse,
config: {}
};
const result = (0, parseAxiosError_1.default)(error);
(0, test_1.expect)(result.message).to.equal('Request failed with status code 400');
(0, test_1.expect)(result.response).to.not.equal(undefined);
(0, test_1.expect)((_a = result.response) === null || _a === void 0 ? void 0 : _a.status).to.equal(400);
(0, test_1.expect)((_b = result.response) === null || _b === void 0 ? void 0 : _b.data).to.deep.equal({
errors: [{ code: 'TestError', title: 'Test error' }]
});
});
it('extracts response from error.cause when using fetch adapter', () => {
var _a, _b;
const mockResponse = {
status: 400,
statusText: 'Bad Request',
data: { errors: [{ code: 'FetchError', title: 'Fetch error' }] },
headers: {},
config: {}
};
const error = {
message: 'Request failed with status code 400',
name: 'AxiosError',
isAxiosError: true,
toJSON: () => ({}),
response: undefined,
config: {},
cause: {
response: mockResponse
}
};
const result = (0, parseAxiosError_1.default)(error);
(0, test_1.expect)(result.message).to.equal('Request failed with status code 400');
(0, test_1.expect)(result.response).to.not.equal(undefined);
(0, test_1.expect)((_a = result.response) === null || _a === void 0 ? void 0 : _a.status).to.equal(400);
(0, test_1.expect)((_b = result.response) === null || _b === void 0 ? void 0 : _b.data).to.deep.equal({
errors: [{ code: 'FetchError', title: 'Fetch error' }]
});
});
it('parses JSON string data from fetch adapter response', () => {
var _a;
const mockResponse = {
status: 400,
statusText: 'Bad Request',
data: '{"errors":[{"code":"JSONError","title":"JSON error"}]}',
headers: {},
config: {}
};
const error = {
message: 'Request failed with status code 400',
name: 'AxiosError',
isAxiosError: true,
toJSON: () => ({}),
response: undefined,
config: {},
cause: {
response: mockResponse
}
};
const result = (0, parseAxiosError_1.default)(error);
(0, test_1.expect)(result.message).to.equal('Request failed with status code 400');
(0, test_1.expect)(result.response).to.not.equal(undefined);
(0, test_1.expect)((_a = result.response) === null || _a === void 0 ? void 0 : _a.data).to.deep.equal({
errors: [{ code: 'JSONError', title: 'JSON error' }]
});
});
it('handles response with JSON string data directly on response', () => {
var _a;
const mockResponse = {
status: 400,
statusText: 'Bad Request',
data: '{"template_errors":{"home_page":[{"description":"error"}]}}',
headers: {},
config: {}
};
const error = {
message: 'Request failed with status code 400',
name: 'AxiosError',
isAxiosError: true,
toJSON: () => ({}),
response: mockResponse,
config: {}
};
const result = (0, parseAxiosError_1.default)(error);
(0, test_1.expect)((_a = result.response) === null || _a === void 0 ? void 0 : _a.data).to.deep.equal({
template_errors: {
home_page: [{ description: 'error' }]
}
});
});
it('keeps string data as-is when it is not JSON', () => {
var _a;
const mockResponse = {
status: 500,
statusText: 'Internal Server Error',
data: 'Plain text error message',
headers: {},
config: {}
};
const error = {
message: 'Request failed with status code 500',
name: 'AxiosError',
isAxiosError: true,
toJSON: () => ({}),
response: mockResponse,
config: {}
};
const result = (0, parseAxiosError_1.default)(error);
(0, test_1.expect)((_a = result.response) === null || _a === void 0 ? void 0 : _a.data).to.equal('Plain text error message');
});
it('keeps string data as-is when JSON parsing fails', () => {
var _a;
const mockResponse = {
status: 400,
statusText: 'Bad Request',
data: '{invalid json}',
headers: {},
config: {}
};
const error = {
message: 'Request failed with status code 400',
name: 'AxiosError',
isAxiosError: true,
toJSON: () => ({}),
response: mockResponse,
config: {}
};
const result = (0, parseAxiosError_1.default)(error);
(0, test_1.expect)((_a = result.response) === null || _a === void 0 ? void 0 : _a.data).to.equal('{invalid json}');
});
it('returns undefined response when no response exists', () => {
const error = {
message: 'Network Error',
name: 'AxiosError',
isAxiosError: true,
toJSON: () => ({}),
response: undefined,
config: {}
};
const result = (0, parseAxiosError_1.default)(error);
(0, test_1.expect)(result.message).to.equal('Network Error');
(0, test_1.expect)(result.response === undefined).to.equal(true);
});
it('returns undefined response when neither response nor cause.response exists', () => {
const error = {
message: 'Network Error',
name: 'AxiosError',
isAxiosError: true,
toJSON: () => ({}),
response: undefined,
config: {},
cause: {}
};
const result = (0, parseAxiosError_1.default)(error);
(0, test_1.expect)(result.message).to.equal('Network Error');
(0, test_1.expect)(result.response === undefined).to.equal(true);
});
it('parses JSON string when content-type is application/json', () => {
var _a;
const mockResponse = {
status: 400,
statusText: 'Bad Request',
data: '{"error":"Server error"}',
headers: { 'content-type': 'application/json; charset=utf-8' },
config: {}
};
const error = {
message: 'Request failed',
name: 'AxiosError',
isAxiosError: true,
toJSON: () => ({}),
response: mockResponse,
config: {}
};
const result = (0, parseAxiosError_1.default)(error);
(0, test_1.expect)((_a = result.response) === null || _a === void 0 ? void 0 : _a.data).to.deep.equal({ error: 'Server error' });
});
it('parses JSON array string data', () => {
var _a;
const mockResponse = {
status: 200,
statusText: 'OK',
data: '[{"id":1,"name":"test"}]',
headers: {},
config: {}
};
const error = {
message: 'Request failed',
name: 'AxiosError',
isAxiosError: true,
toJSON: () => ({}),
response: mockResponse,
config: {}
};
const result = (0, parseAxiosError_1.default)(error);
(0, test_1.expect)((_a = result.response) === null || _a === void 0 ? void 0 : _a.data).to.deep.equal([{ id: 1, name: 'test' }]);
});
});