Skip to content

Commit

Permalink
Merge branch 'main' into tbaut-bump-subsquid
Browse files Browse the repository at this point in the history
  • Loading branch information
Tbaut authored Apr 4, 2024
2 parents 21100b2 + 3dfea80 commit a2dce6c
Show file tree
Hide file tree
Showing 19 changed files with 619 additions and 247 deletions.
6 changes: 4 additions & 2 deletions packages/ui/cypress/fixtures/landingData.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ export const defaultNetwork = 'rococo'
const WATCH_ACCOUNT_ANCHOR = 'watched-accounts'
export const landingPageNetwork = (networkName: string) => `${baseUrl}?network=${networkName}`
export const landingPageUrl = landingPageNetwork('rococo')
export const settingsPageUrl = `${baseUrl}/settings?network=${defaultNetwork}`
export const settingsPageWatchAccountUrl = `${settingsPageUrl}#${WATCH_ACCOUNT_ANCHOR}`
export const getSettingsPageUrl = (network = defaultNetwork) =>
`${baseUrl}/settings?network=${network}`
export const getSettingsPageWatchAccountUrl = (network = defaultNetwork) =>
`${getSettingsPageUrl(network)}#${WATCH_ACCOUNT_ANCHOR}`
export const landingPageAddressUrl = (address: string) => `${landingPageUrl}&address=${address}`
6 changes: 6 additions & 0 deletions packages/ui/cypress/fixtures/nameDisplay.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
export const multisigWithKusamaIdentity = {
publicKey: '0x905f923a67cec79db9e1415567822f2c440e794c4a38b43144bfb1a044b2a2f2',
address: 'Fqcoa6z2T8QJkNWMr8M7LcVmPonv7wwARsvciiL7HyUnJc4',
identityMain: 'ChainSafe',
subIdentity: 'ChainSafe Validator 0'
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,13 @@ export const accountDisplay = {
pureBadge: () => cy.get('[data-cy=badge-pure]'),
multisigBadge: () => cy.get('[data-cy=badge-multi]'),
nameLabel: () => cy.get('[data-cy=label-account-name]'),
noNameLabel: () => cy.get('[data-cy=label-no-name]'),
addressLabel: () => cy.get('[data-cy=label-account-address]'),
watchedIcon: () => cy.get('[data-cy=icon-watched]')
watchedIcon: () => cy.get('[data-cy=icon-watched]'),
nameEditButton: () => cy.get('[data-cy=button-name-edit]'),
validateEditButton: () => cy.get('[data-cy=button-edition-submit]'),
cancelEditButton: () => cy.get('[data-cy=button-edition-cancel]'),
nameEditionInput: () => cy.get('[data-cy=input-name-edition]'),
identityIcon: () => cy.get('[data-cy=icon-identity]'),
subIdentityLabel: () => cy.get('[data-cy=label-sub-identity]')
}
1 change: 1 addition & 0 deletions packages/ui/cypress/tests/address-bar.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,7 @@ describe('Account address in the address bar', () => {

// check that there is the pure address in the address bar
cy.url().should('include', expectedPureAddress)
topMenuItems.multiproxySelectorInputDesktop().should('have.value', expectedPureAddress)
topMenuItems
.desktopMenu()
.within(() =>
Expand Down
171 changes: 171 additions & 0 deletions packages/ui/cypress/tests/name-edition-display.cy.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
import { accountDisplay } from '../support/page-objects/components/accountDisplay'
import { getSettingsPageWatchAccountUrl, landingPageNetwork } from '../fixtures/landingData'
import { settingsPage } from '../support/page-objects/settingsPage'
import { topMenuItems } from '../support/page-objects/topMenuItems'
import { watchMultisigs } from '../fixtures/watchAccounts/watchMultisigs'
import { multisigPage } from '../support/page-objects/multisigPage'
import { multisigWithKusamaIdentity } from '../fixtures/nameDisplay'

describe('Name Edition and Display', () => {
it('can see the edit button with no name', () => {
const { purePublicKey } = watchMultisigs['multisig-with-pure']

cy.setupAndVisit({
url: getSettingsPageWatchAccountUrl('polkadot'),
watchedAccounts: [purePublicKey]
})

settingsPage.accountContainer().within(() => {
accountDisplay.identicon().should('be.visible')
accountDisplay.addressLabel().should('be.visible')
accountDisplay.noNameLabel().should('have.text', 'No Name')
accountDisplay.nameEditButton().should('be.visible')
})
})

it('can edit with no name before', () => {
const { purePublicKey } = watchMultisigs['multisig-with-pure']
const newName = 'some name'
const newName2 = 'new name 2'
cy.setupAndVisit({
url: getSettingsPageWatchAccountUrl('polkadot'),
watchedAccounts: [purePublicKey]
})

settingsPage.accountContainer().within(() => {
accountDisplay.nameEditButton().click()
accountDisplay.nameEditionInput().should('be.focused')
// editing with enter
accountDisplay.nameEditionInput().type(`${newName}{Enter}`)
accountDisplay.nameEditionInput().should('not.exist')
accountDisplay.nameLabel().should('have.text', newName)
accountDisplay.noNameLabel().should('not.exist')

//editing with validate button
accountDisplay.nameEditButton().click()
accountDisplay.nameEditionInput().should('have.value', newName)
accountDisplay.nameEditionInput().type(`{selectAll}${newName2}`)
accountDisplay.validateEditButton().click()
accountDisplay.nameEditionInput().should('not.exist')
accountDisplay.nameLabel().should('have.text', newName2)
accountDisplay.noNameLabel().should('not.exist')
})
})

it('can edit and cancel with a name before', () => {
const { purePublicKey } = watchMultisigs['multisig-with-pure']
const originalName = 'some name'
const newName = 'new name'
cy.setupAndVisit({
url: getSettingsPageWatchAccountUrl('polkadot'),
watchedAccounts: [purePublicKey],
accountNames: { [purePublicKey]: originalName }
})

settingsPage.accountContainer().within(() => {
//edit and cancel with Escape
accountDisplay.nameEditButton().click()
accountDisplay.nameEditionInput().should('have.value', originalName)
accountDisplay.nameEditionInput().type(`{selectAll}${newName}{esc}`)
accountDisplay.nameEditionInput().should('not.exist')
accountDisplay.nameLabel().should('have.text', originalName)
accountDisplay.noNameLabel().should('not.exist')

//edit and cancel with cancel button
accountDisplay.nameEditButton().click()
accountDisplay.nameEditionInput().should('have.value', originalName)
accountDisplay.nameEditionInput().type(`{selectAll}${newName}`)
accountDisplay.cancelEditButton().click()
accountDisplay.nameEditionInput().should('not.exist')
accountDisplay.nameLabel().should('have.text', originalName)
accountDisplay.noNameLabel().should('not.exist')

//back to no name
accountDisplay.nameEditButton().click()
accountDisplay.nameEditionInput().should('have.value', originalName)
accountDisplay.nameEditionInput().type(`{selectAll}{del}{enter}`)
accountDisplay.nameEditionInput().should('not.exist')
accountDisplay.nameLabel().should('be.empty')
accountDisplay.noNameLabel().should('have.text', 'No Name')
})
})

it('can display a local name with identity', () => {
const { publicKey, address } = multisigWithKusamaIdentity
const originalName = 'some name'

cy.setupAndVisit({
url: landingPageNetwork('kusama'),
watchedAccounts: [publicKey],
accountNames: { [publicKey]: originalName }
})

// show the local name
topMenuItems.multiproxySelectorInputDesktop().should('have.value', originalName)

multisigPage
.accountHeader()
.should('be.visible')
.within(() => {
accountDisplay.addressLabel().should('contain.text', address.slice(0, 6))
accountDisplay.nameLabel().should('have.text', originalName)
accountDisplay.identityIcon().should('be.visible')
accountDisplay.subIdentityLabel().should('not.exist')
})
})

it('can edit a local name with identity', () => {
const { publicKey } = multisigWithKusamaIdentity
const originalName = 'some name'
const newName = 'new name'

cy.setupAndVisit({
url: landingPageNetwork('kusama'),
watchedAccounts: [publicKey],
accountNames: { [publicKey]: originalName }
})

// show the local name
topMenuItems.multiproxySelectorInputDesktop().should('have.value', originalName)

multisigPage
.accountHeader()
.should('be.visible')
.within(() => {
accountDisplay.nameEditButton().click()
accountDisplay.nameEditionInput().should('have.value', originalName)
accountDisplay.nameEditionInput().type(`{selectAll}${newName}{Enter}`)
})

topMenuItems.multiproxySelectorInputDesktop().should('have.value', newName)
})

it('can delete local name and see identity and sub', () => {
const { publicKey, identityMain, subIdentity } = multisigWithKusamaIdentity
const originalName = 'some name'

cy.setupAndVisit({
url: landingPageNetwork('kusama'),
watchedAccounts: [publicKey],
accountNames: { [publicKey]: originalName }
})

// show the local name
topMenuItems.multiproxySelectorInputDesktop().should('have.value', originalName)

multisigPage
.accountHeader()
.should('be.visible')
.within(() => {
accountDisplay.nameEditButton().click()
accountDisplay.nameEditionInput().should('have.value', originalName)

// remove the local name shows the identity name and sub
accountDisplay.nameEditionInput().type(`{selectAll}{del}{Enter}`)
accountDisplay.identityIcon().should('be.visible')
accountDisplay.nameLabel().should('have.text', `${identityMain}/${subIdentity}`)
})

topMenuItems.multiproxySelectorInputDesktop().should('have.value', identityMain)
})
})
4 changes: 2 additions & 2 deletions packages/ui/cypress/tests/network-switch.cy.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { accountDisplay } from '../support/page-objects/components/accountDisplay'
import { settingsPageWatchAccountUrl } from '../fixtures/landingData'
import { getSettingsPageWatchAccountUrl } from '../fixtures/landingData'
import { settingsPage } from '../support/page-objects/settingsPage'
import { topMenuItems } from '../support/page-objects/topMenuItems'
import { watchMultisigs } from '../fixtures/watchAccounts/watchMultisigs'
Expand All @@ -18,7 +18,7 @@ const kusamaAddress = encodeAddress(multisigAddress, KUSAMA_S58_PREFIX)
describe('Network can be switched', () => {
it('should switch network using selector', () => {
cy.setupAndVisit({
url: settingsPageWatchAccountUrl,
url: getSettingsPageWatchAccountUrl(),
accountNames: { [multisigPublicKey]: multisigName },
watchedAccounts: [multisigPublicKey]
})
Expand Down
8 changes: 4 additions & 4 deletions packages/ui/cypress/tests/walletconnect.cy.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { settingsPageUrl } from '../fixtures/landingData'
import { getSettingsPageUrl } from '../fixtures/landingData'
import { settingsPage } from '../support/page-objects/settingsPage'
import { topMenuItems } from '../support/page-objects/topMenuItems'
import { testAccounts } from '../fixtures/testAccounts'

describe('WalletConnect', () => {
it('can see expected wc state when a wallet is not connected', () => {
cy.visit(settingsPageUrl)
cy.visit(getSettingsPageUrl())
topMenuItems.connectButton().should('be.visible')
settingsPage.wallectConnectAccordion().should('be.visible').click()
// ensure elements are disabled when not connected
Expand All @@ -22,7 +22,7 @@ describe('WalletConnect', () => {

it('can see expected wc state when wallet is connected', () => {
cy.setupAndVisit({
url: settingsPageUrl,
url: getSettingsPageUrl(),
extensionConnectionAllowed: true,
injectExtensionWithAccounts: [testAccounts['Multisig Member Account 1']]
})
Expand All @@ -38,7 +38,7 @@ describe('WalletConnect', () => {
})

it('can see the wallet connect accordion is collapsed by default', () => {
cy.visit(settingsPageUrl)
cy.visit(getSettingsPageUrl())
topMenuItems.connectButton().should('be.visible')
topMenuItems.settingsButton().click()
// ensure wallet connect accordion is closed by default
Expand Down
16 changes: 8 additions & 8 deletions packages/ui/cypress/tests/watched-accounts.cy.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { accountDisplay } from '../support/page-objects/components/accountDisplay'
import {
landingPageUrl,
settingsPageUrl,
settingsPageWatchAccountUrl
getSettingsPageUrl,
getSettingsPageWatchAccountUrl
} from '../fixtures/landingData'
import { landingPage } from '../support/page-objects/landingPage'
import { settingsPage } from '../support/page-objects/settingsPage'
Expand Down Expand Up @@ -41,7 +41,7 @@ describe('Watched Accounts', () => {

it('can remove an account from the watch list', () => {
// add an account first
cy.visit(settingsPageWatchAccountUrl)
cy.visit(getSettingsPageWatchAccountUrl())
addWatchAccount(testAccountAddress)
// now remove it
settingsPage.accountContainer().within(() => {
Expand All @@ -54,7 +54,7 @@ describe('Watched Accounts', () => {

it('can see error when attempting to add same address more than once', () => {
// add an account first
cy.visit(settingsPageWatchAccountUrl)
cy.visit(getSettingsPageWatchAccountUrl())
addWatchAccount(testAccountAddress)
settingsPage.accountContainer().should('have.length', 1)
// attempt to add the same account again
Expand All @@ -65,7 +65,7 @@ describe('Watched Accounts', () => {
})

it('can see error when attempting to add an invalid address', () => {
cy.visit(settingsPageWatchAccountUrl)
cy.visit(getSettingsPageWatchAccountUrl())
addWatchAccount('123')
settingsPage.errorLabel().should('be.visible').should('have.text', 'Invalid address')
settingsPage.accountContainer().should('have.length', 0)
Expand All @@ -77,7 +77,7 @@ describe('Watched Accounts', () => {
watchMultisigs['multisig-without-pure']

cy.setupAndVisit({
url: settingsPageWatchAccountUrl,
url: getSettingsPageWatchAccountUrl(),
accountNames: {
[multisigPublicKey]: multisigName
},
Expand Down Expand Up @@ -112,7 +112,7 @@ describe('Watched Accounts', () => {
const { name: pureName, purePublicKey } = watchMultisigs['multisig-with-pure']

cy.setupAndVisit({
url: settingsPageWatchAccountUrl,
url: getSettingsPageWatchAccountUrl(),
accountNames: {
[purePublicKey]: pureName
},
Expand Down Expand Up @@ -212,7 +212,7 @@ describe('Watched Accounts', () => {
const { purePublicKey } = watchMultisigs['multisig-with-pure']

cy.setupAndVisit({
url: settingsPageUrl,
url: getSettingsPageUrl(),
watchedAccounts: [purePublicKey]
})
settingsPage.wallectConnectAccordion().click()
Expand Down
2 changes: 1 addition & 1 deletion packages/ui/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
"reactflow": "^11.10.3",
"rxjs": "^7.8.1",
"typescript": "5.3.3",
"vite": "^5.1.1"
"vite": "^5.1.7"
},
"devDependencies": {
"@chainsafe/cypress-polkadot-wallet": "^2.1.0",
Expand Down
Loading

0 comments on commit a2dce6c

Please sign in to comment.