diff --git a/wallets/metamask/src/metamask.ts b/wallets/metamask/src/metamask.ts index 7268c0304..9e864f1bf 100644 --- a/wallets/metamask/src/metamask.ts +++ b/wallets/metamask/src/metamask.ts @@ -384,6 +384,30 @@ export class MetaMask { await this.settingsPage.disableEthSign() } + async addNewToken() { + if (!this.extensionId) { + throw NO_EXTENSION_ID_ERROR + } + + await this.notificationPage.addNewToken(this.extensionId) + } + + async providePublicEncryptionKey() { + if (!this.extensionId) { + throw NO_EXTENSION_ID_ERROR + } + + await this.notificationPage.providePublicEncryptionKey(this.extensionId) + } + + async decrypt() { + if (!this.extensionId) { + throw NO_EXTENSION_ID_ERROR + } + + await this.notificationPage.decryptMessage(this.extensionId) + } + /// ------------------------------------------- /// ---------- EXPERIMENTAL FEATURES ---------- /// ------------------------------------------- @@ -429,12 +453,4 @@ export class MetaMask { async closeTransactionDetails() { await this.homePage.closeTransactionDetails() } - - async addNewToken() { - if (!this.extensionId) { - throw NO_EXTENSION_ID_ERROR - } - - await this.notificationPage.addNewToken(this.extensionId) - } } diff --git a/wallets/metamask/src/pages/NotificationPage/actions/encryption.ts b/wallets/metamask/src/pages/NotificationPage/actions/encryption.ts new file mode 100644 index 000000000..2edde6e5b --- /dev/null +++ b/wallets/metamask/src/pages/NotificationPage/actions/encryption.ts @@ -0,0 +1,10 @@ +import Selectors from '../selectors' +import type { Page } from '@playwright/test' + +export async function providePublicEncryptionKey(notificationPage: Page) { + await notificationPage.locator(Selectors.ActionFooter.confirmActionButton).click() +} + +export async function decryptMessage(notificationPage: Page) { + await notificationPage.locator(Selectors.ActionFooter.confirmActionButton).click() +} diff --git a/wallets/metamask/src/pages/NotificationPage/actions/index.ts b/wallets/metamask/src/pages/NotificationPage/actions/index.ts index d54f0c031..3a2f10500 100644 --- a/wallets/metamask/src/pages/NotificationPage/actions/index.ts +++ b/wallets/metamask/src/pages/NotificationPage/actions/index.ts @@ -5,3 +5,4 @@ export * from './approvePermission' export * from './transaction' export * from './network' export * from './token' +export * from './encryption' diff --git a/wallets/metamask/src/pages/NotificationPage/page.ts b/wallets/metamask/src/pages/NotificationPage/page.ts index 59e3bc13f..2a9e295b7 100644 --- a/wallets/metamask/src/pages/NotificationPage/page.ts +++ b/wallets/metamask/src/pages/NotificationPage/page.ts @@ -9,7 +9,9 @@ import { signSimpleMessage, signStructuredMessage, token, - transaction + transaction, + providePublicEncryptionKey, + decryptMessage } from './actions' import Selectors from './selectors' @@ -139,4 +141,16 @@ export class NotificationPage { await token.addNew(notificationPage) } + + async providePublicEncryptionKey(extensionId: string) { + const notificationPage = await getNotificationPageAndWaitForLoad(this.page.context(), extensionId) + + await providePublicEncryptionKey(notificationPage) + } + + async decryptMessage(extensionId: string) { + const notificationPage = await getNotificationPageAndWaitForLoad(this.page.context(), extensionId) + + await decryptMessage(notificationPage) + } } diff --git a/wallets/metamask/test/e2e/metamask/encrypt.spec.ts b/wallets/metamask/test/e2e/metamask/encrypt.spec.ts new file mode 100644 index 000000000..78981df68 --- /dev/null +++ b/wallets/metamask/test/e2e/metamask/encrypt.spec.ts @@ -0,0 +1,34 @@ +import { testWithMetaMask } from '../testWithMetaMask' + +const test = testWithMetaMask + +const { expect } = test + +test('should provide public encryption key', async ({ page, metamask }) => { + await page.locator('#getEncryptionKeyButton').click() + await metamask.providePublicEncryptionKey() + + await expect(page.locator('#encryptionKeyDisplay')).toHaveText('mtrHp1WHZM9rxF2Ilot9Hie5XmQcKCf7oDQ1DpGkTSI=') +}) + +test('should encrypt and decrypt a message', async ({ page, metamask }) => { + await page.locator('#getEncryptionKeyButton').click() + await metamask.providePublicEncryptionKey() + await expect(page.locator('#encryptionKeyDisplay')).toHaveText('mtrHp1WHZM9rxF2Ilot9Hie5XmQcKCf7oDQ1DpGkTSI=') + + // `fill` does not trigger buttons validation, so we use `type` instead + await page.locator('#encryptMessageInput').type('Hello, world') + + await page.locator('#encryptButton').click() + + const encryptedMessage = await page.locator('#ciphertextDisplay').textContent() + + expect(encryptedMessage).toContain('0x7b') + + await page.locator('#decryptButton').click() + await metamask.decrypt() + + const decryptedMessage = await page.locator('#cleartextDisplay').textContent() + + expect(decryptedMessage).toEqual('Hello, world') +})