UNPKG

@zendesk/zcli-themes

Version:

zcli theme commands live here

218 lines (217 loc) 8.43 kB
"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' }]); }); });