diff --git a/ui/app/pages/first-time-flow/create-password/import-with-seed-phrase/import-with-seed-phrase.component.js b/ui/app/pages/first-time-flow/create-password/import-with-seed-phrase/import-with-seed-phrase.component.js index 5092d277e..a2fb5a3bf 100644 --- a/ui/app/pages/first-time-flow/create-password/import-with-seed-phrase/import-with-seed-phrase.component.js +++ b/ui/app/pages/first-time-flow/create-password/import-with-seed-phrase/import-with-seed-phrase.component.js @@ -30,10 +30,21 @@ export default class ImportWithSeedPhrase extends PureComponent { } parseSeedPhrase = (seedPhrase) => { - return seedPhrase - .trim() - .match(/\w+/g) - .join(' ') + if (!seedPhrase) { + return '' + } + + const trimmed = seedPhrase.trim() + if (!trimmed) { + return '' + } + + const words = trimmed.match(/\w+/g) + if (!words) { + return '' + } + + return words.join(' ') } componentWillMount () { diff --git a/ui/app/pages/first-time-flow/create-password/import-with-seed-phrase/tests/import-with-seed-phrase.component.test.js b/ui/app/pages/first-time-flow/create-password/import-with-seed-phrase/tests/import-with-seed-phrase.component.test.js new file mode 100644 index 000000000..7960d17b2 --- /dev/null +++ b/ui/app/pages/first-time-flow/create-password/import-with-seed-phrase/tests/import-with-seed-phrase.component.test.js @@ -0,0 +1,78 @@ +import React from 'react' +import assert from 'assert' +import { shallow } from 'enzyme' +import sinon from 'sinon' +import ImportWithSeedPhrase from '../import-with-seed-phrase.component' + +function shallowRender (props = {}, context = {}) { + return shallow(, { + context: { + t: str => str + '_t', + metricsEvent: sinon.spy(), + ...context, + }, + }) +} + +describe('ImportWithSeedPhrase Component', () => { + it('should render without error', () => { + const root = shallowRender({ + onSubmit: sinon.spy(), + }) + const textareaCount = root.find('.first-time-flow__textarea').length + assert.equal(textareaCount, 1, 'should render 12 seed phrases') + }) + + describe('parseSeedPhrase', () => { + it('should handle a regular seed phrase', () => { + const root = shallowRender({ + onSubmit: sinon.spy(), + }) + + const {parseSeedPhrase} = root.instance() + + assert.deepEqual(parseSeedPhrase('foo bar baz'), 'foo bar baz') + }) + + it('should trim extraneous whitespace from the given seed phrase', () => { + const root = shallowRender({ + onSubmit: sinon.spy(), + }) + + const {parseSeedPhrase} = root.instance() + + assert.deepEqual(parseSeedPhrase(' foo bar baz '), 'foo bar baz') + }) + + it('should return an empty string when given a whitespace-only string', () => { + const root = shallowRender({ + onSubmit: sinon.spy(), + }) + + const {parseSeedPhrase} = root.instance() + + assert.deepEqual(parseSeedPhrase(' '), '') + }) + + it('should return an empty string when given a string with only symbols', () => { + const root = shallowRender({ + onSubmit: sinon.spy(), + }) + + const {parseSeedPhrase} = root.instance() + + assert.deepEqual(parseSeedPhrase('$'), '') + }) + + it('should return an empty string for both null and undefined', () => { + const root = shallowRender({ + onSubmit: sinon.spy(), + }) + + const {parseSeedPhrase} = root.instance() + + assert.deepEqual(parseSeedPhrase(undefined), '') + assert.deepEqual(parseSeedPhrase(null), '') + }) + }) +})