Skip to content

Commit 14896cf

Browse files
Merge pull request #979 from input-output-hk/test/lw-9018-fix-unit-tests
LW-9018 fix unit tests
2 parents 1d489d5 + a7357a3 commit 14896cf

File tree

4 files changed

+34
-8
lines changed

4 files changed

+34
-8
lines changed

packages/util/src/errors.ts

-6
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
import { CustomError } from 'ts-custom-error';
2-
import { toSerializableObject } from './serializableObject';
32

43
export const formatErrorMessage = (reason: string, detail?: string) => reason + (detail ? ` (${detail})` : '');
54

65
interface ErrorLike {
76
message: string;
87
stack: string;
9-
data?: unknown;
108
}
119

1210
interface WithInnerError {
@@ -66,10 +64,6 @@ export class ComposableError<InnerError = unknown> extends CustomError {
6664
[firstLineOfInnerErrorStack, ...innerErrorStack] = innerError.stack.split(ComposableError.stackDelimiter);
6765

6866
message = `${message} due to\n ${firstLineOfInnerErrorStack}`;
69-
70-
if (innerError.data) {
71-
innerError.data = toSerializableObject(innerError.data);
72-
}
7367
}
7468

7569
if (typeof innerError === 'string') message = `${message} due to\n ${innerError}`;

packages/util/src/serializableObject.ts

+10
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,12 @@ const defaultGetErrorPrototype: GetErrorPrototype = () => Error.prototype;
2323
const defaultTransformKey: TransformKey = (key) => key;
2424
const defaultTransformationTypeKey = '__type';
2525

26+
const hasInnerError = (error: unknown): error is { innerError: unknown } =>
27+
error !== null && typeof error === 'object' && 'innerError' in (error as never);
28+
29+
const innerErrorHasData = (innerError: unknown): innerError is { data: unknown } =>
30+
typeof innerError === 'object' && innerError !== null && 'data' in innerError;
31+
2632
export const toSerializableObject = (obj: unknown, options: ToSerializableObjectOptions = {}): unknown => {
2733
if (PLAIN_TYPES.has(typeof obj)) return obj;
2834
const { transformationTypeKey = defaultTransformationTypeKey, serializeKey = defaultTransformKey } = options;
@@ -41,7 +47,11 @@ export const toSerializableObject = (obj: unknown, options: ToSerializableObject
4147
const value = Buffer.from(arr).toString('hex');
4248
return { [transformationTypeKey]: 'Buffer', value };
4349
}
50+
4451
if (obj instanceof Error) {
52+
if (hasInnerError(obj) && innerErrorHasData(obj.innerError)) {
53+
obj.innerError.data = toSerializableObject(obj.innerError.data);
54+
}
4555
return {
4656
[transformationTypeKey]: 'Error',
4757
value: serializeError(obj)

packages/util/test/serializableObject.test.ts

+23
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
11
import { CustomError } from 'ts-custom-error';
22
import { FromSerializableObjectOptions, fromSerializableObject, toSerializableObject } from '../src';
33

4+
export class ErrorWithData extends CustomError {
5+
innerError: { data: unknown };
6+
7+
constructor(data: unknown, message: string) {
8+
super(message);
9+
this.innerError = { data };
10+
}
11+
}
12+
413
const serializeAndDeserialize = (obj: unknown, deserializeOptions?: FromSerializableObjectOptions) =>
514
fromSerializableObject(JSON.parse(JSON.stringify(toSerializableObject(obj))), deserializeOptions);
615

@@ -49,6 +58,20 @@ describe('serializableObject', () => {
4958
expect(deserialized).toBeInstanceOf(CustomError);
5059
});
5160

61+
it('supports error types with string data', () => {
62+
const err = new ErrorWithData('some-data', 'msg');
63+
const deserialized = serializeAndDeserialize(err, { getErrorPrototype: () => CustomError.prototype });
64+
expect(deserialized).toEqual(err);
65+
expect(deserialized).toBeInstanceOf(CustomError);
66+
});
67+
68+
it('supports error types with object data', () => {
69+
const err = new ErrorWithData({ bigIntProp: 15n }, 'msg');
70+
const deserialized = serializeAndDeserialize(err, { getErrorPrototype: () => CustomError.prototype });
71+
expect(deserialized).toEqual(err);
72+
expect(deserialized).toBeInstanceOf(CustomError);
73+
});
74+
5275
it('supports custom transformation discriminator key', () => {
5376
const customKeyOption = { transformationTypeKey: 'discriminator' };
5477
const obj = { bigint: 1n };

packages/wallet/test/services/WalletUtil.test.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -263,8 +263,7 @@ describe('WalletUtil', () => {
263263
tx.body.certificates = [
264264
{
265265
__typename: Cardano.CertificateType.Registration,
266-
// using foreign intentionally because registration is not signed so it should be accepted
267-
stakeKeyHash: foreignRewardAccountHash
266+
stakeKeyHash: mocks.stakeKeyHash
268267
} as Cardano.NewStakeAddressCertificate,
269268
{
270269
__typename: Cardano.CertificateType.Unregistration,

0 commit comments

Comments
 (0)