浏览代码

add tests
- for error: UI test
- for mnemonic: we cannot capture dialog, so it is only an integration test

Signed-off-by: tobiasKaminsky <tobias@kaminsky.me>

tobiasKaminsky 4 年之前
父节点
当前提交
be04dec3ea

二进制
screenshots/gplay/debug/com.nextcloud.client.SettingsActivityIT_showMnemonic_Error.png


+ 34 - 0
src/androidTest/java/com/nextcloud/client/SettingsActivityIT.java

@@ -24,9 +24,14 @@ package com.nextcloud.client;
 
 import android.Manifest;
 import android.app.Activity;
+import android.content.Intent;
+import android.os.Looper;
 
 import com.owncloud.android.AbstractIT;
+import com.owncloud.android.datamodel.ArbitraryDataProvider;
+import com.owncloud.android.ui.activity.RequestCredentialsActivity;
 import com.owncloud.android.ui.activity.SettingsActivity;
+import com.owncloud.android.utils.EncryptionUtils;
 import com.owncloud.android.utils.ScreenshotTest;
 
 import org.junit.Rule;
@@ -35,6 +40,8 @@ import org.junit.Test;
 import androidx.test.espresso.intent.rule.IntentsTestRule;
 import androidx.test.rule.GrantPermissionRule;
 
+import static org.junit.Assert.assertTrue;
+
 
 public class SettingsActivityIT extends AbstractIT {
     @Rule public IntentsTestRule<SettingsActivity> activityRule = new IntentsTestRule<>(SettingsActivity.class,
@@ -52,4 +59,31 @@ public class SettingsActivityIT extends AbstractIT {
 
         screenshot(sut);
     }
+
+    @Test
+    @ScreenshotTest
+    public void showMnemonic_Error() {
+        SettingsActivity sut = activityRule.launchActivity(null);
+        sut.handleMnemonicRequest(null);
+
+        screenshot(sut);
+    }
+
+    @Test
+    public void showMnemonic() {
+        if (Looper.myLooper() == null) {
+            Looper.prepare();
+        }
+
+        Intent intent = new Intent();
+        intent.putExtra(RequestCredentialsActivity.KEY_CHECK_RESULT, RequestCredentialsActivity.KEY_CHECK_RESULT_TRUE);
+
+        ArbitraryDataProvider arbitraryDataProvider = new ArbitraryDataProvider(targetContext.getContentResolver());
+        arbitraryDataProvider.storeOrUpdateKeyValue(user.getAccountName(), EncryptionUtils.MNEMONIC, "Secret mnemonic");
+
+        SettingsActivity sut = activityRule.launchActivity(null);
+        sut.handleMnemonicRequest(intent);
+
+        assertTrue(true); // if we reach this, everything is ok
+    }
 }

+ 25 - 17
src/main/java/com/owncloud/android/ui/activity/SettingsActivity.java

@@ -84,6 +84,8 @@ import javax.inject.Inject;
 
 import androidx.annotation.LayoutRes;
 import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
+import androidx.annotation.VisibleForTesting;
 import androidx.appcompat.app.ActionBar;
 import androidx.appcompat.app.AlertDialog;
 import androidx.appcompat.app.AppCompatDelegate;
@@ -845,27 +847,33 @@ public class SettingsActivity extends ThemedPreferenceActivity
                 enableLock(pendingLock);
             }
         } else if (requestCode == PassCodeManager.PASSCODE_ACTIVITY && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
-            if (data == null) {
-                DisplayUtils.showSnackMessage(this, "Error retrieving mnemonic!");
-            } else {
-                if (data.getIntExtra(RequestCredentialsActivity.KEY_CHECK_RESULT,
-                        RequestCredentialsActivity.KEY_CHECK_RESULT_FALSE) ==
-                        RequestCredentialsActivity.KEY_CHECK_RESULT_TRUE) {
+            handleMnemonicRequest(data);
+        }
+    }
+
+    @RequiresApi(api = Build.VERSION_CODES.M)
+    @VisibleForTesting
+    public void handleMnemonicRequest(Intent data) {
+        if (data == null) {
+            DisplayUtils.showSnackMessage(this, "Error retrieving mnemonic!");
+        } else {
+            if (data.getIntExtra(RequestCredentialsActivity.KEY_CHECK_RESULT,
+                                 RequestCredentialsActivity.KEY_CHECK_RESULT_FALSE) ==
+                RequestCredentialsActivity.KEY_CHECK_RESULT_TRUE) {
 
-                    ArbitraryDataProvider arbitraryDataProvider = new ArbitraryDataProvider(getContentResolver());
-                    String mnemonic = arbitraryDataProvider.getValue(user.getAccountName(), EncryptionUtils.MNEMONIC);
+                ArbitraryDataProvider arbitraryDataProvider = new ArbitraryDataProvider(getContentResolver());
+                String mnemonic = arbitraryDataProvider.getValue(user.getAccountName(), EncryptionUtils.MNEMONIC);
 
-                    int accentColor = ThemeUtils.primaryAccentColor(this);
+                int accentColor = ThemeUtils.primaryAccentColor(this);
 
-                    AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.FallbackTheming_Dialog);
-                    AlertDialog alertDialog = builder.setTitle(R.string.prefs_e2e_mnemonic)
-                        .setMessage(mnemonic)
-                        .setPositiveButton(R.string.common_ok, (dialog, which) -> dialog.dismiss())
-                        .create();
+                AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.FallbackTheming_Dialog);
+                AlertDialog alertDialog = builder.setTitle(R.string.prefs_e2e_mnemonic)
+                    .setMessage(mnemonic)
+                    .setPositiveButton(R.string.common_ok, (dialog, which) -> dialog.dismiss())
+                    .create();
 
-                    alertDialog.show();
-                    alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(accentColor);
-                }
+                alertDialog.show();
+                alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(accentColor);
             }
         }
     }