Files
renovate/lib/logger/err-serializer.spec.ts
renovate[bot] 2561284dc4 build(deps): update dependency got to v15 (main) (#43120)
* build(deps): update dependency got to v15

| datasource | package | from   | to     |
| ---------- | ------- | ------ | ------ |
| npm        | got     | 14.6.6 | 15.0.5 |

* chore: adapt code to breaking changes

* test: fix test

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: secustor <sebastian@poxhofer.at>
Co-authored-by: Michael Kriese <michael.kriese@mend.io>
2026-09-09 09:01:11 +00:00

140 lines
3.4 KiB
TypeScript

import * as httpMock from '~test/http-mock.ts';
import { partial } from '~test/util.ts';
import * as hostRules from '../util/host-rules.ts';
import { Http } from '../util/http/index.ts';
import errSerializer from './err-serializer.ts';
import { sanitizeValue } from './utils.ts';
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)).toMatchObject({
message:
'Request failed with status code 412 (Precondition Failed): POST https://github.com/api',
name: 'HTTPError',
options: {
headers: {
authorization: '***********',
},
method: 'POST',
password: '***********',
url: 'https://**redacted**@github.com/api',
username: '',
},
});
});
it('handles AggregateErrors', () => {
const err = partial<Error & Record<string, unknown>>({
message: 'foo',
stack: 'error stack',
body: 'error body',
});
const aggregateError = new AggregateError([err], 'bar');
aggregateError.stack = 'aggregate stack';
expect(errSerializer(aggregateError)).toEqual({
message: 'bar',
stack: 'aggregate stack',
errors: [
{
message: 'foo',
body: 'error body',
stack: 'error stack',
},
],
});
});
});
});