1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-11-23 18:41:38 +01:00
metamask-extension/ui/app/selectors/tests/permissions.test.js
Mark Stacey 0033a64e5d
Connected accounts secondary sort order (#8608)
The connected accounts are now ordered by keyring controller order
whenever the `lastSelected` time is equal. This ensures the order is
identical to what connected sites see. This is especially important
when no accounts have been selected, as it ensures the correct account
is marked as the "Primary" account.
2020-05-18 13:31:11 -03:00

446 lines
15 KiB
JavaScript

import assert from 'assert'
import {
getConnectedDomainsForSelectedAddress,
getOrderedConnectedAccountsForActiveTab,
getPermissionsForActiveTab,
} from '../permissions'
describe('selectors', function () {
describe('getConnectedDomainsForSelectedAddress', function () {
it('should return the list of connected domains when there is 1 connected account', function () {
const mockState = {
metamask: {
selectedAddress: '0x8e5d75d60224ea0c33d0041e75de68b1c3cb6dd5',
domainMetadata: {
'peepeth.com': {
'icon': 'https://peepeth.com/favicon-32x32.png',
'name': 'Peepeth',
},
'remix.ethereum.org': {
'icon': 'https://remix.ethereum.org/icon.png',
'name': 'Remix - Ethereum IDE',
},
},
domains: {
'peepeth.com': {
'permissions': [
{
'@context': [
'https://github.com/MetaMask/rpc-cap',
],
'caveats': [
{
'name': 'exposedAccounts',
'type': 'filterResponse',
'value': [
'0x8e5d75d60224ea0c33d0041e75de68b1c3cb6dd5',
],
},
],
'date': 1585676177970,
'id': '840d72a0-925f-449f-830a-1aa1dd5ce151',
'invoker': 'peepeth.com',
'parentCapability': 'eth_accounts',
},
],
},
'remix.ethereum.org': {
'permissions': [
{
'@context': [
'https://github.com/MetaMask/rpc-cap',
],
'caveats': [
{
'type': 'filterResponse',
'value': [
'0x8e5d75d60224ea0c33d0041e75de68b1c3cb6dd5',
],
'name': 'exposedAccounts',
},
],
'date': 1585685128948,
'id': '6b9615cc-64e4-4317-afab-3c4f8ee0244a',
'invoker': 'remix.ethereum.org',
'parentCapability': 'eth_accounts',
},
],
},
},
},
}
const extensionId = undefined
assert.deepEqual(getConnectedDomainsForSelectedAddress(mockState), [{
extensionId,
icon: 'https://peepeth.com/favicon-32x32.png',
key: 'peepeth.com',
name: 'Peepeth',
}, {
extensionId,
name: 'Remix - Ethereum IDE',
icon: 'https://remix.ethereum.org/icon.png',
key: 'remix.ethereum.org',
}])
})
it('should return the list of connected domains when there are 2 connected accounts', function () {
const mockState = {
metamask: {
selectedAddress: '0x7250739de134d33ec7ab1ee592711e15098c9d2d',
domainMetadata: {
'peepeth.com': {
'icon': 'https://peepeth.com/favicon-32x32.png',
'name': 'Peepeth',
},
'remix.ethereum.org': {
'icon': 'https://remix.ethereum.org/icon.png',
'name': 'Remix - Ethereum IDE',
},
},
domains: {
'peepeth.com': {
'permissions': [
{
'@context': [
'https://github.com/MetaMask/rpc-cap',
],
'caveats': [
{
'name': 'exposedAccounts',
'type': 'filterResponse',
'value': [
'0x8e5d75d60224ea0c33d0041e75de68b1c3cb6dd5',
],
},
],
'date': 1585676177970,
'id': '840d72a0-925f-449f-830a-1aa1dd5ce151',
'invoker': 'peepeth.com',
'parentCapability': 'eth_accounts',
},
],
},
'remix.ethereum.org': {
'permissions': [
{
'@context': [
'https://github.com/MetaMask/rpc-cap',
],
'caveats': [
{
'type': 'filterResponse',
'value': [
'0x8e5d75d60224ea0c33d0041e75de68b1c3cb6dd5',
'0x7250739de134d33ec7ab1ee592711e15098c9d2d',
],
'name': 'exposedAccounts',
},
],
'date': 1585685128948,
'id': '6b9615cc-64e4-4317-afab-3c4f8ee0244a',
'invoker': 'remix.ethereum.org',
'parentCapability': 'eth_accounts',
},
],
},
},
},
}
const extensionId = undefined
assert.deepEqual(getConnectedDomainsForSelectedAddress(mockState), [{
extensionId,
name: 'Remix - Ethereum IDE',
icon: 'https://remix.ethereum.org/icon.png',
key: 'remix.ethereum.org',
}])
})
})
describe('getConnectedAccountsForActiveTab', function () {
const mockState = {
activeTab: {
'title': 'Eth Sign Tests',
'origin': 'remix.ethereum.org',
'protocol': 'https:',
'url': 'https://remix.ethereum.org/',
},
metamask: {
accounts: {
0x7250739de134d33ec7ab1ee592711e15098c9d2d: {
address: '0x7250739de134d33ec7ab1ee592711e15098c9d2d',
},
0x8e5d75d60224ea0c33d0041e75de68b1c3cb6dd5: {
address: '0x8e5d75d60224ea0c33d0041e75de68b1c3cb6dd5',
},
0xb3958fb96c8201486ae20be1d5c9f58083df343a: {
address: '0xb3958fb96c8201486ae20be1d5c9f58083df343a',
},
0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc: {
address: '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc',
},
0x617b3f8050a0bd94b6b1da02b4384ee5b4df13f4: {
address: '0x617b3f8050a0bd94b6b1da02b4384ee5b4df13f4',
},
},
cachedBalances: {},
domains: {
'remix.ethereum.org': {
'permissions': [
{
'@context': [
'https://github.com/MetaMask/rpc-cap',
],
'caveats': [
{
'name': 'exposedAccounts',
'type': 'filterResponse',
'value': [
'0x8e5d75d60224ea0c33d0041e75de68b1c3cb6dd5',
'0x7250739de134d33ec7ab1ee592711e15098c9d2d',
'0x617b3f8050a0bd94b6b1da02b4384ee5b4df13f4',
'0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc',
'0xb3958fb96c8201486ae20be1d5c9f58083df343a',
],
},
],
'date': 1586359844177,
'id': '3aa65a8b-3bcb-4944-941b-1baa5fe0ed8b',
'invoker': 'remix.ethereum.org',
'parentCapability': 'eth_accounts',
},
],
},
'peepeth.com': {
'permissions': [
{
'@context': [
'https://github.com/MetaMask/rpc-cap',
],
'caveats': [
{
'name': 'exposedAccounts',
'type': 'filterResponse',
'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',
],
}],
permissionsHistory: {
'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', function () {
assert.deepEqual(getOrderedConnectedAccountsForActiveTab(mockState), [
{
address: '0xb3958fb96c8201486ae20be1d5c9f58083df343a',
name: 'Account 2',
lastActive: 1586359844192,
lastSelected: 1586359844193,
},
{
address: '0x8e5d75d60224ea0c33d0041e75de68b1c3cb6dd5',
name: 'Account 1',
lastActive: 1586359844192,
lastSelected: 1586359844192,
},
{
address: '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc',
name: 'Account 3',
lastActive: 1586359844192,
lastSelected: 1586359844192,
},
{
address: '0x7250739de134d33ec7ab1ee592711e15098c9d2d',
name: 'Really Long Name That Should Be Truncated',
lastActive: 1586359844192,
},
{
address: '0x617b3f8050a0bd94b6b1da02b4384ee5b4df13f4',
name: 'Account 4',
lastActive: 1586359844192,
},
])
})
})
describe('getPermissionsForActiveTab', function () {
const mockState = {
activeTab: {
'title': 'Eth Sign Tests',
'origin': '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',
},
},
domains: {
'remix.ethereum.org': {
'permissions': [
{
'@context': [
'https://github.com/MetaMask/rpc-cap',
],
'caveats': [
{
'name': 'exposedAccounts',
'type': 'filterResponse',
'value': [
'0x8e5d75d60224ea0c33d0041e75de68b1c3cb6dd5',
'0x7250739de134d33ec7ab1ee592711e15098c9d2d',
],
},
],
'date': 1586359844177,
'id': '3aa65a8b-3bcb-4944-941b-1baa5fe0ed8b',
'invoker': 'remix.ethereum.org',
'parentCapability': 'eth_accounts',
},
],
},
'peepeth.com': {
'permissions': [
{
'@context': [
'https://github.com/MetaMask/rpc-cap',
],
'caveats': [
{
'name': 'exposedAccounts',
'type': 'filterResponse',
'value': [
'0x8e5d75d60224ea0c33d0041e75de68b1c3cb6dd5',
],
},
],
'date': 1585676177970,
'id': '840d72a0-925f-449f-830a-1aa1dd5ce151',
'invoker': 'peepeth.com',
'parentCapability': 'eth_accounts',
},
],
},
'uniswap.exchange': {
'permissions': [
{
'@context': [
'https://github.com/MetaMask/rpc-cap',
],
'caveats': [
{
'name': 'exposedAccounts',
'type': 'filterResponse',
'value': [
'0x8e5d75d60224ea0c33d0041e75de68b1c3cb6dd5',
],
},
],
'date': 1585616816623,
'id': 'ce625215-f2e9-48e7-93ca-21ba193244ff',
'invoker': 'uniswap.exchange',
'parentCapability': 'eth_accounts',
},
],
},
},
domainMetadata: {
'remix.ethereum.org': {
'icon': 'https://remix.ethereum.org/icon.png',
'name': 'Remix - Ethereum IDE',
},
},
permissionsHistory: {
'remix.ethereum.org': {
'eth_accounts': {
'accounts': {
'0x7250739de134d33ec7ab1ee592711e15098c9d2d': 1586359844192,
'0x8e5d75d60224ea0c33d0041e75de68b1c3cb6dd5': 1586359844192,
},
'lastApproved': 1586359844192,
},
},
},
permissionsDescriptions: {
'eth_accounts': "View the addresses of the user's chosen accounts.",
},
},
}
it('should return a list of permissions strings', function () {
assert.deepEqual(getPermissionsForActiveTab(mockState), [{
key: 'eth_accounts',
description: "View the addresses of the user's chosen accounts.",
}])
})
})
})