renovate/lib/logger/err-serializer.spec.ts

114 lines
2.6 KiB
TypeScript

import * as httpMock from '../../test/http-mock';
import { partial } from '../../test/util';
import * as hostRules from '../util/host-rules';
import { Http } from '../util/http';
import errSerializer from './err-serializer';
import { sanitizeValue } from './utils';
describe('logger/err-serializer', () => {
it('expands errors', () => {
const err = partial<Error & Record<string, unknown>>({
a: 1,
b: 2,
message: 'some message',
response: {
body: 'some response body',
url: 'some/path',
},
options: {
headers: {
authorization: 'Bearer testtoken',
},
},
});
expect(errSerializer(err)).toEqual({
a: 1,
b: 2,
message: 'some message',
response: {
body: 'some response body',
url: 'some/path',
},
options: {
headers: {
authorization: 'Bearer testtoken',
},
},
});
});
it('handles missing fields', () => {
const err = partial<Error & Record<string, unknown>>({
a: 1,
stack: 'foo',
body: 'some body',
});
expect(errSerializer(err)).toEqual({
a: 1,
stack: 'foo',
body: 'some body',
});
});
describe('got', () => {
const baseUrl = 'https://github.com';
beforeEach(() => {
// clean up hostRules
hostRules.clear();
hostRules.add({
hostType: 'any',
matchHost: baseUrl,
token: 'token',
});
});
it('handles http error', async () => {
httpMock
.scope(baseUrl)
.post('/api')
.reply(412, { err: { message: 'failed' } });
let err: any;
try {
await new Http('any').postJson('https://:token@github.com/api');
} catch (error) {
err = errSerializer(error);
}
expect(err).toBeDefined();
expect(err.response.body).toBeDefined();
expect(err.options).toBeDefined();
});
it('sanitize http error', async () => {
httpMock
.scope(baseUrl)
.post('/api')
.reply(412, { err: { message: 'failed' } });
let err: any;
try {
await new Http('any').postJson('https://:token@github.com/api');
} catch (error) {
err = error;
}
expect(err).toBeDefined();
// remove platform related props
delete err.timings;
delete err.stack;
// sanitize like Bunyan
expect(sanitizeValue(err)).toMatchSnapshot({
name: 'HTTPError',
options: {
method: 'POST',
password: '***********',
url: 'https://**redacted**@github.com/api',
username: '',
},
});
});
});
});