Skip to content

Commit

Permalink
Merge branch 'develop' into denis/troubleshooting-update
Browse files Browse the repository at this point in the history
  • Loading branch information
stackchain committed Jan 18, 2022
2 parents eb2de8c + 54d401b commit a8c6ec1
Show file tree
Hide file tree
Showing 10 changed files with 147 additions and 185 deletions.
5 changes: 4 additions & 1 deletion src/WalletInit/MnemonicInput/MnemonicInput.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,10 @@ const MnemonicWordsInput = ({onSelect, words}: MnemonicWordsInputProps) => {
useAutoFocus(refs[0]) // RNP.TextInput has a buggy autoFocus

return (
<View style={{padding: 4, flexDirection: 'row', flexWrap: 'wrap', justifyContent: 'space-around'}}>
<View
style={{padding: 4, flexDirection: 'row', flexWrap: 'wrap', justifyContent: 'space-around'}}
testID={'mnemonicInputsView'}
>
{words.map((word, index) => (
<View
key={index}
Expand Down
6 changes: 5 additions & 1 deletion src/WalletInit/WalletForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,11 @@ export const WalletForm = ({onSubmit}: Props) => {

return (
<SafeAreaView edges={['left', 'right', 'bottom']} style={styles.safeAreaView}>
<ScrollView keyboardShouldPersistTaps={'always'} contentContainerStyle={styles.scrollContentContainer}>
<ScrollView
keyboardShouldPersistTaps={'always'}
contentContainerStyle={styles.scrollContentContainer}
testID={'credentialsView'}
>
<WalletNameInput
enablesReturnKeyAutomatically
autoFocus
Expand Down
2 changes: 1 addition & 1 deletion tests/config/wdio.android.local.conf.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ export const config: WebdriverIO.Config = {
// ============
// Specs
// ============
specs: ['./tests/specs/**/*.ts'],
specs: ['./tests/specs/*.test.ts'],
capabilities: [
{
platformName: 'Android',
Expand Down
29 changes: 20 additions & 9 deletions tests/helpers/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@ import * as pinCodeScreen from '../screenObjects/pinCode.screen'
import * as chooseLanguageScreen from '../screenObjects/chooseLanguage.screen'
import * as tosScreen from '../screenObjects/tos.screen'
import * as recoveryPhraseScreen from '../screenObjects/restoreWalletsScreens/recoveryPhraseEnterManually.screen'
import {DEFAULT_INTERVAL, DEFAULT_TIMEOUT, VALID_PIN} from '../constants'
import {DEFAULT_INTERVAL, DEFAULT_TIMEOUT, SPENDING_PASSWORD, VALID_PIN} from '../constants'
import * as createNewWalletCredentialsScreen from '../screenObjects/createWalletScreens/createWalletCredentials.screen'

export async function enterPinCode(pinCode: string): Promise<void> {
for (const pinNumber of pinCode) {
Expand All @@ -12,9 +13,7 @@ export async function enterPinCode(pinCode: string): Promise<void> {

export async function enterPinCodeIfNecessary(pinCode: string): Promise<void> {
try {
await pinCodeScreen
.getPinKey('1')
.waitForExist({timeout: DEFAULT_TIMEOUT, interval: DEFAULT_INTERVAL})
await pinCodeScreen.getPinKey('1').waitForExist({timeout: DEFAULT_TIMEOUT, interval: DEFAULT_INTERVAL})
await enterPinCode(pinCode)
} catch (e) {
// Pin pad is not shown, nothing to do
Expand Down Expand Up @@ -43,12 +42,24 @@ export async function hideKeyboard(): Promise<void> {
}

export async function enterRecoveryPhrase(recoveryPhrase: string[]): Promise<void> {
const phraseLength = recoveryPhrase.length
for (let index = 0; index < phraseLength; index++) {
const mnemonicInput = await recoveryPhraseScreen.getMnemonicField(index)
const mnemonicInputTextField = await mnemonicInput.$('//android.widget.EditText')
await mnemonicInputTextField.setValue(recoveryPhrase[index])
await driver.waitUntil(async () => await recoveryPhraseScreen.mnemonicInputsView().isDisplayed())
for (let index = 0; index < recoveryPhrase.length; index++) {
await recoveryPhraseScreen.getMnemonicField(index).$('//android.widget.EditText').setValue(recoveryPhrase[index])
// Using the KEYCODE_ENTER for Android.
await driver.pressKeyCode(66)
}
}

export async function enterWalletCredentials(
walletName: string,
password: string = SPENDING_PASSWORD,
repeatPassword: string = SPENDING_PASSWORD,
): Promise<void> {
await createNewWalletCredentialsScreen.walletNameEdit().click()
await createNewWalletCredentialsScreen.walletNameEdit().addValue(walletName)
await createNewWalletCredentialsScreen.spendingPasswordEdit().click()
await createNewWalletCredentialsScreen.spendingPasswordEdit().addValue(password)
await createNewWalletCredentialsScreen.repeatSpendingPasswordEdit().click()
await createNewWalletCredentialsScreen.repeatSpendingPasswordEdit().addValue(repeatPassword)
await hideKeyboard()
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import {WALLET_ALREADY_EXISTS, MUST_BE_FILLED} from '../../helpers/errors'

const getAllEditFields = () => driver.$$('//android.widget.EditText')

export const credentialsView = () => driver.$('//*[@resource-id="credentialsView"]')
// @ts-ignore
export const walletNameEdit = (): WebdriverIO.Element => getAllEditFields()[0]
export const walletNameExistsError = () => driver.$(`[text="${WALLET_ALREADY_EXISTS}"]`);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
export const restoreWalletButton = () => driver.$('//*[@resource-id="restoreButton"]')
export const mnemonicInputsView = () => driver.$('//*[@resource-id="mnemonicInputsView"]')
export const getMnemonicField = (index) => driver.$(`//*[@resource-id="mnemonicInput${index}"]`)
58 changes: 0 additions & 58 deletions tests/specs/createWallet.test.ts

This file was deleted.

39 changes: 0 additions & 39 deletions tests/specs/enterWallet.resetApp.test.ts

This file was deleted.

115 changes: 115 additions & 0 deletions tests/specs/happyPaths.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
import * as addWalletsScreen from '../screenObjects/addWallets.screen'
import * as addWalletScreen from '../screenObjects/addWallet.screen'
import * as createNewWalletCredentialsScreen from '../screenObjects/createWalletScreens/createWalletCredentials.screen'
import * as nobodyLookingScreen from '../screenObjects/createWalletScreens/nobodyLookingNotification.screen'
import * as recoveryPhraseRememberScreen from '../screenObjects/createWalletScreens/recoveryPhraseRemember.screen'
import * as recoveryPhraseNotificationScreen from '../screenObjects/createWalletScreens/recoveryPhraseNotification.screen'
import * as recoveryPhraseEnterScreen from '../screenObjects/createWalletScreens/recoveryPhraseEnter.screen'
import {
enterPinCodeIfNecessary,
enterRecoveryPhrase,
enterWalletCredentials,
firstAppLaunch,
hideKeyboard,
} from '../helpers/utils'
import {
WALLET_NAME,
DEFAULT_TIMEOUT,
DEFAULT_INTERVAL,
VALID_PIN,
RESTORED_WALLETS,
WALLET_NAME_RESTORED,
WalletType,
} from '../constants'
import * as selectWalletToRestoreScreen from '../screenObjects/selectWalletToRestore.screen'
import * as recoveryPhraseInputScreen from '../screenObjects/restoreWalletsScreens/recoveryPhraseEnterManually.screen'
import * as verifyRestoredWalletScreen from '../screenObjects/restoreWalletsScreens/verifyRestoredWallet.screen'

const expect = require('chai').expect

describe('Happy paths', () => {
// Execute a block of code before every tests
beforeEach(() => {
driver.launchApp()
})
// Execute a block of code after every tests
afterEach(() => {
driver.closeApp()
})

it('Prepare the app', async () => {
await firstAppLaunch(VALID_PIN)
})

describe('Creating a wallet', () => {
it('Shelley era', async () => {
await enterPinCodeIfNecessary(VALID_PIN)
await addWalletsScreen.addWalletTestnetButton().click()
await addWalletScreen.createWalletButton().click()

await driver.waitUntil(async () => await createNewWalletCredentialsScreen.credentialsView().isDisplayed())
await enterWalletCredentials(WALLET_NAME)
await hideKeyboard()
await createNewWalletCredentialsScreen.continueButton().click()

await nobodyLookingScreen.understandButton().click()

const allWords = await recoveryPhraseRememberScreen.getAllWords()
await recoveryPhraseRememberScreen.writtenItDownButton().click()

await recoveryPhraseNotificationScreen.mySecretKeyOnDeviceCheckbox().click()
await recoveryPhraseNotificationScreen.recoveringOnlyByPhraseCheckbox().click()
await recoveryPhraseNotificationScreen.understandButton().click()

await recoveryPhraseEnterScreen.enterRecoveryPhrase(allWords)
await recoveryPhraseEnterScreen.confirmButton().click()

await enterPinCodeIfNecessary(VALID_PIN)
await driver.pause(2000)

expect(
await driver.$(`[text="${WALLET_NAME}"]`).waitForExist({timeout: DEFAULT_TIMEOUT, interval: DEFAULT_INTERVAL}),
).to.be.true
})
})

describe('Restoring a wallet', () => {
RESTORED_WALLETS.forEach((restoredWallet) => {
it(`${restoredWallet.name} wallet`, async () => {
await enterPinCodeIfNecessary(VALID_PIN)
const walletName = `${WALLET_NAME_RESTORED} ${restoredWallet.name}`
await addWalletsScreen.addWalletTestnetButton().click()
await addWalletScreen.restoreWalletButton().click()

if (restoredWallet.type == WalletType.NormalWallet) {
await selectWalletToRestoreScreen.restoreNormalWalletButton().click()
} else if (restoredWallet.type == WalletType.DaedalusWallet) {
await selectWalletToRestoreScreen.restore24WordWalletButton().click()
} else {
throw Error(`Unknown wallet type: wallet type is ${restoredWallet.type}`)
}
await enterRecoveryPhrase(restoredWallet.phrase)
await hideKeyboard()
await recoveryPhraseInputScreen.restoreWalletButton().click()

expect(await verifyRestoredWalletScreen.walletChecksumText().isDisplayed()).to.be.true
expect(await verifyRestoredWalletScreen.walletChecksumText().getText()).to.be.equal(restoredWallet.checksum)
await verifyRestoredWalletScreen.continueButton().click()

await driver.waitUntil(async () => await createNewWalletCredentialsScreen.credentialsView().isDisplayed())
await enterWalletCredentials(walletName)
await createNewWalletCredentialsScreen.continueButton().click()

// It is necessary step, till the revamp will be done.
// After that the Dashboard screen will be created and wallet name (or other component) will be used from there
await enterPinCodeIfNecessary(VALID_PIN)
await driver.pause(2000)

expect(
await driver.$(`[text="${walletName}"]`).waitForExist({timeout: DEFAULT_TIMEOUT, interval: DEFAULT_INTERVAL}),
`The text ${walletName} wasn't found`,
).to.be.true
})
})
})
})
76 changes: 0 additions & 76 deletions tests/specs/restoreWallet.test.ts

This file was deleted.

0 comments on commit a8c6ec1

Please sign in to comment.