Skip to content

Commit 59d5c6b

Browse files
committed
improve logic
1 parent 212845b commit 59d5c6b

File tree

6 files changed

+497
-47
lines changed

6 files changed

+497
-47
lines changed

packages/snaps-controllers/src/interface/SnapInterfaceController.test.tsx

Lines changed: 194 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -222,16 +222,6 @@ describe('SnapInterfaceController', () => {
222222
<Field label="Bar">
223223
<Input name="bar" type="text" />
224224
</Field>
225-
<Field label="baz">
226-
<AccountSelector
227-
name="baz"
228-
switchGlobalAccount
229-
value="solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp:7S3P4HxJpyyigGzodYwHtCxZyUQe9JiBMHyRWXArAaKv"
230-
/>
231-
</Field>
232-
<Field label="foobar">
233-
<AccountSelector name="foobar" />
234-
</Field>
235225
</Form>
236226
</Box>
237227
);
@@ -254,37 +244,217 @@ describe('SnapInterfaceController', () => {
254244
'https://foo.bar/',
255245
);
256246

247+
expect(content).toStrictEqual(element);
248+
expect(state).toStrictEqual({
249+
foo: {
250+
bar: null,
251+
},
252+
});
253+
});
254+
255+
it('can retrieve the selected account from the client', async () => {
256+
const rootMessenger = getRootSnapInterfaceControllerMessenger();
257+
const controllerMessenger =
258+
getRestrictedSnapInterfaceControllerMessenger(rootMessenger);
259+
260+
// eslint-disable-next-line no-new
261+
new SnapInterfaceController({
262+
messenger: controllerMessenger,
263+
});
264+
265+
const element = (
266+
<Box>
267+
<AccountSelector name="foo" />
268+
</Box>
269+
);
270+
271+
const id = await rootMessenger.call(
272+
'SnapInterfaceController:createInterface',
273+
MOCK_SNAP_ID,
274+
element,
275+
);
276+
277+
const { content, state } = rootMessenger.call(
278+
'SnapInterfaceController:getInterface',
279+
MOCK_SNAP_ID,
280+
id,
281+
);
282+
257283
expect(rootMessenger.call).toHaveBeenNthCalledWith(
258-
4,
284+
2,
285+
'AccountsController:getSelectedMultichainAccount',
286+
);
287+
288+
expect(content).toStrictEqual(element);
289+
expect(state).toStrictEqual({
290+
foo: {
291+
accountId: MOCK_ACCOUNT_ID,
292+
addresses: ['eip155:0:0x1234567890123456789012345678901234567890'],
293+
},
294+
});
295+
});
296+
297+
it('can switch the currently selected account in the client', async () => {
298+
const rootMessenger = getRootSnapInterfaceControllerMessenger();
299+
const controllerMessenger = getRestrictedSnapInterfaceControllerMessenger(
300+
rootMessenger,
301+
false,
302+
);
303+
304+
rootMessenger.registerActionHandler(
305+
'AccountsController:getAccountByAddress',
306+
// @ts-expect-error partial mock
307+
() => ({
308+
id: MOCK_ACCOUNT_ID,
309+
address: '7S3P4HxJpyyigGzodYwHtCxZyUQe9JiBMHyRWXArAaKv',
310+
scopes: ['solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp'],
311+
}),
312+
);
313+
314+
rootMessenger.registerActionHandler(
315+
'AccountsController:setSelectedAccount',
316+
() => {
317+
// no-op
318+
},
319+
);
320+
321+
// eslint-disable-next-line no-new
322+
new SnapInterfaceController({
323+
messenger: controllerMessenger,
324+
});
325+
326+
const element = (
327+
<Box>
328+
<AccountSelector
329+
name="foo"
330+
switchGlobalAccount
331+
value="solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp:7S3P4HxJpyyigGzodYwHtCxZyUQe9JiBMHyRWXArAaKv"
332+
/>
333+
</Box>
334+
);
335+
336+
const id = await rootMessenger.call(
337+
'SnapInterfaceController:createInterface',
338+
MOCK_SNAP_ID,
339+
element,
340+
);
341+
342+
const { content, state } = rootMessenger.call(
343+
'SnapInterfaceController:getInterface',
344+
MOCK_SNAP_ID,
345+
id,
346+
);
347+
348+
expect(rootMessenger.call).toHaveBeenNthCalledWith(
349+
2,
259350
'AccountsController:getAccountByAddress',
260351
'7S3P4HxJpyyigGzodYwHtCxZyUQe9JiBMHyRWXArAaKv',
261352
);
262353

263354
expect(rootMessenger.call).toHaveBeenNthCalledWith(
264-
5,
355+
3,
265356
'AccountsController:setSelectedAccount',
266357
MOCK_ACCOUNT_ID,
267358
);
268359

360+
expect(content).toStrictEqual(element);
361+
expect(state).toStrictEqual({
362+
foo: {
363+
accountId: MOCK_ACCOUNT_ID,
364+
addresses: [
365+
'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp:7S3P4HxJpyyigGzodYwHtCxZyUQe9JiBMHyRWXArAaKv',
366+
],
367+
},
368+
});
369+
});
370+
371+
it('can get accounts of a specific chain ID from the client', async () => {
372+
const rootMessenger = getRootSnapInterfaceControllerMessenger();
373+
const controllerMessenger = getRestrictedSnapInterfaceControllerMessenger(
374+
rootMessenger,
375+
false,
376+
);
377+
378+
rootMessenger.registerActionHandler(
379+
'AccountsController:getSelectedMultichainAccount',
380+
// @ts-expect-error partial mock
381+
() => ({
382+
id: MOCK_ACCOUNT_ID,
383+
address: '0x1234567890123456789012345678901234567890',
384+
scopes: ['eip155:0'],
385+
}),
386+
);
387+
388+
rootMessenger.registerActionHandler(
389+
'AccountsController:listMultichainAccounts',
390+
() => [
391+
// @ts-expect-error partial mock
392+
{
393+
id: MOCK_ACCOUNT_ID,
394+
address: '7S3P4HxJpyyigGzodYwHtCxZyUQe9JiBMHyRWXArAaKv',
395+
scopes: ['solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp'],
396+
},
397+
],
398+
);
399+
400+
rootMessenger.registerActionHandler(
401+
'AccountsController:setSelectedAccount',
402+
() => {
403+
// no-op
404+
},
405+
);
406+
407+
// eslint-disable-next-line no-new
408+
new SnapInterfaceController({
409+
messenger: controllerMessenger,
410+
});
411+
412+
const element = (
413+
<Box>
414+
<AccountSelector
415+
name="foo"
416+
switchGlobalAccount
417+
chainIds={['solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp']}
418+
/>
419+
</Box>
420+
);
421+
422+
const id = await rootMessenger.call(
423+
'SnapInterfaceController:createInterface',
424+
MOCK_SNAP_ID,
425+
element,
426+
);
427+
428+
const { content, state } = rootMessenger.call(
429+
'SnapInterfaceController:getInterface',
430+
MOCK_SNAP_ID,
431+
id,
432+
);
433+
269434
expect(rootMessenger.call).toHaveBeenNthCalledWith(
270-
6,
435+
2,
271436
'AccountsController:getSelectedMultichainAccount',
272437
);
273438

439+
expect(rootMessenger.call).toHaveBeenNthCalledWith(
440+
3,
441+
'AccountsController:listMultichainAccounts',
442+
'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp',
443+
);
444+
445+
expect(rootMessenger.call).toHaveBeenNthCalledWith(
446+
4,
447+
'AccountsController:setSelectedAccount',
448+
MOCK_ACCOUNT_ID,
449+
);
450+
274451
expect(content).toStrictEqual(element);
275452
expect(state).toStrictEqual({
276453
foo: {
277-
bar: null,
278-
baz: {
279-
accountId: MOCK_ACCOUNT_ID,
280-
addresses: [
281-
'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp:7S3P4HxJpyyigGzodYwHtCxZyUQe9JiBMHyRWXArAaKv',
282-
],
283-
},
284-
foobar: {
285-
accountId: MOCK_ACCOUNT_ID,
286-
addresses: ['eip155:0:0x1234567890123456789012345678901234567890'],
287-
},
454+
accountId: MOCK_ACCOUNT_ID,
455+
addresses: [
456+
'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp:7S3P4HxJpyyigGzodYwHtCxZyUQe9JiBMHyRWXArAaKv',
457+
],
288458
},
289459
});
290460
});

0 commit comments

Comments
 (0)