Skip to content

Commit

Permalink
Add some more tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Mrtenz committed Jan 15, 2025
1 parent 26dbd80 commit fba304e
Showing 1 changed file with 140 additions and 1 deletion.
141 changes: 140 additions & 1 deletion packages/snaps-controllers/src/snaps/SnapController.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4880,7 +4880,7 @@ describe('SnapController', () => {
snapController.destroy();
});

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

Expand Down Expand Up @@ -4951,6 +4951,145 @@ describe('SnapController', () => {
snapController.destroy();
});

it('overrides the `endowment:permitted-chains` permission if the Snap specifies it in its manifest', async () => {
const rootMessenger = getControllerMessenger();
const messenger = getSnapControllerMessenger(rootMessenger);

rootMessenger.registerActionHandler(
'PermissionController:getPermissions',
() => ({}),
);

rootMessenger.registerActionHandler(
'SelectedNetworkController:getNetworkClientIdForDomain',
() => 'mainnet',
);

rootMessenger.registerActionHandler(
'NetworkController:getNetworkClientById',
() => ({
// @ts-expect-error - Partial network client.
configuration: {
chainId: '0x1',
},
}),
);

const { manifest } = await getMockSnapFilesWithUpdatedChecksum({
manifest: getSnapManifest({
initialPermissions: {
'endowment:page-home': {},
'endowment:ethereum-provider': {},
[PERMITTED_CHAINS_ENDOWMENT]: {
caveats: [
{
type: 'restrictNetworkSwitching',
value: ['0x5'],
},
],
},
},
}),
});

const snapController = getSnapController(
getSnapControllerOptions({
messenger,
detectSnapLocation: loopbackDetect({ manifest }),
}),
);

await snapController.installSnaps(MOCK_ORIGIN, {
[MOCK_SNAP_ID]: {},
});

const approvedPermissions = {
'endowment:page-home': {
caveats: null,
},
'endowment:ethereum-provider': {},
[PERMITTED_CHAINS_ENDOWMENT]: {
caveats: [
{
type: 'restrictNetworkSwitching',
value: ['0x1'],
},
],
},
};

expect(messenger.call).toHaveBeenCalledWith(
'PermissionController:grantPermissions',
{
approvedPermissions,
subject: { origin: MOCK_SNAP_ID },
requestData: expect.any(Object),
},
);

snapController.destroy();
});

it('does not grant the `endowment:permitted-chains` permission if the Snap does not have the `endowment:ethereum-provider` permission', async () => {
const rootMessenger = getControllerMessenger();
const messenger = getSnapControllerMessenger(rootMessenger);

rootMessenger.registerActionHandler(
'PermissionController:getPermissions',
() => ({}),
);

rootMessenger.registerActionHandler(
'SelectedNetworkController:getNetworkClientIdForDomain',
() => {
throw new Error('This should not be called.');
},
);

rootMessenger.registerActionHandler(
'NetworkController:getNetworkClientById',
() => {
throw new Error('This should not be called.');
},
);

const { manifest } = await getMockSnapFilesWithUpdatedChecksum({
manifest: getSnapManifest({
initialPermissions: {
'endowment:page-home': {},
},
}),
});

const snapController = getSnapController(
getSnapControllerOptions({
messenger,
detectSnapLocation: loopbackDetect({ manifest }),
}),
);

await snapController.installSnaps(MOCK_ORIGIN, {
[MOCK_SNAP_ID]: {},
});

const approvedPermissions = {
'endowment:page-home': {
caveats: null,
},
};

expect(messenger.call).toHaveBeenCalledWith(
'PermissionController:grantPermissions',
{
approvedPermissions,
subject: { origin: MOCK_SNAP_ID },
requestData: expect.any(Object),
},
);

snapController.destroy();
});

it('supports preinstalled snaps', async () => {
const rootMessenger = getControllerMessenger();
jest.spyOn(rootMessenger, 'call');
Expand Down

0 comments on commit fba304e

Please sign in to comment.