1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-23 09:52:26 +01:00
metamask-extension/ui/selectors/permissions.test.js
Mark Stacey d1cea85f33
Rename provider to providerConfig (#18907)
* Rename `provider` to `providerConfig`

The network controller `provider` state has been renamed to
 `providerConfig`. This better reflects what this state is, and makes
this controller more closely aligned with the core network controller.

All references to the provider configuration have been updated to
prefer `providerConfig` over `provider`, to make the distinction clear
between a provider and provider config.

Closes #18902

* Add migration
2023-05-02 13:23:20 -02:30

452 lines
15 KiB
JavaScript

import { CHAIN_IDS } from '../../shared/constants/network';
import {
getConnectedSubjectsForSelectedAddress,
getLastConnectedInfo,
getOrderedConnectedAccountsForActiveTab,
getPermissionsForActiveTab,
} from './permissions';
describe('selectors', () => {
describe('getConnectedSubjectsForSelectedAddress', () => {
it('should return the list of connected subjects when there is 1 connected account', () => {
const mockState = {
metamask: {
selectedAddress: '0x8e5d75d60224ea0c33d0041e75de68b1c3cb6dd5',
subjectMetadata: {
'peepeth.com': {
iconUrl: 'https://peepeth.com/favicon-32x32.png',
name: 'Peepeth',
},
'https://remix.ethereum.org': {
iconUrl: 'https://remix.ethereum.org/icon.png',
name: 'Remix - Ethereum IDE',
},
},
subjects: {
'peepeth.com': {
permissions: {
eth_accounts: {
caveats: [
{
type: 'restrictReturnedAccounts',
value: ['0x8e5d75d60224ea0c33d0041e75de68b1c3cb6dd5'],
},
],
date: 1585676177970,
id: '840d72a0-925f-449f-830a-1aa1dd5ce151',
invoker: 'peepeth.com',
parentCapability: 'eth_accounts',
},
},
},
'https://remix.ethereum.org': {
permissions: {
eth_accounts: {
caveats: [
{
type: 'restrictReturnedAccounts',
value: ['0x8e5d75d60224ea0c33d0041e75de68b1c3cb6dd5'],
},
],
date: 1585685128948,
id: '6b9615cc-64e4-4317-afab-3c4f8ee0244a',
invoker: 'https://remix.ethereum.org',
parentCapability: 'eth_accounts',
},
},
},
},
},
};
const extensionId = undefined;
expect(getConnectedSubjectsForSelectedAddress(mockState)).toStrictEqual([
{
extensionId,
iconUrl: 'https://peepeth.com/favicon-32x32.png',
origin: 'peepeth.com',
name: 'Peepeth',
},
{
extensionId,
name: 'Remix - Ethereum IDE',
iconUrl: 'https://remix.ethereum.org/icon.png',
origin: 'https://remix.ethereum.org',
},
]);
});
it('should return the list of connected subjects when there are 2 connected accounts', () => {
const mockState = {
metamask: {
selectedAddress: '0x7250739de134d33ec7ab1ee592711e15098c9d2d',
subjectMetadata: {
'peepeth.com': {
iconUrl: 'https://peepeth.com/favicon-32x32.png',
name: 'Peepeth',
},
'https://remix.ethereum.org': {
iconUrl: 'https://remix.ethereum.org/icon.png',
name: 'Remix - Ethereum IDE',
},
},
subjects: {
'peepeth.com': {
permissions: {
eth_accounts: {
caveats: [
{
type: 'restrictReturnedAccounts',
value: ['0x8e5d75d60224ea0c33d0041e75de68b1c3cb6dd5'],
},
],
date: 1585676177970,
id: '840d72a0-925f-449f-830a-1aa1dd5ce151',
invoker: 'peepeth.com',
parentCapability: 'eth_accounts',
},
},
},
'https://remix.ethereum.org': {
permissions: {
eth_accounts: {
caveats: [
{
type: 'restrictReturnedAccounts',
value: [
'0x8e5d75d60224ea0c33d0041e75de68b1c3cb6dd5',
'0x7250739de134d33ec7ab1ee592711e15098c9d2d',
],
},
],
date: 1585685128948,
id: '6b9615cc-64e4-4317-afab-3c4f8ee0244a',
invoker: 'https://remix.ethereum.org',
parentCapability: 'eth_accounts',
},
},
},
},
},
};
const extensionId = undefined;
expect(getConnectedSubjectsForSelectedAddress(mockState)).toStrictEqual([
{
extensionId,
name: 'Remix - Ethereum IDE',
iconUrl: 'https://remix.ethereum.org/icon.png',
origin: 'https://remix.ethereum.org',
},
]);
});
});
describe('getConnectedAccountsForActiveTab', () => {
const mockState = {
activeTab: {
title: 'Eth Sign Tests',
origin: 'https://remix.ethereum.org',
protocol: 'https:',
url: 'https://remix.ethereum.org/',
},
metamask: {
providerConfig: {
chainId: CHAIN_IDS.GOERLI,
},
accounts: {
'0x7250739de134d33ec7ab1ee592711e15098c9d2d': {
address: '0x7250739de134d33ec7ab1ee592711e15098c9d2d',
},
'0x8e5d75d60224ea0c33d0041e75de68b1c3cb6dd5': {
address: '0x8e5d75d60224ea0c33d0041e75de68b1c3cb6dd5',
},
'0xb3958fb96c8201486ae20be1d5c9f58083df343a': {
address: '0xb3958fb96c8201486ae20be1d5c9f58083df343a',
},
'0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc': {
address: '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc',
},
'0x617b3f8050a0bd94b6b1da02b4384ee5b4df13f4': {
address: '0x617b3f8050a0bd94b6b1da02b4384ee5b4df13f4',
},
},
cachedBalances: {},
subjects: {
'https://remix.ethereum.org': {
permissions: {
eth_accounts: {
caveats: [
{
type: 'restrictReturnedAccounts',
value: [
'0x8e5d75d60224ea0c33d0041e75de68b1c3cb6dd5',
'0x7250739de134d33ec7ab1ee592711e15098c9d2d',
'0x617b3f8050a0bd94b6b1da02b4384ee5b4df13f4',
'0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc',
'0xb3958fb96c8201486ae20be1d5c9f58083df343a',
],
},
],
date: 1586359844177,
id: '3aa65a8b-3bcb-4944-941b-1baa5fe0ed8b',
invoker: 'https://remix.ethereum.org',
parentCapability: 'eth_accounts',
},
},
},
'peepeth.com': {
permissions: {
eth_accounts: {
caveats: [
{
type: 'restrictReturnedAccounts',
value: ['0x8e5d75d60224ea0c33d0041e75de68b1c3cb6dd5'],
},
],
date: 1585676177970,
id: '840d72a0-925f-449f-830a-1aa1dd5ce151',
invoker: 'peepeth.com',
parentCapability: 'eth_accounts',
},
},
},
},
identities: {
'0x7250739de134d33ec7ab1ee592711e15098c9d2d': {
address: '0x7250739de134d33ec7ab1ee592711e15098c9d2d',
name: 'Really Long Name That Should Be Truncated',
},
'0x8e5d75d60224ea0c33d0041e75de68b1c3cb6dd5': {
address: '0x8e5d75d60224ea0c33d0041e75de68b1c3cb6dd5',
lastSelected: 1586359844192,
name: 'Account 1',
},
'0xb3958fb96c8201486ae20be1d5c9f58083df343a': {
lastSelected: 1586359844193,
address: '0xb3958fb96c8201486ae20be1d5c9f58083df343a',
name: 'Account 2',
},
'0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc': {
address: '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc',
lastSelected: 1586359844192,
name: 'Account 3',
},
'0x617b3f8050a0bd94b6b1da02b4384ee5b4df13f4': {
address: '0x617b3f8050a0bd94b6b1da02b4384ee5b4df13f4',
name: 'Account 4',
},
},
keyrings: [
{
accounts: [
'0x8e5d75d60224ea0c33d0041e75de68b1c3cb6dd5',
'0x7250739de134d33ec7ab1ee592711e15098c9d2d',
'0x617b3f8050a0bd94b6b1da02b4384ee5b4df13f4',
'0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc',
'0xb3958fb96c8201486ae20be1d5c9f58083df343a',
],
},
],
permissionHistory: {
'https://remix.ethereum.org': {
eth_accounts: {
accounts: {
'0x7250739de134d33ec7ab1ee592711e15098c9d2d': 1586359844192,
'0x8e5d75d60224ea0c33d0041e75de68b1c3cb6dd5': 1586359844192,
'0x617b3f8050a0bd94b6b1da02b4384ee5b4df13f4': 1586359844192,
'0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc': 1586359844192,
'0xb3958fb96c8201486ae20be1d5c9f58083df343a': 1586359844192,
},
lastApproved: 1586359844192,
},
},
},
},
};
it('should return connected accounts sorted by last selected, then by keyring controller order', () => {
expect(getOrderedConnectedAccountsForActiveTab(mockState)).toStrictEqual([
{
address: '0xb3958fb96c8201486ae20be1d5c9f58083df343a',
balance: undefined,
name: 'Account 2',
lastActive: 1586359844192,
lastSelected: 1586359844193,
},
{
address: '0x8e5d75d60224ea0c33d0041e75de68b1c3cb6dd5',
balance: undefined,
name: 'Account 1',
lastActive: 1586359844192,
lastSelected: 1586359844192,
},
{
address: '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc',
balance: undefined,
name: 'Account 3',
lastActive: 1586359844192,
lastSelected: 1586359844192,
},
{
address: '0x7250739de134d33ec7ab1ee592711e15098c9d2d',
balance: undefined,
name: 'Really Long Name That Should Be Truncated',
lastActive: 1586359844192,
},
{
address: '0x617b3f8050a0bd94b6b1da02b4384ee5b4df13f4',
balance: undefined,
name: 'Account 4',
lastActive: 1586359844192,
},
]);
});
});
describe('getLastConnectedInfo', () => {
it('retrieves the last connected info', () => {
const mockState = {
metamask: {
permissionHistory: {
a: {
foo: {},
eth_accounts: { accounts: { 0x1: 1, 0x2: 2 } },
},
b: {
foo: {},
eth_accounts: { accounts: { 0x2: 2 } },
},
c: {
foo: {},
},
},
},
};
expect(getLastConnectedInfo(mockState)).toStrictEqual({
a: { accounts: { 0x1: 1, 0x2: 2 } },
b: { accounts: { 0x2: 2 } },
});
});
});
describe('getPermissionsForActiveTab', () => {
const mockState = {
activeTab: {
title: 'Eth Sign Tests',
origin: 'https://remix.ethereum.org',
protocol: 'https:',
url: 'https://remix.ethereum.org/',
},
metamask: {
identities: {
'0x7250739de134d33ec7ab1ee592711e15098c9d2d': {
address: '0x7250739de134d33ec7ab1ee592711e15098c9d2d',
name: 'Really Long Name That Should Be Truncated',
},
'0x8e5d75d60224ea0c33d0041e75de68b1c3cb6dd5': {
address: '0x8e5d75d60224ea0c33d0041e75de68b1c3cb6dd5',
name: 'Account 1',
},
'0xb3958fb96c8201486ae20be1d5c9f58083df343a': {
address: '0xb3958fb96c8201486ae20be1d5c9f58083df343a',
name: 'Account 2',
},
},
subjects: {
'https://remix.ethereum.org': {
permissions: {
eth_accounts: {
caveats: [
{
type: 'restrictReturnedAccounts',
value: [
'0x8e5d75d60224ea0c33d0041e75de68b1c3cb6dd5',
'0x7250739de134d33ec7ab1ee592711e15098c9d2d',
],
},
],
date: 1586359844177,
id: '3aa65a8b-3bcb-4944-941b-1baa5fe0ed8b',
invoker: 'https://remix.ethereum.org',
parentCapability: 'eth_accounts',
},
},
},
'peepeth.com': {
permissions: {
eth_accounts: {
caveats: [
{
type: 'restrictReturnedAccounts',
value: ['0x8e5d75d60224ea0c33d0041e75de68b1c3cb6dd5'],
},
],
date: 1585676177970,
id: '840d72a0-925f-449f-830a-1aa1dd5ce151',
invoker: 'peepeth.com',
parentCapability: 'eth_accounts',
},
},
},
'uniswap.exchange': {
permissions: {
eth_accounts: {
caveats: [
{
type: 'restrictReturnedAccounts',
value: ['0x8e5d75d60224ea0c33d0041e75de68b1c3cb6dd5'],
},
],
date: 1585616816623,
id: 'ce625215-f2e9-48e7-93ca-21ba193244ff',
invoker: 'uniswap.exchange',
parentCapability: 'eth_accounts',
},
},
},
},
subjectMetadata: {
'https://remix.ethereum.org': {
iconUrl: 'https://remix.ethereum.org/icon.png',
name: 'Remix - Ethereum IDE',
},
},
permissionHistory: {
'https://remix.ethereum.org': {
eth_accounts: {
accounts: {
'0x7250739de134d33ec7ab1ee592711e15098c9d2d': 1586359844192,
'0x8e5d75d60224ea0c33d0041e75de68b1c3cb6dd5': 1586359844192,
},
lastApproved: 1586359844192,
},
},
},
},
};
it('should return a list of permissions keys and values', () => {
expect(getPermissionsForActiveTab(mockState)).toStrictEqual([
{
key: 'eth_accounts',
value: {
caveats: [
{
type: 'restrictReturnedAccounts',
value: [
'0x8e5d75d60224ea0c33d0041e75de68b1c3cb6dd5',
'0x7250739de134d33ec7ab1ee592711e15098c9d2d',
],
},
],
date: 1586359844177,
id: '3aa65a8b-3bcb-4944-941b-1baa5fe0ed8b',
invoker: 'https://remix.ethereum.org',
parentCapability: 'eth_accounts',
},
},
]);
});
});
});