Skip to content

Commit fba304e

Browse files
committed
Add some more tests
1 parent 26dbd80 commit fba304e

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
@@ -4880,7 +4880,7 @@ describe('SnapController', () => {
48804880
snapController.destroy();
48814881
});
48824882

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

@@ -4951,6 +4951,145 @@ describe('SnapController', () => {
49514951
snapController.destroy();
49524952
});
49534953

4954+
it('overrides the `endowment:permitted-chains` permission if the Snap specifies it in its manifest', async () => {
4955+
const rootMessenger = getControllerMessenger();
4956+
const messenger = getSnapControllerMessenger(rootMessenger);
4957+
4958+
rootMessenger.registerActionHandler(
4959+
'PermissionController:getPermissions',
4960+
() => ({}),
4961+
);
4962+
4963+
rootMessenger.registerActionHandler(
4964+
'SelectedNetworkController:getNetworkClientIdForDomain',
4965+
() => 'mainnet',
4966+
);
4967+
4968+
rootMessenger.registerActionHandler(
4969+
'NetworkController:getNetworkClientById',
4970+
() => ({
4971+
// @ts-expect-error - Partial network client.
4972+
configuration: {
4973+
chainId: '0x1',
4974+
},
4975+
}),
4976+
);
4977+
4978+
const { manifest } = await getMockSnapFilesWithUpdatedChecksum({
4979+
manifest: getSnapManifest({
4980+
initialPermissions: {
4981+
'endowment:page-home': {},
4982+
'endowment:ethereum-provider': {},
4983+
[PERMITTED_CHAINS_ENDOWMENT]: {
4984+
caveats: [
4985+
{
4986+
type: 'restrictNetworkSwitching',
4987+
value: ['0x5'],
4988+
},
4989+
],
4990+
},
4991+
},
4992+
}),
4993+
});
4994+
4995+
const snapController = getSnapController(
4996+
getSnapControllerOptions({
4997+
messenger,
4998+
detectSnapLocation: loopbackDetect({ manifest }),
4999+
}),
5000+
);
5001+
5002+
await snapController.installSnaps(MOCK_ORIGIN, {
5003+
[MOCK_SNAP_ID]: {},
5004+
});
5005+
5006+
const approvedPermissions = {
5007+
'endowment:page-home': {
5008+
caveats: null,
5009+
},
5010+
'endowment:ethereum-provider': {},
5011+
[PERMITTED_CHAINS_ENDOWMENT]: {
5012+
caveats: [
5013+
{
5014+
type: 'restrictNetworkSwitching',
5015+
value: ['0x1'],
5016+
},
5017+
],
5018+
},
5019+
};
5020+
5021+
expect(messenger.call).toHaveBeenCalledWith(
5022+
'PermissionController:grantPermissions',
5023+
{
5024+
approvedPermissions,
5025+
subject: { origin: MOCK_SNAP_ID },
5026+
requestData: expect.any(Object),
5027+
},
5028+
);
5029+
5030+
snapController.destroy();
5031+
});
5032+
5033+
it('does not grant the `endowment:permitted-chains` permission if the Snap does not have the `endowment:ethereum-provider` permission', async () => {
5034+
const rootMessenger = getControllerMessenger();
5035+
const messenger = getSnapControllerMessenger(rootMessenger);
5036+
5037+
rootMessenger.registerActionHandler(
5038+
'PermissionController:getPermissions',
5039+
() => ({}),
5040+
);
5041+
5042+
rootMessenger.registerActionHandler(
5043+
'SelectedNetworkController:getNetworkClientIdForDomain',
5044+
() => {
5045+
throw new Error('This should not be called.');
5046+
},
5047+
);
5048+
5049+
rootMessenger.registerActionHandler(
5050+
'NetworkController:getNetworkClientById',
5051+
() => {
5052+
throw new Error('This should not be called.');
5053+
},
5054+
);
5055+
5056+
const { manifest } = await getMockSnapFilesWithUpdatedChecksum({
5057+
manifest: getSnapManifest({
5058+
initialPermissions: {
5059+
'endowment:page-home': {},
5060+
},
5061+
}),
5062+
});
5063+
5064+
const snapController = getSnapController(
5065+
getSnapControllerOptions({
5066+
messenger,
5067+
detectSnapLocation: loopbackDetect({ manifest }),
5068+
}),
5069+
);
5070+
5071+
await snapController.installSnaps(MOCK_ORIGIN, {
5072+
[MOCK_SNAP_ID]: {},
5073+
});
5074+
5075+
const approvedPermissions = {
5076+
'endowment:page-home': {
5077+
caveats: null,
5078+
},
5079+
};
5080+
5081+
expect(messenger.call).toHaveBeenCalledWith(
5082+
'PermissionController:grantPermissions',
5083+
{
5084+
approvedPermissions,
5085+
subject: { origin: MOCK_SNAP_ID },
5086+
requestData: expect.any(Object),
5087+
},
5088+
);
5089+
5090+
snapController.destroy();
5091+
});
5092+
49545093
it('supports preinstalled snaps', async () => {
49555094
const rootMessenger = getControllerMessenger();
49565095
jest.spyOn(rootMessenger, 'call');

0 commit comments

Comments
 (0)