diff --git a/src/components/views/dialogs/secretstorage/AccessSecretStorageDialog.js b/src/components/views/dialogs/secretstorage/AccessSecretStorageDialog.js
index 68ae8281c4..e3a7d7f532 100644
--- a/src/components/views/dialogs/secretstorage/AccessSecretStorageDialog.js
+++ b/src/components/views/dialogs/secretstorage/AccessSecretStorageDialog.js
@@ -190,10 +190,6 @@ export default class AccessSecretStorageDialog extends React.PureComponent {
let keyStatus;
if (this.state.recoveryKey.length === 0) {
keyStatus =
;
- } else if (this.state.recoveryKeyValid) {
- keyStatus =
- {"\uD83D\uDC4D "}{_t("This looks like a valid recovery key!")}
-
;
} else if (this.state.keyMatches === false) {
keyStatus =
{"\uD83D\uDC4E "}{_t(
@@ -201,6 +197,10 @@ export default class AccessSecretStorageDialog extends React.PureComponent {
"entered the correct recovery key.",
)}
;
+ } else if (this.state.recoveryKeyValid) {
+ keyStatus =
+ {"\uD83D\uDC4D "}{_t("This looks like a valid recovery key!")}
+
;
} else {
keyStatus =
{"\uD83D\uDC4E "}{_t("Not a valid recovery key")}
diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json
index 940777c1c7..f6090ce09f 100644
--- a/src/i18n/strings/en_EN.json
+++ b/src/i18n/strings/en_EN.json
@@ -1654,8 +1654,8 @@
"Access your secure message history and your cross-signing identity for verifying other sessions by entering your passphrase.": "Access your secure message history and your cross-signing identity for verifying other sessions by entering your passphrase.",
"If you've forgotten your passphrase you can use your recovery key or set up new recovery options.": "If you've forgotten your passphrase you can use your recovery key or set up new recovery options.",
"Enter secret storage recovery key": "Enter secret storage recovery key",
- "This looks like a valid recovery key!": "This looks like a valid recovery key!",
"Unable to access secret storage. Please verify that you entered the correct recovery key.": "Unable to access secret storage. Please verify that you entered the correct recovery key.",
+ "This looks like a valid recovery key!": "This looks like a valid recovery key!",
"Not a valid recovery key": "Not a valid recovery key",
"Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery key.": "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery key.",
"If you've forgotten your recovery key you can .": "If you've forgotten your recovery key you can .",
diff --git a/test/components/views/dialogs/AccessSecretStorageDialog-test.js b/test/components/views/dialogs/AccessSecretStorageDialog-test.js
new file mode 100644
index 0000000000..30512ca4dd
--- /dev/null
+++ b/test/components/views/dialogs/AccessSecretStorageDialog-test.js
@@ -0,0 +1,106 @@
+/*
+Copyright 2020 The Matrix.org Foundation C.I.C.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+import React from 'react';
+import TestRenderer from 'react-test-renderer';
+import sdk from '../../../skinned-sdk';
+import {MatrixClientPeg} from '../../../../src/MatrixClientPeg';
+import { stubClient } from '../../../test-utils';
+
+const AccessSecretStorageDialog = sdk.getComponent("dialogs.secretstorage.AccessSecretStorageDialog");
+
+describe("AccessSecretStorageDialog", function() {
+ it("Closes the dialog if _onRecoveryKeyNext is called with a valid key", (done) => {
+ const testInstance = TestRenderer.create(
+ p && p.recoveryKey && p.recoveryKey == "a"}
+ onFinished={(v) => {
+ if (v) { done(); }
+ }}
+ />,
+ );
+ testInstance.getInstance().setState({
+ recoveryKeyValid: true,
+ recoveryKey: "a",
+ });
+ const e = { preventDefault: () => {} };
+ testInstance.getInstance()._onRecoveryKeyNext(e);
+ });
+
+ it("Considers a valid key to be valid", function() {
+ const testInstance = TestRenderer.create(
+ true}
+ />,
+ );
+ const v = "asfd";
+ const e = { target: { value: v } };
+ stubClient();
+ MatrixClientPeg.get().isValidRecoveryKey = function(k) {
+ return k == v;
+ };
+ testInstance.getInstance()._onRecoveryKeyChange(e);
+ const { recoveryKeyValid } = testInstance.getInstance().state;
+ expect(recoveryKeyValid).toBe(true);
+ });
+
+ it("Notifies the user if they input an invalid recovery key", async function(done) {
+ const testInstance = TestRenderer.create(
+ false}
+ />,
+ );
+ const e = { target: { value: "a" } };
+ stubClient();
+ MatrixClientPeg.get().isValidRecoveryKey = () => true;
+ testInstance.getInstance()._onRecoveryKeyChange(e);
+ await testInstance.getInstance()._onRecoveryKeyNext({ preventDefault: () => {} });
+ const { keyMatches } = testInstance.getInstance().state;
+ expect(keyMatches).toBe(false);
+ const notification = testInstance.root.findByProps({
+ className: "mx_AccessSecretStorageDialog_keyStatus",
+ });
+ expect(notification.props.children).toEqual(
+ ["\uD83D\uDC4E ", "Unable to access secret storage. Please verify that you " +
+ "entered the correct recovery key."]);
+ done();
+ });
+
+ it("Notifies the user if they input an invalid passphrase", async function(done) {
+ const testInstance = TestRenderer.create(
+ false}
+ onFinished={() => {}}
+ keyInfo={ { passphrase: {
+ salt: 'nonempty',
+ iterations: 2,
+ } } }
+ />,
+ );
+ const e = { target: { value: "a" } };
+ stubClient();
+ MatrixClientPeg.get().isValidRecoveryKey = () => false;
+ testInstance.getInstance()._onPassPhraseChange(e);
+ await testInstance.getInstance()._onPassPhraseNext({ preventDefault: () => {} });
+ const notification = testInstance.root.findByProps({
+ className: "mx_AccessSecretStorageDialog_keyStatus",
+ });
+ expect(notification.props.children).toEqual(
+ ["\uD83D\uDC4E ", "Unable to access secret storage. Please verify that you " +
+ "entered the correct passphrase."]);
+ done();
+ });
+});