Skip to content

Commit 4b80009

Browse files
Add tests
1 parent a6710d1 commit 4b80009

File tree

4 files changed

+94
-9
lines changed

4 files changed

+94
-9
lines changed
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
2-
"branches": 93.42,
2+
"branches": 93.46,
33
"functions": 97.38,
4-
"lines": 98.34,
4+
"lines": 98.35,
55
"statements": 98.08
66
}

packages/snaps-controllers/src/snaps/SnapController.test.tsx

Lines changed: 82 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,12 @@ import {
1919
SnapEndowments,
2020
} from '@metamask/snaps-rpc-methods';
2121
import type { SnapId } from '@metamask/snaps-sdk';
22-
import { AuxiliaryFileEncoding, text } from '@metamask/snaps-sdk';
23-
import { Text } from '@metamask/snaps-sdk/jsx';
22+
import {
23+
AuxiliaryFileEncoding,
24+
text,
25+
UserInputEventType,
26+
} from '@metamask/snaps-sdk';
27+
import { Text, Box, Button } from '@metamask/snaps-sdk/jsx';
2428
import type { SnapPermissions, RpcOrigins } from '@metamask/snaps-utils';
2529
import {
2630
getPlatformVersion,
@@ -2242,7 +2246,11 @@ describe('SnapController', () => {
22422246
snapId: snap.id,
22432247
origin: MOCK_ORIGIN,
22442248
handler: HandlerType.OnUserInput,
2245-
request: { jsonrpc: '2.0', method: 'test' },
2249+
request: {
2250+
jsonrpc: '2.0',
2251+
method: 'test',
2252+
params: { id: MOCK_INTERFACE_ID },
2253+
},
22462254
}),
22472255
).toBeUndefined();
22482256

@@ -2770,6 +2778,77 @@ describe('SnapController', () => {
27702778
snapController.destroy();
27712779
});
27722780

2781+
it('injects context into onUserInput', async () => {
2782+
const rootMessenger = getControllerMessenger();
2783+
const messenger = getSnapControllerMessenger(rootMessenger);
2784+
const snapController = getSnapController(
2785+
getSnapControllerOptions({
2786+
messenger,
2787+
state: {
2788+
snaps: getPersistedSnapsState(),
2789+
},
2790+
}),
2791+
);
2792+
2793+
rootMessenger.registerActionHandler(
2794+
'SnapInterfaceController:getInterface',
2795+
() => ({
2796+
id: MOCK_INTERFACE_ID,
2797+
snapId: MOCK_SNAP_ID,
2798+
content: (
2799+
<Box>
2800+
<Button name="button">Click me</Button>
2801+
</Box>
2802+
),
2803+
state: {},
2804+
context: { foo: 'bar' },
2805+
contentType: null,
2806+
}),
2807+
);
2808+
2809+
await snapController.handleRequest({
2810+
snapId: MOCK_SNAP_ID,
2811+
origin: MOCK_ORIGIN,
2812+
handler: HandlerType.OnUserInput,
2813+
request: {
2814+
jsonrpc: '2.0',
2815+
method: ' ',
2816+
params: {
2817+
id: MOCK_INTERFACE_ID,
2818+
event: {
2819+
type: UserInputEventType.ButtonClickEvent,
2820+
name: 'button',
2821+
},
2822+
},
2823+
},
2824+
});
2825+
2826+
expect(rootMessenger.call).toHaveBeenNthCalledWith(
2827+
4,
2828+
'ExecutionService:handleRpcRequest',
2829+
MOCK_SNAP_ID,
2830+
{
2831+
origin: MOCK_ORIGIN,
2832+
handler: HandlerType.OnUserInput,
2833+
request: {
2834+
id: expect.any(String),
2835+
method: ' ',
2836+
jsonrpc: '2.0',
2837+
params: {
2838+
id: MOCK_INTERFACE_ID,
2839+
event: {
2840+
type: UserInputEventType.ButtonClickEvent,
2841+
name: 'button',
2842+
},
2843+
context: { foo: 'bar' },
2844+
},
2845+
},
2846+
},
2847+
);
2848+
2849+
snapController.destroy();
2850+
});
2851+
27732852
it('throws if onTransaction handler returns a phishing link', async () => {
27742853
const rootMessenger = getControllerMessenger();
27752854
const messenger = getSnapControllerMessenger(rootMessenger);

packages/snaps-controllers/src/snaps/SnapController.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3789,15 +3789,15 @@ export class SnapController extends BaseController<
37893789
assert(request.params && hasProperty(request.params, 'id'));
37903790

37913791
const interfaceId = request.params.id as string;
3792-
const interfaceState = this.messagingSystem.call(
3792+
const { context } = this.messagingSystem.call(
37933793
'SnapInterfaceController:getInterface',
37943794
snapId,
37953795
interfaceId,
37963796
);
37973797

37983798
return {
37993799
...request,
3800-
params: { ...request.params, context: interfaceState.context },
3800+
params: { ...request.params, context },
38013801
};
38023802
}
38033803

packages/snaps-controllers/src/test-utils/controller.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ import {
2222
SnapEndowments,
2323
WALLET_SNAP_PERMISSION_KEY,
2424
} from '@metamask/snaps-rpc-methods';
25-
import type { SnapId, text } from '@metamask/snaps-sdk';
25+
import type { SnapId } from '@metamask/snaps-sdk';
26+
import { text } from '@metamask/snaps-sdk';
2627
import { SnapCaveatType } from '@metamask/snaps-utils';
2728
import {
2829
MockControllerMessenger,
@@ -440,7 +441,12 @@ export const getControllerMessenger = (registry = new MockSnapsRegistry()) => {
440441
if (id !== MOCK_INTERFACE_ID) {
441442
throw new Error(`Interface with id '${id}' not found.`);
442443
}
443-
return { snapId, content: text('foo bar'), state: {} } as StoredInterface;
444+
return {
445+
snapId,
446+
content: text('foo bar'),
447+
state: {},
448+
context: null,
449+
} as StoredInterface;
444450
},
445451
);
446452

0 commit comments

Comments
 (0)