Skip to content

Commit a2dce6c

Browse files
authored
Merge branch 'main' into tbaut-bump-subsquid
2 parents 21100b2 + 3dfea80 commit a2dce6c

19 files changed

+619
-247
lines changed

packages/ui/cypress/fixtures/landingData.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ export const defaultNetwork = 'rococo'
33
const WATCH_ACCOUNT_ANCHOR = 'watched-accounts'
44
export const landingPageNetwork = (networkName: string) => `${baseUrl}?network=${networkName}`
55
export const landingPageUrl = landingPageNetwork('rococo')
6-
export const settingsPageUrl = `${baseUrl}/settings?network=${defaultNetwork}`
7-
export const settingsPageWatchAccountUrl = `${settingsPageUrl}#${WATCH_ACCOUNT_ANCHOR}`
6+
export const getSettingsPageUrl = (network = defaultNetwork) =>
7+
`${baseUrl}/settings?network=${network}`
8+
export const getSettingsPageWatchAccountUrl = (network = defaultNetwork) =>
9+
`${getSettingsPageUrl(network)}#${WATCH_ACCOUNT_ANCHOR}`
810
export const landingPageAddressUrl = (address: string) => `${landingPageUrl}&address=${address}`
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
export const multisigWithKusamaIdentity = {
2+
publicKey: '0x905f923a67cec79db9e1415567822f2c440e794c4a38b43144bfb1a044b2a2f2',
3+
address: 'Fqcoa6z2T8QJkNWMr8M7LcVmPonv7wwARsvciiL7HyUnJc4',
4+
identityMain: 'ChainSafe',
5+
subIdentity: 'ChainSafe Validator 0'
6+
}

packages/ui/cypress/support/page-objects/components/accountDisplay.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,13 @@ export const accountDisplay = {
33
pureBadge: () => cy.get('[data-cy=badge-pure]'),
44
multisigBadge: () => cy.get('[data-cy=badge-multi]'),
55
nameLabel: () => cy.get('[data-cy=label-account-name]'),
6+
noNameLabel: () => cy.get('[data-cy=label-no-name]'),
67
addressLabel: () => cy.get('[data-cy=label-account-address]'),
7-
watchedIcon: () => cy.get('[data-cy=icon-watched]')
8+
watchedIcon: () => cy.get('[data-cy=icon-watched]'),
9+
nameEditButton: () => cy.get('[data-cy=button-name-edit]'),
10+
validateEditButton: () => cy.get('[data-cy=button-edition-submit]'),
11+
cancelEditButton: () => cy.get('[data-cy=button-edition-cancel]'),
12+
nameEditionInput: () => cy.get('[data-cy=input-name-edition]'),
13+
identityIcon: () => cy.get('[data-cy=icon-identity]'),
14+
subIdentityLabel: () => cy.get('[data-cy=label-sub-identity]')
815
}

packages/ui/cypress/tests/address-bar.cy.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,7 @@ describe('Account address in the address bar', () => {
236236

237237
// check that there is the pure address in the address bar
238238
cy.url().should('include', expectedPureAddress)
239+
topMenuItems.multiproxySelectorInputDesktop().should('have.value', expectedPureAddress)
239240
topMenuItems
240241
.desktopMenu()
241242
.within(() =>
Lines changed: 171 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,171 @@
1+
import { accountDisplay } from '../support/page-objects/components/accountDisplay'
2+
import { getSettingsPageWatchAccountUrl, landingPageNetwork } from '../fixtures/landingData'
3+
import { settingsPage } from '../support/page-objects/settingsPage'
4+
import { topMenuItems } from '../support/page-objects/topMenuItems'
5+
import { watchMultisigs } from '../fixtures/watchAccounts/watchMultisigs'
6+
import { multisigPage } from '../support/page-objects/multisigPage'
7+
import { multisigWithKusamaIdentity } from '../fixtures/nameDisplay'
8+
9+
describe('Name Edition and Display', () => {
10+
it('can see the edit button with no name', () => {
11+
const { purePublicKey } = watchMultisigs['multisig-with-pure']
12+
13+
cy.setupAndVisit({
14+
url: getSettingsPageWatchAccountUrl('polkadot'),
15+
watchedAccounts: [purePublicKey]
16+
})
17+
18+
settingsPage.accountContainer().within(() => {
19+
accountDisplay.identicon().should('be.visible')
20+
accountDisplay.addressLabel().should('be.visible')
21+
accountDisplay.noNameLabel().should('have.text', 'No Name')
22+
accountDisplay.nameEditButton().should('be.visible')
23+
})
24+
})
25+
26+
it('can edit with no name before', () => {
27+
const { purePublicKey } = watchMultisigs['multisig-with-pure']
28+
const newName = 'some name'
29+
const newName2 = 'new name 2'
30+
cy.setupAndVisit({
31+
url: getSettingsPageWatchAccountUrl('polkadot'),
32+
watchedAccounts: [purePublicKey]
33+
})
34+
35+
settingsPage.accountContainer().within(() => {
36+
accountDisplay.nameEditButton().click()
37+
accountDisplay.nameEditionInput().should('be.focused')
38+
// editing with enter
39+
accountDisplay.nameEditionInput().type(`${newName}{Enter}`)
40+
accountDisplay.nameEditionInput().should('not.exist')
41+
accountDisplay.nameLabel().should('have.text', newName)
42+
accountDisplay.noNameLabel().should('not.exist')
43+
44+
//editing with validate button
45+
accountDisplay.nameEditButton().click()
46+
accountDisplay.nameEditionInput().should('have.value', newName)
47+
accountDisplay.nameEditionInput().type(`{selectAll}${newName2}`)
48+
accountDisplay.validateEditButton().click()
49+
accountDisplay.nameEditionInput().should('not.exist')
50+
accountDisplay.nameLabel().should('have.text', newName2)
51+
accountDisplay.noNameLabel().should('not.exist')
52+
})
53+
})
54+
55+
it('can edit and cancel with a name before', () => {
56+
const { purePublicKey } = watchMultisigs['multisig-with-pure']
57+
const originalName = 'some name'
58+
const newName = 'new name'
59+
cy.setupAndVisit({
60+
url: getSettingsPageWatchAccountUrl('polkadot'),
61+
watchedAccounts: [purePublicKey],
62+
accountNames: { [purePublicKey]: originalName }
63+
})
64+
65+
settingsPage.accountContainer().within(() => {
66+
//edit and cancel with Escape
67+
accountDisplay.nameEditButton().click()
68+
accountDisplay.nameEditionInput().should('have.value', originalName)
69+
accountDisplay.nameEditionInput().type(`{selectAll}${newName}{esc}`)
70+
accountDisplay.nameEditionInput().should('not.exist')
71+
accountDisplay.nameLabel().should('have.text', originalName)
72+
accountDisplay.noNameLabel().should('not.exist')
73+
74+
//edit and cancel with cancel button
75+
accountDisplay.nameEditButton().click()
76+
accountDisplay.nameEditionInput().should('have.value', originalName)
77+
accountDisplay.nameEditionInput().type(`{selectAll}${newName}`)
78+
accountDisplay.cancelEditButton().click()
79+
accountDisplay.nameEditionInput().should('not.exist')
80+
accountDisplay.nameLabel().should('have.text', originalName)
81+
accountDisplay.noNameLabel().should('not.exist')
82+
83+
//back to no name
84+
accountDisplay.nameEditButton().click()
85+
accountDisplay.nameEditionInput().should('have.value', originalName)
86+
accountDisplay.nameEditionInput().type(`{selectAll}{del}{enter}`)
87+
accountDisplay.nameEditionInput().should('not.exist')
88+
accountDisplay.nameLabel().should('be.empty')
89+
accountDisplay.noNameLabel().should('have.text', 'No Name')
90+
})
91+
})
92+
93+
it('can display a local name with identity', () => {
94+
const { publicKey, address } = multisigWithKusamaIdentity
95+
const originalName = 'some name'
96+
97+
cy.setupAndVisit({
98+
url: landingPageNetwork('kusama'),
99+
watchedAccounts: [publicKey],
100+
accountNames: { [publicKey]: originalName }
101+
})
102+
103+
// show the local name
104+
topMenuItems.multiproxySelectorInputDesktop().should('have.value', originalName)
105+
106+
multisigPage
107+
.accountHeader()
108+
.should('be.visible')
109+
.within(() => {
110+
accountDisplay.addressLabel().should('contain.text', address.slice(0, 6))
111+
accountDisplay.nameLabel().should('have.text', originalName)
112+
accountDisplay.identityIcon().should('be.visible')
113+
accountDisplay.subIdentityLabel().should('not.exist')
114+
})
115+
})
116+
117+
it('can edit a local name with identity', () => {
118+
const { publicKey } = multisigWithKusamaIdentity
119+
const originalName = 'some name'
120+
const newName = 'new name'
121+
122+
cy.setupAndVisit({
123+
url: landingPageNetwork('kusama'),
124+
watchedAccounts: [publicKey],
125+
accountNames: { [publicKey]: originalName }
126+
})
127+
128+
// show the local name
129+
topMenuItems.multiproxySelectorInputDesktop().should('have.value', originalName)
130+
131+
multisigPage
132+
.accountHeader()
133+
.should('be.visible')
134+
.within(() => {
135+
accountDisplay.nameEditButton().click()
136+
accountDisplay.nameEditionInput().should('have.value', originalName)
137+
accountDisplay.nameEditionInput().type(`{selectAll}${newName}{Enter}`)
138+
})
139+
140+
topMenuItems.multiproxySelectorInputDesktop().should('have.value', newName)
141+
})
142+
143+
it('can delete local name and see identity and sub', () => {
144+
const { publicKey, identityMain, subIdentity } = multisigWithKusamaIdentity
145+
const originalName = 'some name'
146+
147+
cy.setupAndVisit({
148+
url: landingPageNetwork('kusama'),
149+
watchedAccounts: [publicKey],
150+
accountNames: { [publicKey]: originalName }
151+
})
152+
153+
// show the local name
154+
topMenuItems.multiproxySelectorInputDesktop().should('have.value', originalName)
155+
156+
multisigPage
157+
.accountHeader()
158+
.should('be.visible')
159+
.within(() => {
160+
accountDisplay.nameEditButton().click()
161+
accountDisplay.nameEditionInput().should('have.value', originalName)
162+
163+
// remove the local name shows the identity name and sub
164+
accountDisplay.nameEditionInput().type(`{selectAll}{del}{Enter}`)
165+
accountDisplay.identityIcon().should('be.visible')
166+
accountDisplay.nameLabel().should('have.text', `${identityMain}/${subIdentity}`)
167+
})
168+
169+
topMenuItems.multiproxySelectorInputDesktop().should('have.value', identityMain)
170+
})
171+
})

packages/ui/cypress/tests/network-switch.cy.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { accountDisplay } from '../support/page-objects/components/accountDisplay'
2-
import { settingsPageWatchAccountUrl } from '../fixtures/landingData'
2+
import { getSettingsPageWatchAccountUrl } from '../fixtures/landingData'
33
import { settingsPage } from '../support/page-objects/settingsPage'
44
import { topMenuItems } from '../support/page-objects/topMenuItems'
55
import { watchMultisigs } from '../fixtures/watchAccounts/watchMultisigs'
@@ -18,7 +18,7 @@ const kusamaAddress = encodeAddress(multisigAddress, KUSAMA_S58_PREFIX)
1818
describe('Network can be switched', () => {
1919
it('should switch network using selector', () => {
2020
cy.setupAndVisit({
21-
url: settingsPageWatchAccountUrl,
21+
url: getSettingsPageWatchAccountUrl(),
2222
accountNames: { [multisigPublicKey]: multisigName },
2323
watchedAccounts: [multisigPublicKey]
2424
})

packages/ui/cypress/tests/walletconnect.cy.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
import { settingsPageUrl } from '../fixtures/landingData'
1+
import { getSettingsPageUrl } from '../fixtures/landingData'
22
import { settingsPage } from '../support/page-objects/settingsPage'
33
import { topMenuItems } from '../support/page-objects/topMenuItems'
44
import { testAccounts } from '../fixtures/testAccounts'
55

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

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

4040
it('can see the wallet connect accordion is collapsed by default', () => {
41-
cy.visit(settingsPageUrl)
41+
cy.visit(getSettingsPageUrl())
4242
topMenuItems.connectButton().should('be.visible')
4343
topMenuItems.settingsButton().click()
4444
// ensure wallet connect accordion is closed by default

packages/ui/cypress/tests/watched-accounts.cy.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { accountDisplay } from '../support/page-objects/components/accountDisplay'
22
import {
33
landingPageUrl,
4-
settingsPageUrl,
5-
settingsPageWatchAccountUrl
4+
getSettingsPageUrl,
5+
getSettingsPageWatchAccountUrl
66
} from '../fixtures/landingData'
77
import { landingPage } from '../support/page-objects/landingPage'
88
import { settingsPage } from '../support/page-objects/settingsPage'
@@ -41,7 +41,7 @@ describe('Watched Accounts', () => {
4141

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

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

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

7979
cy.setupAndVisit({
80-
url: settingsPageWatchAccountUrl,
80+
url: getSettingsPageWatchAccountUrl(),
8181
accountNames: {
8282
[multisigPublicKey]: multisigName
8383
},
@@ -112,7 +112,7 @@ describe('Watched Accounts', () => {
112112
const { name: pureName, purePublicKey } = watchMultisigs['multisig-with-pure']
113113

114114
cy.setupAndVisit({
115-
url: settingsPageWatchAccountUrl,
115+
url: getSettingsPageWatchAccountUrl(),
116116
accountNames: {
117117
[purePublicKey]: pureName
118118
},
@@ -212,7 +212,7 @@ describe('Watched Accounts', () => {
212212
const { purePublicKey } = watchMultisigs['multisig-with-pure']
213213

214214
cy.setupAndVisit({
215-
url: settingsPageUrl,
215+
url: getSettingsPageUrl(),
216216
watchedAccounts: [purePublicKey]
217217
})
218218
settingsPage.wallectConnectAccordion().click()

packages/ui/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
"reactflow": "^11.10.3",
2929
"rxjs": "^7.8.1",
3030
"typescript": "5.3.3",
31-
"vite": "^5.1.1"
31+
"vite": "^5.1.7"
3232
},
3333
"devDependencies": {
3434
"@chainsafe/cypress-polkadot-wallet": "^2.1.0",

0 commit comments

Comments
 (0)