-
Notifications
You must be signed in to change notification settings - Fork 542
/
rpc.test.ts
129 lines (116 loc) · 3.88 KB
/
rpc.test.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
import { PermissionType } from '@metamask/permission-controller';
import { SnapCaveatType } from '@metamask/snaps-utils';
import { SnapEndowments } from '.';
import {
getRpcCaveatMapper,
getRpcCaveatOrigins,
rpcCaveatSpecifications,
rpcEndowmentBuilder,
} from './rpc';
describe('endowment:rpc', () => {
it('builds the expected permission specification', () => {
const specification = rpcEndowmentBuilder.specificationBuilder({});
expect(specification).toStrictEqual({
permissionType: PermissionType.Endowment,
targetKey: SnapEndowments.Rpc,
endowmentGetter: expect.any(Function),
allowedCaveats: [SnapCaveatType.RpcOrigin],
validator: expect.any(Function),
});
expect(specification.endowmentGetter()).toBeUndefined();
});
describe('validator', () => {
it('throws if the caveat is not a single "transactionOrigin"', () => {
const specification = rpcEndowmentBuilder.specificationBuilder({});
expect(() =>
specification.validator({
// @ts-expect-error Missing other required permission types.
caveats: undefined,
}),
).toThrow('Expected a single "rpcOrigin" caveat.');
expect(() =>
// @ts-expect-error Missing other required permission types.
specification.validator({
caveats: [{ type: 'foo', value: 'bar' }],
}),
).toThrow('Expected a single "rpcOrigin" caveat.');
expect(() =>
// @ts-expect-error Missing other required permission types.
specification.validator({
caveats: [
{ type: 'rpcOrigin', value: { snaps: true, dapps: false } },
{ type: 'rpcOrigin', value: { snaps: true, dapps: false } },
],
}),
).toThrow('Expected a single "rpcOrigin" caveat.');
});
});
});
describe('getRpcCaveatMapper', () => {
it('maps a value to a caveat', () => {
expect(getRpcCaveatMapper({ snaps: true, dapps: false })).toStrictEqual({
caveats: [
{
type: SnapCaveatType.RpcOrigin,
value: { snaps: true, dapps: false },
},
],
});
});
});
describe('getRpcCaveatOrigins', () => {
it('returns the origins from the caveat', () => {
expect(
// @ts-expect-error Missing other required permission types.
getRpcCaveatOrigins({
caveats: [
{
type: SnapCaveatType.RpcOrigin,
value: { snaps: true, dapps: false },
},
],
}),
).toStrictEqual({ snaps: true, dapps: false });
});
it('throws if the caveat is not a single "rpcOrigin"', () => {
expect(() =>
// @ts-expect-error Missing other required permission types.
getRpcCaveatOrigins({
caveats: [{ type: 'foo', value: 'bar' }],
}),
).toThrow('Assertion failed.');
expect(() =>
// @ts-expect-error Missing other required permission types.
getRpcCaveatOrigins({
caveats: [
{ type: 'rpcOrigin', value: { snaps: true, dapps: false } },
{ type: 'rpcOrigin', value: { snaps: true, dapps: false } },
],
}),
).toThrow('Assertion failed.');
});
});
describe('rpcCaveatSpecifications', () => {
describe('validator', () => {
it('throws if the caveat values are invalid', () => {
expect(() =>
rpcCaveatSpecifications[SnapCaveatType.RpcOrigin].validator?.(
// @ts-expect-error Missing value type.
{
type: SnapCaveatType.TransactionOrigin,
},
),
).toThrow('Invalid JSON-RPC origins: Expected a plain object.');
expect(() =>
rpcCaveatSpecifications[SnapCaveatType.RpcOrigin].validator?.({
type: SnapCaveatType.TransactionOrigin,
value: {
foo: 'bar',
},
}),
).toThrow(
'Invalid JSON-RPC origins: At path: foo -- Expected a value of type `never`, but received: `"bar"`.',
);
});
});
});