Skip to content

Commit 065c003

Browse files
committed
Add a test
1 parent ccd9f4c commit 065c003

File tree

3 files changed

+63
-0
lines changed

3 files changed

+63
-0
lines changed

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

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4628,6 +4628,65 @@ describe('SnapController', () => {
46284628
snapController.destroy();
46294629
});
46304630

4631+
it('grants permitted chains permission to Snaps with `endowment:ethereum-provider`', async () => {
4632+
const rootMessenger = getControllerMessenger();
4633+
const messenger = getSnapControllerMessenger(rootMessenger);
4634+
4635+
rootMessenger.registerActionHandler(
4636+
'PermissionController:getPermissions',
4637+
() => ({}),
4638+
);
4639+
4640+
rootMessenger.registerActionHandler(
4641+
'SelectedNetworkController:getNetworkClientIdForDomain',
4642+
() => 'mainnet',
4643+
);
4644+
4645+
rootMessenger.registerActionHandler(
4646+
'NetworkController:getNetworkClientById',
4647+
() => ({
4648+
// @ts-expect-error - Partial network client.
4649+
configuration: {
4650+
chainId: '0x1',
4651+
},
4652+
}),
4653+
);
4654+
4655+
const { manifest } = await getMockSnapFilesWithUpdatedChecksum({
4656+
manifest: getSnapManifest({
4657+
initialPermissions: {
4658+
'endowment:page-home': {},
4659+
'endowment:ethereum-provider': {},
4660+
},
4661+
}),
4662+
});
4663+
4664+
const snapController = getSnapController(
4665+
getSnapControllerOptions({
4666+
messenger,
4667+
detectSnapLocation: loopbackDetect({ manifest }),
4668+
}),
4669+
);
4670+
4671+
await snapController.installSnaps(MOCK_ORIGIN, {
4672+
[MOCK_SNAP_ID]: {},
4673+
});
4674+
4675+
const approvedPermissions = {
4676+
'endowment:ethereum-provider': {
4677+
caveats: [],
4678+
},
4679+
permittedChains: {},
4680+
};
4681+
4682+
expect(messenger.call).toHaveBeenCalledWith(
4683+
'PermissionController:grantPermissions',
4684+
{ approvedPermissions, subject: { origin: MOCK_SNAP_ID } },
4685+
);
4686+
4687+
snapController.destroy();
4688+
});
4689+
46314690
it('supports preinstalled snaps', async () => {
46324691
const rootMessenger = getControllerMessenger();
46334692
jest.spyOn(rootMessenger, 'call');

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3637,6 +3637,8 @@ export class SnapController extends BaseController<
36373637
*/
36383638
#getPermissionsToGrant(snapId: SnapId, newPermissions: RequestedPermissions) {
36393639
if (Object.keys(newPermissions).includes(SnapEndowments.EthereumProvider)) {
3640+
// This will return the globally selected network if the Snap doesn't have
3641+
// one set.
36403642
const networkClientId = this.messagingSystem.call(
36413643
'SelectedNetworkController:getNetworkClientIdForDomain',
36423644
snapId,

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -469,6 +469,7 @@ export const getSnapControllerMessenger = (
469469
'ExecutionService:terminateAllSnaps',
470470
'ExecutionService:terminateSnap',
471471
'ExecutionService:handleRpcRequest',
472+
'NetworkController:getNetworkClientById',
472473
'PermissionController:getEndowments',
473474
'PermissionController:hasPermission',
474475
'PermissionController:hasPermissions',
@@ -481,6 +482,7 @@ export const getSnapControllerMessenger = (
481482
'PermissionController:getSubjectNames',
482483
'PhishingController:maybeUpdateState',
483484
'PhishingController:testOrigin',
485+
'SelectedNetworkController:getNetworkClientIdForDomain',
484486
'SnapController:get',
485487
'SnapController:handleRequest',
486488
'SnapController:getSnapState',

0 commit comments

Comments
 (0)