Skip to content

Commit f3cca9d

Browse files
committed
Playwright - AddNewAccount & RenameAccount
1 parent ced0f0a commit f3cca9d

File tree

8 files changed

+83
-72
lines changed

8 files changed

+83
-72
lines changed

wallets/phantom/src/playwright/Phantom.ts

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -94,15 +94,8 @@ export class Phantom extends PhantomAbstract {
9494
*
9595
* @param seedPhrase - The seed phrase to import.
9696
*/
97-
async importWallet(
98-
seedPhrase: string
99-
// keepOpened?: "keepOpened"
100-
): Promise<void> {
101-
await this.onboardingPage.importWallet(
102-
seedPhrase,
103-
this.password
104-
//keepOpened
105-
)
97+
async importWallet(seedPhrase: string): Promise<void> {
98+
await this.onboardingPage.importWallet(seedPhrase, this.password)
10699
}
107100

108101
/**

wallets/phantom/src/playwright/pages/HomePage/actions/addNewAccount.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ export async function addNewAccount(page: Page, accountName: string) {
1010
await page.locator(Selectors.accountMenu.accountButton).click()
1111

1212
await page.locator(Selectors.accountMenu.addAccountMenu.addAccountButton).click()
13-
await page.locator(Selectors.accountMenu.addAccountMenu.addNewAccountButton).click()
13+
14+
await page.locator(Selectors.accountMenu.addAccountMenu.createNewAccountButton).click()
1415

1516
await page.locator(Selectors.accountMenu.addAccountMenu.addNewAccountMenu.accountNameInput).fill(accountName)
1617

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
1-
import type { Page } from '@playwright/test'
1+
import { type Page, expect } from '@playwright/test'
22
import Selectors from '../../../../selectors/pages/HomePage'
33
import { allTextContents } from '../../../utils/allTextContents'
44

55
export async function renameAccount(page: Page, currentAccountName: string, newAccountName: string) {
6+
// TODO: Use zod to validate this.
7+
if (newAccountName.length === 0) {
8+
throw new Error('[RenameAccount] Account name cannot be an empty string')
9+
}
10+
611
await page.locator(Selectors.accountMenu.accountButton).click()
712

813
const accountNamesLocators = await page.locator(Selectors.accountMenu.accountNames).all()
@@ -17,12 +22,16 @@ export async function renameAccount(page: Page, currentAccountName: string, newA
1722
throw new Error(`[SwitchAccount] Account with name ${currentAccountName} not found`)
1823
}
1924

20-
// biome-ignore lint/style/noNonNullAssertion: this non-null assertion is intentional
21-
const accountIndex = accountNames.indexOf(seekedAccountNames[0]!)
25+
await page.locator(Selectors.accountMenu.manageAccountsButton).click()
26+
27+
await page.locator(Selectors.manageAccountButton(currentAccountName)).click()
28+
29+
await page.locator(Selectors.editAccountMenu.accountNameButton).click()
30+
31+
await page.locator(Selectors.accountMenu.addAccountMenu.addNewAccountMenu.accountNameInput).fill(newAccountName)
32+
33+
await page.locator(Selectors.accountMenu.renameAccountMenu.saveButton).click()
2234

23-
await page.locator(Selectors.accountMenu.renameAccountMenu.listItemButton).nth(accountIndex).click()
24-
await page.locator(Selectors.threeDotsMenu.accountDetailsButton).click()
25-
await page.locator(Selectors.accountMenu.renameAccountMenu.renameButton).click()
26-
await page.locator(Selectors.accountMenu.renameAccountMenu.renameInput).fill(newAccountName)
27-
await page.locator(Selectors.accountMenu.renameAccountMenu.confirmRenameButton).click()
35+
// Verify that account has been renamed
36+
await expect(page.locator(Selectors.editAccountMenu.accountNameButton)).toContainText(newAccountName)
2837
}

wallets/phantom/src/playwright/pages/OnboardingPage/actions/importWallet.ts

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,7 @@ import Selectors from '../../../../selectors/pages/OnboardingPage'
77
// import { closePopover } from "../../HomePage/actions";
88
import { confirmSecretRecoveryPhrase, createPassword } from './helpers'
99

10-
export async function importWallet(
11-
page: Page,
12-
seedPhrase: string,
13-
password: string
14-
// keepOpened?: "keepOpened"
15-
) {
10+
export async function importWallet(page: Page, seedPhrase: string, password: string) {
1611
await page.locator(Selectors.GetStartedPageSelectors.importWallet).click()
1712

1813
await page.locator(Selectors.GetStartedPageSelectors.importRecoveryPhraseButton).click()
@@ -33,13 +28,6 @@ export async function importWallet(
3328
'All Done success screen should be visible'
3429
).toBeVisible({ timeout: 10_000 })
3530

36-
// TESTING WITHOUT HIS
37-
// if (!keepOpened) {
38-
// await page
39-
// .locator(Selectors.SecretRecoveryPhrasePageSelectors.continueButton)
40-
// .click();
41-
// }
42-
4331
// TO DO !!!!!!
4432
// await verifyImportedWallet(page);
4533
}

wallets/phantom/src/playwright/pages/OnboardingPage/page.ts

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,7 @@ export class OnboardingPage {
1212
this.page = page
1313
}
1414

15-
async importWallet(
16-
seedPhrase: string,
17-
password: string
18-
// keepOpened?: "keepOpened"
19-
) {
20-
// return await importWallet(this.page, seedPhrase, password, keepOpened);
15+
async importWallet(seedPhrase: string, password: string) {
2116
return await importWallet(this.page, seedPhrase, password)
2217
}
2318
}

wallets/phantom/src/selectors/pages/HomePage/index.ts

Lines changed: 18 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,13 @@
11
import { createDataTestSelector } from '../../createDataTestSelector'
22
import settings from './settings'
33

4-
const accountMenuContainer = '.multichain-account-menu-popover'
5-
64
const addNewAccountMenu = {
7-
accountNameInput: `${accountMenuContainer} input`,
8-
createButton: `${accountMenuContainer} button.mm-button-primary`
5+
accountNameInput: `input[placeholder="Name"]`,
6+
createButton: `button${createDataTestSelector('primary-button')}:has-text("Create")`
97
}
108

119
const renameAccountMenu = {
12-
listItemButton: `${accountMenuContainer} ${createDataTestSelector('account-list-item-menu-button')}`,
13-
renameButton: `${createDataTestSelector('editable-label-button')}`,
10+
saveButton: `button${createDataTestSelector('primary-button')}:has-text("Save")`,
1411
confirmRenameButton: 'div.editable-label button.mm-button-icon',
1512
renameInput: '.mm-text-field .mm-box--padding-right-4'
1613
}
@@ -22,38 +19,34 @@ const importAccountMenu = {
2219
polygonNetwork: `[data-label="Polygon"]`,
2320
bitcoinNetwork: `[data-label="Bitcoin"]`,
2421
nameInput: `input[name="name"]`,
25-
// privateKeyInput: `${accountMenuContainer} input#private-key-box`,
2622
privateKeyInput: `textarea[placeholder="Private key"]`,
27-
// importButton: `${accountMenuContainer} ${createDataTestSelector(
28-
// "import-account-confirm-button"
29-
// )}`,
30-
importButton: `button:has-text("Import")`,
31-
error: `${accountMenuContainer} p.mm-form-text-field__help-text`
23+
importButton: `button:has-text("Import")`
3224
}
3325

3426
const addAccountMenu = {
35-
//data-testid="sidebar_menu-button-add_account"
36-
// addAccountButton: `${accountMenuContainer} ${createDataTestSelector(
37-
// "multichain-account-menu-popover-action-button"
38-
// )}`,
3927
addAccountButton: createDataTestSelector('sidebar_menu-button-add_account'),
40-
addNewAccountButton: `${accountMenuContainer} ${createDataTestSelector(
41-
'multichain-account-menu-popover-add-account'
42-
)}`,
43-
importAccountButton: `${accountMenuContainer} div.mm-box.mm-box--padding-4:nth-child(2) > div.mm-box:nth-child(2) > button`,
28+
createNewAccountButton: createDataTestSelector('add-account-create-new-wallet-button'),
4429
importAccountPrivateKeyButton: 'text=Import Private Key',
4530
addNewAccountMenu,
4631
importAccountMenu
4732
}
4833

34+
const editAccountMenu = {
35+
accountNameButton: `button:has-text("Account Name")`
36+
}
37+
4938
const accountMenu = {
50-
// accountButton: createDataTestSelector('account-menu-icon'),
39+
accountName: createDataTestSelector('home-header-account-name'),
5140
accountButton: createDataTestSelector('settings-menu-open-button'),
52-
accountNames: `${accountMenuContainer} .multichain-account-menu-popover__list .multichain-account-list-item__account-name__button`,
41+
accountNames: `#accounts [role="button"] > p`,
42+
manageAccountsButton: createDataTestSelector('sidebar_menu-button-manage_accounts'),
5343
addAccountMenu,
5444
renameAccountMenu
5545
}
5646

47+
const manageAccountButton = (accountName: string) =>
48+
`[role="button"][data-testid="manage-accounts-sortable-${accountName}"]`
49+
5750
const threeDotsMenu = {
5851
threeDotsButton: createDataTestSelector('account-options-menu-button'),
5952
settingsButton: createDataTestSelector('global-menu-settings'),
@@ -67,16 +60,6 @@ const popover = {
6760
closeButton: `${popoverContainer} ${createDataTestSelector('popover-close')}`
6861
}
6962

70-
const networkAddedPopover = {
71-
switchToNetworkButton: '.home__new-network-added__switch-to-button',
72-
dismissButton: '.home__new-network-added button.btn-secondary',
73-
switchCompleteCloseButton: '.popover-header .box.popover-header__title button.mm-box.mm-button-icon'
74-
}
75-
76-
const newNetworkInfoPopover = {
77-
gotItButton: '.new-network-info__wrapper button.btn-primary'
78-
}
79-
8063
const recoveryPhraseReminder = {
8164
gotItButton: '.recovery-phrase-reminder button.btn-primary'
8265
}
@@ -115,11 +98,11 @@ export default {
11598
activityTab,
11699
networkDropdown,
117100
accountMenu,
101+
editAccountMenu,
118102
recoveryPhraseReminder,
119103
popover,
120-
networkAddedPopover,
121-
newNetworkInfoPopover,
122104
portfolio: {
123105
singleToken
124-
}
106+
},
107+
manageAccountButton
125108
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { testWithSynpress } from '@synthetixio/synpress-core'
2+
import { Phantom, phantomFixtures } from '../../../src/playwright'
3+
4+
import basicSetup from '../wallet-setup/basic.setup'
5+
6+
const test = testWithSynpress(phantomFixtures(basicSetup))
7+
8+
const { expect } = test
9+
10+
test('should add a new account with specified name', async ({ context, phantomPage }) => {
11+
const phantom = new Phantom(context, phantomPage, basicSetup.walletPassword)
12+
13+
const accountName = 'Test Account'
14+
await phantom.addNewAccount(accountName)
15+
16+
await expect(phantomPage.locator(phantom.homePage.selectors.accountMenu.accountName)).toHaveText(accountName)
17+
})
18+
19+
test('should throw an error if an empty account name is passed', async ({ context, phantomPage }) => {
20+
const phantom = new Phantom(context, phantomPage, basicSetup.walletPassword)
21+
22+
await expect(phantom.addNewAccount('')).rejects.toThrowError('[AddNewAccount] Account name cannot be an empty string')
23+
})
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { testWithSynpress } from '@synthetixio/synpress-core'
2+
import { Phantom, phantomFixtures } from '../../../src/playwright'
3+
4+
import basicSetup from '../wallet-setup/basic.setup'
5+
6+
const test = testWithSynpress(phantomFixtures(basicSetup))
7+
8+
const { expect } = test
9+
10+
test('should rename current account with specified name', async ({ context, phantomPage }) => {
11+
const phantom = new Phantom(context, phantomPage, basicSetup.walletPassword)
12+
13+
const accountName = 'Test Account'
14+
await phantom.renameAccount('Account 1', accountName)
15+
16+
await phantomPage.reload()
17+
18+
await expect(phantomPage.locator(phantom.homePage.selectors.accountMenu.accountName)).toHaveText(accountName)
19+
})

0 commit comments

Comments
 (0)