Skip to content

Commit 8281953

Browse files
committed
Add some more tests
1 parent 90e7114 commit 8281953

File tree

1 file changed

+140
-1
lines changed

1 file changed

+140
-1
lines changed

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

Lines changed: 140 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5330,7 +5330,7 @@ describe('SnapController', () => {
53305330
snapController.destroy();
53315331
});
53325332

5333-
it('grants permitted chains permission to Snaps with `endowment:ethereum-provider`', async () => {
5333+
it('grants the `endowment:permitted-chains` permission to a Snap with `endowment:ethereum-provider`', async () => {
53345334
const rootMessenger = getControllerMessenger();
53355335
const messenger = getSnapControllerMessenger(rootMessenger);
53365336

@@ -5389,6 +5389,145 @@ describe('SnapController', () => {
53895389
snapController.destroy();
53905390
});
53915391

5392+
it('overrides the `endowment:permitted-chains` permission if the Snap specifies it in its manifest', async () => {
5393+
const rootMessenger = getControllerMessenger();
5394+
const messenger = getSnapControllerMessenger(rootMessenger);
5395+
5396+
rootMessenger.registerActionHandler(
5397+
'PermissionController:getPermissions',
5398+
() => ({}),
5399+
);
5400+
5401+
rootMessenger.registerActionHandler(
5402+
'SelectedNetworkController:getNetworkClientIdForDomain',
5403+
() => 'mainnet',
5404+
);
5405+
5406+
rootMessenger.registerActionHandler(
5407+
'NetworkController:getNetworkClientById',
5408+
() => ({
5409+
// @ts-expect-error - Partial network client.
5410+
configuration: {
5411+
chainId: '0x1',
5412+
},
5413+
}),
5414+
);
5415+
5416+
const { manifest } = await getMockSnapFilesWithUpdatedChecksum({
5417+
manifest: getSnapManifest({
5418+
initialPermissions: {
5419+
'endowment:page-home': {},
5420+
'endowment:ethereum-provider': {},
5421+
[PERMITTED_CHAINS_ENDOWMENT]: {
5422+
caveats: [
5423+
{
5424+
type: 'restrictNetworkSwitching',
5425+
value: ['0x5'],
5426+
},
5427+
],
5428+
},
5429+
},
5430+
}),
5431+
});
5432+
5433+
const snapController = getSnapController(
5434+
getSnapControllerOptions({
5435+
messenger,
5436+
detectSnapLocation: loopbackDetect({ manifest }),
5437+
}),
5438+
);
5439+
5440+
await snapController.installSnaps(MOCK_ORIGIN, {
5441+
[MOCK_SNAP_ID]: {},
5442+
});
5443+
5444+
const approvedPermissions = {
5445+
'endowment:page-home': {
5446+
caveats: null,
5447+
},
5448+
'endowment:ethereum-provider': {},
5449+
[PERMITTED_CHAINS_ENDOWMENT]: {
5450+
caveats: [
5451+
{
5452+
type: 'restrictNetworkSwitching',
5453+
value: ['0x1'],
5454+
},
5455+
],
5456+
},
5457+
};
5458+
5459+
expect(messenger.call).toHaveBeenCalledWith(
5460+
'PermissionController:grantPermissions',
5461+
{
5462+
approvedPermissions,
5463+
subject: { origin: MOCK_SNAP_ID },
5464+
requestData: expect.any(Object),
5465+
},
5466+
);
5467+
5468+
snapController.destroy();
5469+
});
5470+
5471+
it('does not grant the `endowment:permitted-chains` permission if the Snap does not have the `endowment:ethereum-provider` permission', async () => {
5472+
const rootMessenger = getControllerMessenger();
5473+
const messenger = getSnapControllerMessenger(rootMessenger);
5474+
5475+
rootMessenger.registerActionHandler(
5476+
'PermissionController:getPermissions',
5477+
() => ({}),
5478+
);
5479+
5480+
rootMessenger.registerActionHandler(
5481+
'SelectedNetworkController:getNetworkClientIdForDomain',
5482+
() => {
5483+
throw new Error('This should not be called.');
5484+
},
5485+
);
5486+
5487+
rootMessenger.registerActionHandler(
5488+
'NetworkController:getNetworkClientById',
5489+
() => {
5490+
throw new Error('This should not be called.');
5491+
},
5492+
);
5493+
5494+
const { manifest } = await getMockSnapFilesWithUpdatedChecksum({
5495+
manifest: getSnapManifest({
5496+
initialPermissions: {
5497+
'endowment:page-home': {},
5498+
},
5499+
}),
5500+
});
5501+
5502+
const snapController = getSnapController(
5503+
getSnapControllerOptions({
5504+
messenger,
5505+
detectSnapLocation: loopbackDetect({ manifest }),
5506+
}),
5507+
);
5508+
5509+
await snapController.installSnaps(MOCK_ORIGIN, {
5510+
[MOCK_SNAP_ID]: {},
5511+
});
5512+
5513+
const approvedPermissions = {
5514+
'endowment:page-home': {
5515+
caveats: null,
5516+
},
5517+
};
5518+
5519+
expect(messenger.call).toHaveBeenCalledWith(
5520+
'PermissionController:grantPermissions',
5521+
{
5522+
approvedPermissions,
5523+
subject: { origin: MOCK_SNAP_ID },
5524+
requestData: expect.any(Object),
5525+
},
5526+
);
5527+
5528+
snapController.destroy();
5529+
});
5530+
53925531
it('supports preinstalled snaps', async () => {
53935532
const rootMessenger = getControllerMessenger();
53945533
jest.spyOn(rootMessenger, 'call');

0 commit comments

Comments
 (0)