From 63c9eaa4dcb1614b204deee3760c3dbd49cbea05 Mon Sep 17 00:00:00 2001 From: Ivan Vershigora Date: Mon, 1 Mar 2021 13:20:01 +0300 Subject: [PATCH] TST: settings screens test --- screen/send/broadcast.js | 2 + screen/settings/GeneralSettings.js | 2 +- screen/settings/NetworkSettings.js | 6 +- screen/settings/SettingsPrivacy.js | 11 ++- screen/settings/electrumSettings.js | 7 +- screen/settings/lightningSettings.js | 5 +- screen/settings/notificationSettings.js | 2 +- screen/settings/settings.js | 17 ++-- tests/e2e/bluewallet.spec.js | 115 ++++++++++++++++++++++++ 9 files changed, 149 insertions(+), 18 deletions(-) diff --git a/screen/send/broadcast.js b/screen/send/broadcast.js index d3fa935d1..5d8b1ba52 100644 --- a/screen/send/broadcast.js +++ b/screen/send/broadcast.js @@ -140,6 +140,7 @@ const Broadcast = () => { placeholderTextColor="#81868e" value={txHex} onChangeText={handleUpdateTxHex} + testID="TxHex" /> @@ -151,6 +152,7 @@ const Broadcast = () => { title={loc.send.broadcastButton} onPress={handleBroadcast} disabled={broadcastResult === BROADCAST_RESULT.pending} + testID="BroadcastButton" /> diff --git a/screen/settings/GeneralSettings.js b/screen/settings/GeneralSettings.js index 1432a903e..4809eddec 100644 --- a/screen/settings/GeneralSettings.js +++ b/screen/settings/GeneralSettings.js @@ -74,7 +74,7 @@ const GeneralSettings = () => { {loc.settings.general_adv_mode_e} diff --git a/screen/settings/NetworkSettings.js b/screen/settings/NetworkSettings.js index 4e0e550ff..de3f07407 100644 --- a/screen/settings/NetworkSettings.js +++ b/screen/settings/NetworkSettings.js @@ -31,9 +31,9 @@ const NetworkSettings = () => { return ( - - - + + + ); diff --git a/screen/settings/SettingsPrivacy.js b/screen/settings/SettingsPrivacy.js index b447c6537..1193d0a86 100644 --- a/screen/settings/SettingsPrivacy.js +++ b/screen/settings/SettingsPrivacy.js @@ -86,7 +86,7 @@ const SettingsPrivacy = () => { hideChevron title={loc.settings.privacy_read_clipboard} Component={TouchableWithoutFeedback} - switch={{ onValueChange, value: isReadClipboardAllowed, disabled: isLoading === sections.ALL }} + switch={{ onValueChange, value: isReadClipboardAllowed, disabled: isLoading === sections.ALL, testID: 'ClipboardSwith' }} /> {loc.settings.privacy_clipboard_explanation} @@ -98,7 +98,12 @@ const SettingsPrivacy = () => { hideChevron title={loc.settings.privacy_quickactions} Component={TouchableWithoutFeedback} - switch={{ onValueChange: onQuickActionsValueChange, value: isQuickActionsEnabled, disabled: isLoading === sections.ALL }} + switch={{ + onValueChange: onQuickActionsValueChange, + value: isQuickActionsEnabled, + disabled: isLoading === sections.ALL, + testID: 'QuickActionsSwith', + }} /> {loc.settings.privacy_quickactions_explanation} @@ -124,7 +129,7 @@ const SettingsPrivacy = () => { )} - + ); diff --git a/screen/settings/electrumSettings.js b/screen/settings/electrumSettings.js index a7f06ecb2..5e488ba7d 100644 --- a/screen/settings/electrumSettings.js +++ b/screen/settings/electrumSettings.js @@ -234,7 +234,7 @@ export default class ElectrumSettings extends Component { {loc.settings.electrum_settings_explain} - this.resetToDefault()}> + this.resetToDefault()}> {loc.settings.electrum_reset} @@ -252,6 +252,7 @@ export default class ElectrumSettings extends Component { autoCorrect={false} autoCapitalize="none" underlineColorAndroid="transparent" + testID="HostInput" /> @@ -267,6 +268,7 @@ export default class ElectrumSettings extends Component { underlineColorAndroid="transparent" autoCorrect={false} autoCapitalize="none" + testID="PortInput" /> @@ -282,12 +284,13 @@ export default class ElectrumSettings extends Component { placeholderTextColor="#81868e" autoCapitalize="none" underlineColorAndroid="transparent" + testID="SSLPortInput" /> - {this.state.isLoading ? : } + {this.state.isLoading ? : } {serverHistoryItems.length > 0 && !this.state.isLoading && ( diff --git a/screen/settings/lightningSettings.js b/screen/settings/lightningSettings.js index 55f4907ef..5133f2492 100644 --- a/screen/settings/lightningSettings.js +++ b/screen/settings/lightningSettings.js @@ -142,12 +142,13 @@ const LightningSettings = () => { autoCapitalize="none" autoCorrect={false} underlineColorAndroid="transparent" + testID="URIInput" /> - + - {isLoading ? : } + {isLoading ? : } ); diff --git a/screen/settings/notificationSettings.js b/screen/settings/notificationSettings.js index c7d2013ae..2b86f99eb 100644 --- a/screen/settings/notificationSettings.js +++ b/screen/settings/notificationSettings.js @@ -98,7 +98,7 @@ const NotificationSettings = () => { diff --git a/screen/settings/settings.js b/screen/settings/settings.js index 6c8e251d6..efc81912a 100644 --- a/screen/settings/settings.js +++ b/screen/settings/settings.js @@ -24,15 +24,20 @@ const Settings = () => { - navigate('GeneralSettings')} chevron /> - navigate('Currency')} chevron /> - navigate('Language')} chevron /> + navigate('GeneralSettings')} testID="GeneralSettings" chevron /> + navigate('Currency')} testID="Currency" chevron /> + navigate('Language')} testID="Language" chevron /> navigate('EncryptStorage')} testID="SecurityButton" chevron /> - navigate('NetworkSettings')} chevron /> + navigate('NetworkSettings')} testID="NetworkSettings" chevron /> {Notifications.isNotificationsCapable && ( - navigate('NotificationSettings')} chevron /> + navigate('NotificationSettings')} + testID="NotificationSettings" + chevron + /> )} - navigate('SettingsPrivacy')} chevron /> + navigate('SettingsPrivacy')} testID="SettingsPrivacy" chevron /> navigate('About')} testID="AboutButton" chevron /> ); diff --git a/tests/e2e/bluewallet.spec.js b/tests/e2e/bluewallet.spec.js index b730296c2..0376937a8 100644 --- a/tests/e2e/bluewallet.spec.js +++ b/tests/e2e/bluewallet.spec.js @@ -29,6 +29,121 @@ describe('BlueWallet UI Tests', () => { process.env.TRAVIS && require('fs').writeFileSync(lockFile, '1'); }); + it('all settings screens are works', async () => { + const lockFile = '/tmp/travislock.' + hashIt(jasmine.currentTest.fullName); + if (process.env.TRAVIS) { + if (require('fs').existsSync(lockFile)) + return console.warn('skipping', JSON.stringify(jasmine.currentTest.fullName), 'as it previously passed on Travis'); + } + await yo('WalletsList'); + + // go to settings, press SelfTest and wait for OK + await element(by.id('SettingsButton')).tap(); + + // general + // enable AdvancedMode + await element(by.id('GeneralSettings')).tap(); + await element(by.id('AdvancedMode')).tap(); + await device.pressBack(); + // + // currency + // change currency to ARS ($) and switch it back to USD ($) + await element(by.id('Currency')).tap(); + await element(by.text('ARS ($)')).tap(); + await expect(element(by.text('Prices are obtained from Yadio'))).toBeVisible(); + await element(by.text('USD ($)')).tap(); + await device.pressBack(); + + // language + // change language to Chinese (ZH), test it and switch back to English + await element(by.id('Language')).tap(); + await element(by.text('Chinese (ZH)')).tap(); + await device.pressBack(); + await expect(element(by.text('语言'))).toBeVisible(); + await element(by.id('Language')).tap(); + await element(by.text('English')).tap(); + await device.pressBack(); + + // security + await element(by.id('SecurityButton')).tap(); + await device.pressBack(); + + // network + await element(by.id('NetworkSettings')).tap(); + + // network -> electrum server + // change electrum server to electrum.blockstream.info and revert it back + await element(by.id('ElectrumSettings')).tap(); + await element(by.id('HostInput')).replaceText('electrum.blockstream.info\n'); + await element(by.id('PortInput')).replaceText('50001\n'); + await element(by.id('SSLPortInput')).replaceText('50002\n'); + await element(by.id('Save')).tap(); + await sup('OK'); + await element(by.text('OK')).tap(); + await element(by.id('ResetToDefault')).tap(); + await sup('OK'); + await element(by.text('OK')).tap(); + await expect(element(by.id('HostInput'))).toHaveText(''); + await expect(element(by.id('PortInput'))).toHaveText(''); + await expect(element(by.id('SSLPortInput'))).toHaveText(''); + await device.pressBack(); + + // network -> lightning + // change URI and revert it back + await element(by.id('LightningSettings')).tap(); + await element(by.id('URIInput')).replaceText('invalid\n'); + await element(by.id('Save')).tap(); + await sup('OK'); + await expect(element(by.text('Not a valid LNDHub URI'))).toBeVisible(); + await element(by.text('OK')).tap(); + await element(by.id('URIInput')).replaceText('https://lndhub.herokuapp.com\n'); + await element(by.id('Save')).tap(); + await sup('OK'); + await expect(element(by.text('Your changes have been saved successfully.'))).toBeVisible(); + await element(by.text('OK')).tap(); + await element(by.id('URIInput')).replaceText('\n'); + await element(by.id('Save')).tap(); + await sup('OK'); + await expect(element(by.text('Your changes have been saved successfully.'))).toBeVisible(); + await element(by.text('OK')).tap(); + await device.pressBack(); + + // network -> broadcast + // try to broadcast wrong tx + await element(by.id('Broadcast')).tap(); + await element(by.id('TxHex')).replaceText('invalid\n'); + await element(by.id('BroadcastButton')).tap(); + await sup('OK'); + // await expect(element(by.text('the transaction was rejected by network rules....'))).toBeVisible(); + await element(by.text('OK')).tap(); + await device.pressBack(); + await device.pressBack(); + + // notifications + // turn on notifications + await element(by.id('NotificationSettings')).tap(); + await element(by.id('NotificationsSwitch')).tap(); + await sup('OK'); + await element(by.text('OK')).tap(); + await element(by.id('NotificationsSwitch')).tap(); + await device.pressBack(); + + // privacy + // trigger switches + await element(by.id('SettingsPrivacy')).tap(); + await element(by.id('ClipboardSwith')).tap(); + await element(by.id('ClipboardSwith')).tap(); + await element(by.id('QuickActionsSwith')).tap(); + await element(by.id('QuickActionsSwith')).tap(); + await device.pressBack(); + + // about + await element(by.id('AboutButton')).tap(); + await device.pressBack(); + + process.env.TRAVIS && require('fs').writeFileSync(lockFile, '1'); + }); + it('can create wallet, reload app and it persists. then go to receive screen, set custom amount and label. Dismiss modal and go to WalletsList.', async () => { const lockFile = '/tmp/travislock.' + hashIt(jasmine.currentTest.fullName); if (process.env.TRAVIS) {