From 3b75e896abf35ceedd2e8dbcf5cc17f86763c918 Mon Sep 17 00:00:00 2001 From: cezres Date: Sun, 11 Aug 2019 19:54:18 +0800 Subject: [PATCH 01/38] chore(wallet-deps): Add @types/webdriverio --- packages/neuron-wallet/package.json | 1 + yarn.lock | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/packages/neuron-wallet/package.json b/packages/neuron-wallet/package.json index fd958ac931..892f64de99 100644 --- a/packages/neuron-wallet/package.json +++ b/packages/neuron-wallet/package.json @@ -56,6 +56,7 @@ "@types/elliptic": "6.4.8", "@types/sqlite3": "3.1.5", "@types/uuid": "3.4.4", + "@types/webdriverio": "4.13.0", "devtron": "1.4.0", "electron": "5.0.7", "electron-builder": "21.2.0", diff --git a/yarn.lock b/yarn.lock index 8f9a46e38d..8d77c7e161 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3291,6 +3291,13 @@ "@types/unist" "*" "@types/vfile-message" "*" +"@types/webdriverio@4.13.0": + version "4.13.0" + resolved "https://registry.yarnpkg.com/@types/webdriverio/-/webdriverio-4.13.0.tgz#05acc3cbea6de5251c7adad16da1ee626858350e" + integrity sha512-4SpsMUy6MatxIQidOZR4HpAgIi5Lzpvo7nCdq+7SdLvUGCNLPLaWSwdtpHK+En3CqQTb559kSIWR4SKFWT8H3w== + dependencies: + "@types/node" "*" + "@types/webpack-env@*": version "1.13.9" resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.13.9.tgz#a67287861c928ebf4159a908d1fb1a2a34d4097a" From 503e948f648b8dabee61d23db66ba2c48d646c69 Mon Sep 17 00:00:00 2001 From: cezres Date: Mon, 12 Aug 2019 00:58:27 +0800 Subject: [PATCH 02/38] chore: Add wallet e2e test --- .../neuron-wallet/tests-e2e/example.test.ts | 37 ----- packages/neuron-wallet/tests-e2e/utils.ts | 20 +++ .../neuron-wallet/tests-e2e/wallet.test.ts | 156 ++++++++++++++++++ 3 files changed, 176 insertions(+), 37 deletions(-) delete mode 100644 packages/neuron-wallet/tests-e2e/example.test.ts create mode 100644 packages/neuron-wallet/tests-e2e/utils.ts create mode 100644 packages/neuron-wallet/tests-e2e/wallet.test.ts diff --git a/packages/neuron-wallet/tests-e2e/example.test.ts b/packages/neuron-wallet/tests-e2e/example.test.ts deleted file mode 100644 index fbdb3b6907..0000000000 --- a/packages/neuron-wallet/tests-e2e/example.test.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Application } from 'spectron' -import path from 'path' - -describe('setup tests', () => { - let app: Application - - beforeAll(async () => { - let electronPath = path.join(__dirname, '..', 'node_modules', '.bin', 'electron') - if (process.platform === 'win32') { - electronPath += '.cmd' - } - - app = new Application({ - path: electronPath, - args: [path.join(__dirname, '..', 'dist', 'main.js')], - }) - - return app.start() - }) - - afterAll(() => { - if (app.isRunning) { - return app.stop() - } - return null - }) - - it('opens app window', async () => { - if (app) { - const { client, browserWindow } = app - await client.waitUntilWindowLoaded() - const title = await browserWindow.getTitle() - - expect(title).toBe('Neuron') - } - }) -}) diff --git a/packages/neuron-wallet/tests-e2e/utils.ts b/packages/neuron-wallet/tests-e2e/utils.ts new file mode 100644 index 0000000000..fc1b776c1f --- /dev/null +++ b/packages/neuron-wallet/tests-e2e/utils.ts @@ -0,0 +1,20 @@ +import { SpectronClient } from 'spectron' + +export const getElementByTagName = async (client: SpectronClient, tagName: string, textContent: string) => { + const elements = await client.elements(`<${tagName} />`) + for (let index = 0; index < elements.value.length; index++) { + const element = elements.value[index]; + const text = await client.elementIdText(element.ELEMENT) + if (text.value === textContent) { + return element + } + } + return null +} + +export const sleep = (delay: number) => { + var start = (new Date()).getTime(); + while ((new Date()).getTime() - start < delay) { + continue; + } +} diff --git a/packages/neuron-wallet/tests-e2e/wallet.test.ts b/packages/neuron-wallet/tests-e2e/wallet.test.ts new file mode 100644 index 0000000000..aa9f2b1c3e --- /dev/null +++ b/packages/neuron-wallet/tests-e2e/wallet.test.ts @@ -0,0 +1,156 @@ +import { Application } from 'spectron' +import path from 'path' +import { sleep, getElementByTagName } from './utils' + +// Test create/import/switch/edit wallet +describe('wallet tests', () => { + let app: Application + + beforeAll(() => { + let electronPath = path.join(__dirname, '..', 'node_modules', '.bin', 'electron') + if (process.platform === 'win32') { + electronPath += '.cmd' + } + app = new Application({ + path: electronPath, + args: [path.join(__dirname, '..', 'dist', 'main.js')], + }) + return app.start() + }) + + afterAll(() => { + if (app.isRunning) { + return app.stop() + } + }) + + it('create wallet', async () => { + const { client } = app + await client.waitUntilWindowLoaded() + + // click create wallet + const createWalletButton = await getElementByTagName(client, 'button', '创建新钱包') + expect(createWalletButton).not.toBeNull() + await client.elementIdClick(createWalletButton!.ELEMENT) + + // copy mnemonic + const mnemonicTextarea = await client.element('