TST: ref e2e test

This commit is contained in:
Overtorment 2020-09-28 14:37:41 +01:00
parent 6357f88b84
commit 87b561ec88
2 changed files with 56 additions and 17 deletions

View file

@ -1,6 +1,6 @@
/* global alert */
import React, { useState } from 'react';
import { Image, View, TouchableOpacity, StatusBar, Platform, StyleSheet, Linking, Alert } from 'react-native';
import { Image, View, TouchableOpacity, StatusBar, Platform, StyleSheet, Linking, Alert, TextInput } from 'react-native';
import { RNCamera } from 'react-native-camera';
import { Icon } from 'react-native-elements';
import ImagePicker from 'react-native-image-picker';
@ -10,7 +10,7 @@ import RNFS from 'react-native-fs';
import loc from '../../loc';
import { BlueLoadingHook, BlueTextHooks, BlueButtonHook, BlueSpacing40 } from '../../BlueComponents';
import { getSystemName } from 'react-native-device-info';
const prompt = require('../../blue_modules/prompt');
import { BlueCurrentTheme } from '../../components/themes';
const LocalQRCode = require('@remobile/react-native-qrcode-local-image');
const createHash = require('create-hash');
const isDesktop = getSystemName() === 'Mac OS X';
@ -68,6 +68,19 @@ const styles = StyleSheet.create({
backgroundColor: 'rgba(0,0,0,0.1)',
position: 'absolute',
},
backdoorInputWrapper: { position: 'absolute', left: '5%', top: '0%', width: '90%', height: '70%', backgroundColor: 'white' },
backdoorInput: {
height: '50%',
marginTop: 5,
marginHorizontal: 20,
borderColor: BlueCurrentTheme.colors.formBorder,
borderBottomColor: BlueCurrentTheme.colors.formBorder,
borderWidth: 1,
borderRadius: 4,
backgroundColor: BlueCurrentTheme.colors.inputBackgroundColor,
color: BlueCurrentTheme.colors.foregroundColor,
textAlignVertical: 'top',
},
});
const ScanQRCode = () => {
@ -81,6 +94,8 @@ const ScanQRCode = () => {
const isFocused = useIsFocused();
const [cameraStatus, setCameraStatus] = useState(RNCamera.Constants.CameraStatus.PENDING_AUTHORIZATION);
const [backdoorPressed, setBackdoorPressed] = useState(0);
const [backdoorText, setBackdoorText] = useState('');
const [backdoorVisible, setBackdoorVisible] = useState(false);
const stylesHook = StyleSheet.create({
openSettingsContainer: {
backgroundColor: colors.brandingColor,
@ -219,6 +234,40 @@ const ScanQRCode = () => {
<Icon name="file-import" type="material-community" color="#ffffff" />
</TouchableOpacity>
)}
{backdoorVisible && (
<View style={styles.backdoorInputWrapper}>
<BlueTextHooks>Provide QR code contents manually:</BlueTextHooks>
<TextInput
testID="scanQrBackdoorInput"
multiline
underlineColorAndroid="transparent"
style={styles.backdoorInput}
autoCorrect={false}
autoCapitalize="none"
spellCheck={false}
selectTextOnFocus={false}
keyboardType={Platform.OS === 'android' ? 'visible-password' : 'default'}
value={backdoorText}
onChangeText={setBackdoorText}
/>
<BlueButtonHook
title="OK"
testID="scanQrBackdoorOkButton"
onPress={() => {
setBackdoorVisible(false);
let data;
try {
data = JSON.parse(backdoorText);
// this might be a json string (for convenience - in case there are "\n" in there)
} catch (_) {
data = backdoorText;
}
if (data) onBarCodeRead({ data });
}}
/>
</View>
)}
<TouchableOpacity
testID="ScanQrBackdoorButton"
style={styles.backdoorButton}
@ -229,16 +278,7 @@ const ScanQRCode = () => {
setBackdoorPressed(backdoorPressed + 1);
if (backdoorPressed < 10) return;
setBackdoorPressed(0);
let data, userInput;
try {
userInput = await prompt('Provide QR code contents manually:', '', false, 'plain-text');
data = JSON.parse(userInput);
// this might be a json string (for convenience - in case there are "\n" in there)
} catch (_) {
data = userInput;
}
if (data) onBarCodeRead({ data });
setBackdoorVisible(true);
}}
/>
</View>

View file

@ -409,8 +409,8 @@ describe('BlueWallet UI Tests', () => {
}
const bip21 = 'bitcoin:bc1qnapskphjnwzw2w3dk4anpxntunc77v6qrua0f7?amount=0.00015&pj=https://btc.donate.kukks.org/BTC/pj';
await element(by.type('android.widget.EditText')).replaceText(bip21);
await element(by.text('OK')).tap();
await element(by.id('scanQrBackdoorInput')).replaceText(bip21);
await element(by.id('scanQrBackdoorOkButton')).tap();
if (process.env.TRAVIS) await sleep(5000);
try {
@ -421,7 +421,6 @@ describe('BlueWallet UI Tests', () => {
await yo('PayjoinSwitch');
await element(by.id('TransactionDetailsButton')).tap();
txhex = await extractTextFromElementById('TxhexInput');
console.log({ txhex });
transaction = bitcoin.Transaction.fromHex(txhex);
assert.strictEqual(bitcoin.address.fromOutputScript(transaction.outs[0].script), 'bc1qnapskphjnwzw2w3dk4anpxntunc77v6qrua0f7');
assert.strictEqual(transaction.outs[0].value, 15000);
@ -509,8 +508,8 @@ describe('BlueWallet UI Tests', () => {
const randomTxHex =
'020000000001011628f58e8e81bfcfff1b106bb8968e342fb86f09aa810ed2939e43d5127c51040200000000000000000227e42d000000000017a914c679a827d57a9b8b539515dbafb4e573d2bcc6ca87df15cf02000000002200209705cdfcbc459a220e7f39ffe547a31335505c2357f452ae12a22b9ae36ea59d04004730440220626c5205a6f49d1dd1577c85c0af4c5fc70f41de61f891d71a5cf57af09110d4022045bcb1e7d4e93e1a9baf6ae1ad0b4087c9e9f73ec366e97576912377d9f6904301473044022044aea98e8983f09cb0639f08d34526bb7e3ed47d208b7bf714fb29a1b5f9535a02200baa510b94cf434775b4aa2184682f2fb33f15e5e76f79aa0885e7ee12bdc8f70169522102e67ce679d617d674d68eea95ecb166c67b4b5520105c4745adf37ce8a40b92dc21029ff54b8bf26dbddd7bd4336593d2ff17519d5374989f36a6f5f8239675ff79a421039000ee2853c6db4bd956e80b1ecfb8711bf3e0a9a8886d15450c29458b60473153ae00000000';
await element(by.type('android.widget.EditText')).replaceText(randomTxHex);
await element(by.text('OK')).tap();
await element(by.id('scanQrBackdoorInput')).replaceText(randomTxHex);
await element(by.id('scanQrBackdoorOkButton')).tap();
await yo('PsbtWithHardwareWalletBroadcastTransactionButton');
// TODO: same but with real signed PSBT QR for this specific transaction