Skip to content

Commit 5e2db5f

Browse files
authored
QA - manage custom networks (#3354)
1 parent 6d4da52 commit 5e2db5f

File tree

6 files changed

+132
-24
lines changed

6 files changed

+132
-24
lines changed

packages/core-mobile/app/new/features/accountSettings/screens/manageNetworks/AddEditNetworkScreen.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,8 @@ export const AddEditNetworkScreen = (): JSX.Element => {
330330
gap: 16
331331
}}>
332332
<Button
333+
accessible={true}
334+
testID="save_network_btn"
333335
type="primary"
334336
size="large"
335337
onPress={handleSubmit}
@@ -405,6 +407,8 @@ export const AddEditNetworkScreen = (): JSX.Element => {
405407
alignItems: 'center'
406408
}}>
407409
<Icons.Custom.Category
410+
testID="custom_avatar"
411+
accessible={true}
408412
width={40}
409413
height={40}
410414
color={theme.colors.$textSecondary}

packages/core-mobile/e2e-appium/helpers/networks.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,23 @@ export type Network = {
55
haveToggle: boolean
66
data?: {
77
rpcUrl?: string
8-
explorerUrl: string
8+
explorerUrl?: string
99
tokenSymbol: string
1010
tokenName: string
1111
chainId: string
1212
}
1313
}
14+
15+
export const customNetwork: Network = {
16+
name: 'POLYGON',
17+
haveToggle: true,
18+
data: {
19+
rpcUrl: 'https://polygon-rpc.com',
20+
chainId: '137',
21+
tokenSymbol: 'POLY',
22+
tokenName: 'Polygon Ecosystem Token'
23+
}
24+
}
1425
export const networks: Network[] = [
1526
{
1627
name: common.cChain,

packages/core-mobile/e2e-appium/locators/settings.loc.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,5 +82,8 @@ export default {
8282
typeInOrPasteAddress: 'Type in or paste address',
8383
contactPreviewAddress: 'contact_preview_address',
8484
hkd: 'HKD',
85-
beamL1: 'Beam L1'
85+
beamL1: 'Beam L1',
86+
customAvatar: 'custom_avatar',
87+
nameThisNetworkBtn: 'Name this network',
88+
saveNetworkBtn: 'save_network_btn'
8689
}

packages/core-mobile/e2e-appium/pages/settings.page.ts

Lines changed: 56 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
/* eslint-disable max-params */
21
import { actions } from '../helpers/actions'
32
import settings from '../locators/settings.loc'
43
import { selectors } from '../helpers/selectors'
@@ -54,10 +53,18 @@ class Settings {
5453
return selectors.getById(settings.nameContactBtn)
5554
}
5655

56+
get nameThisNetworkBtn() {
57+
return selectors.getByText(settings.nameThisNetworkBtn)
58+
}
59+
5760
get networkRpcUrl() {
5861
return selectors.getById(settings.networkRpcUrl)
5962
}
6063

64+
get saveNetworkBtn() {
65+
return selectors.getById(settings.saveNetworkBtn)
66+
}
67+
6168
get chainId() {
6269
return selectors.getById(settings.chainId)
6370
}
@@ -174,6 +181,10 @@ class Settings {
174181
return selectors.getByText(settings.emptyContacts)
175182
}
176183

184+
get customAvatar() {
185+
return selectors.getById(settings.customAvatar)
186+
}
187+
177188
networkList(name: string) {
178189
return selectors.getById(`network_list__${name}`)
179190
}
@@ -207,7 +218,7 @@ class Settings {
207218
contactName: string
208219
) {
209220
// add contact name
210-
await this.addContactOrNetworkName(contactName)
221+
await this.addContactName(contactName)
211222
// add contact addresses
212223
for (const [network, address] of Object.entries(networkAndAddress)) {
213224
await actions.click(selectors.getById(`contact_delete_btn__${network}`))
@@ -244,7 +255,7 @@ class Settings {
244255
contactName: string
245256
) {
246257
// add contact name
247-
await this.addContactOrNetworkName(contactName)
258+
await this.addContactName(contactName)
248259
// add contact addresses
249260
for (const [network, address] of Object.entries(networkAndAddress)) {
250261
await this.setAddress(network, address, contactName)
@@ -370,36 +381,58 @@ class Settings {
370381
}
371382
}
372383

373-
async addContactOrNetworkName(name: string) {
384+
async addContactName(name: string) {
374385
await actions.tap(this.nameContactBtn)
375386
await actions.type(common.dialogInput, name)
376387
await actions.tapEnterOnKeyboard()
377388
await common.tapSaveAlert()
378389
}
379390

391+
async addNetworkName(name: string) {
392+
await actions.tap(this.nameThisNetworkBtn)
393+
await actions.type(common.dialogInput, name)
394+
await actions.tapEnterOnKeyboard()
395+
await common.tapSaveAlert()
396+
}
397+
380398
async setNetworkData(type: string, value: string) {
381399
await actions.tap(selectors.getByText(`Add ${type}`))
400+
await actions.dragAndDrop(this.nameThisNetworkBtn, [0, -500])
382401
await actions.type(
383402
selectors.getById(`advanced_input__${type.toLowerCase()}`),
384403
value
385404
)
386-
await actions.dismissKeyboard()
405+
try {
406+
await actions.tapEnterOnKeyboard()
407+
} catch (e) {
408+
await actions.dismissKeyboard(`advanced_input__${type.toLowerCase()}`)
409+
}
387410
}
388411

389-
async addNetwork(
390-
networkName: string,
391-
rpcUrl: string,
392-
chainId: string,
393-
nativeTokenSymbol: string,
394-
nativeTokenName: string
395-
) {
412+
async addNetwork(network: Network) {
413+
const { name, data } = network
396414
await this.tapAddNetworkBtn()
397-
await this.addContactOrNetworkName(networkName)
398-
await this.setNetworkData('Network RPC URL', rpcUrl)
399-
await this.setNetworkData('Chain ID', chainId)
400-
await this.setNetworkData('token symbol', nativeTokenSymbol)
401-
await this.setNetworkData('token name', nativeTokenName)
402-
await common.tapSave()
415+
await this.setNetworkData('Network RPC URL', data?.rpcUrl ?? '')
416+
await this.setNetworkData('Chain ID', data?.chainId ?? '')
417+
await this.setNetworkData('token symbol', data?.tokenSymbol ?? '')
418+
await this.setNetworkData('token name', data?.tokenName ?? '')
419+
await this.addNetworkName(name)
420+
await this.tapSaveNetworkBtn()
421+
}
422+
423+
async tapSaveNetworkBtn() {
424+
await actions.tap(this.saveNetworkBtn)
425+
}
426+
427+
async editNetwork(networkName: string) {
428+
await this.addNetworkName(networkName)
429+
await this.tapSaveNetworkBtn()
430+
}
431+
432+
async removeNetwork(networkName: string) {
433+
await this.tapNetworkByName(networkName)
434+
await common.tapDelete()
435+
await common.tapDeleteAlert()
403436
}
404437

405438
async verifySettingsRow(row: string, rightVal: string | undefined) {
@@ -454,9 +487,11 @@ class Settings {
454487
await actions.isVisible(this.networkRpcUrl)
455488
await actions.isVisible(this.networkDetails(network.data?.rpcUrl ?? ''))
456489
}
457-
await actions.isVisible(
458-
this.networkDetails(network.data?.explorerUrl ?? '')
459-
)
490+
491+
if (network.data?.explorerUrl) {
492+
await actions.isVisible(this.networkDetails(network.data?.explorerUrl))
493+
}
494+
460495
await actions.isVisible(this.networkDetails(network.data?.chainId ?? ''))
461496
await actions.isVisible(
462497
this.networkDetails(network.data?.tokenSymbol ?? '')
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import settings from '../../pages/settings.page'
2+
import common from '../../pages/commonEls.page'
3+
import warmup from '../../helpers/warmup'
4+
import { customNetwork } from '../../helpers/networks'
5+
import portfolioPage from '../../pages/portfolio.page'
6+
import { actions } from '../../helpers/actions'
7+
import { selectors } from '../../helpers/selectors'
8+
9+
describe('Settings', () => {
10+
it('Custom Networks - should add a custom network', async () => {
11+
await warmup()
12+
await settings.goNetworks()
13+
await settings.addNetwork(customNetwork)
14+
await settings.verifyNetworkDetails(customNetwork)
15+
})
16+
17+
it('Custom Networks - should toggle a custom network', async () => {
18+
// Enable a custom network
19+
await common.typeSearchBar(customNetwork.name)
20+
await settings.tapNetworkSwitch(customNetwork.name)
21+
await common.dismissBottomSheet()
22+
await portfolioPage.verifyNetworksRemoved([customNetwork])
23+
await settings.goNetworks()
24+
// Disable a custom network
25+
await common.typeSearchBar(customNetwork.name)
26+
await settings.tapNetworkSwitch(customNetwork.name, false)
27+
await common.dismissBottomSheet()
28+
await portfolioPage.verifyNetworksAdded([customNetwork])
29+
})
30+
31+
it('Custom Networks - should edit a custom network', async () => {
32+
const networkWrongName = 'POLYGON (WRONG)'
33+
await settings.goNetworks()
34+
await settings.tapNetworkByName(customNetwork.name)
35+
await settings.editNetwork(networkWrongName)
36+
await settings.verifyNetworkDetails({
37+
...customNetwork,
38+
name: 'POLYGON (WRONG)'
39+
})
40+
})
41+
42+
it('Custom Networks - should remove a custom network', async () => {
43+
const networkName = 'POLYGON (WRONG)'
44+
await settings.removeNetwork(networkName)
45+
await common.typeSearchBar(networkName)
46+
await actions.isNotVisible(
47+
selectors.getByText(`network_toggle_enabled__${networkName}`)
48+
)
49+
await actions.isNotVisible(
50+
selectors.getByText(`network_toggle_disabled__${networkName}`)
51+
)
52+
})
53+
})

packages/k2-alpine/src/components/Button/Button.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ interface ButtonProps {
3434
style?: StyleProp<ViewStyle>
3535
textStyle?: StyleProp<TextStyle>
3636
testID?: string
37+
accessible?: boolean
3738
type: ButtonType
3839
size: ButtonSize
3940
leftIcon?: ButtonIconType | JSX.Element
@@ -54,6 +55,7 @@ export const Button = forwardRef<RNView, ButtonProps & PropsWithChildren>(
5455
textStyle,
5556
children,
5657
testID,
58+
accessible = false,
5759
shouldInverseTheme = false,
5860
...rest
5961
},
@@ -86,7 +88,7 @@ export const Button = forwardRef<RNView, ButtonProps & PropsWithChildren>(
8688
return (
8789
<TouchableOpacity
8890
ref={ref}
89-
accessible={false}
91+
accessible={accessible}
9092
testID={testID}
9193
disabled={disabled}
9294
style={[

0 commit comments

Comments
 (0)