瀏覽代碼

Screenshot tests for UploadFilesActivity

Signed-off-by: Álvaro Brey Vilas <alvaro.brey@nextcloud.com>
Álvaro Brey Vilas 3 年之前
父節點
當前提交
785767ae70

二進制
app/screenshots/gplay/debug/com.owncloud.android.ui.activity.UploadFilesActivityIT_localFolderPickerMode.png


二進制
app/screenshots/gplay/debug/com.owncloud.android.ui.activity.UploadFilesActivityIT_noneSelected.png


+ 64 - 1
app/src/androidTest/java/com/owncloud/android/ui/activity/UploadFilesActivityIT.kt

@@ -21,20 +21,83 @@
  */
  */
 package com.owncloud.android.ui.activity
 package com.owncloud.android.ui.activity
 
 
+import android.content.Intent
 import androidx.test.espresso.intent.rule.IntentsTestRule
 import androidx.test.espresso.intent.rule.IntentsTestRule
+import com.nextcloud.client.GrantStoragePermissionRule
 import com.owncloud.android.AbstractIT
 import com.owncloud.android.AbstractIT
+import com.owncloud.android.utils.FileStorageUtils
+import com.owncloud.android.utils.ScreenshotTest
+import org.junit.After
+import org.junit.Before
 import org.junit.Rule
 import org.junit.Rule
 import org.junit.Test
 import org.junit.Test
+import java.io.File
 
 
 class UploadFilesActivityIT : AbstractIT() {
 class UploadFilesActivityIT : AbstractIT() {
     @get:Rule
     @get:Rule
     var activityRule = IntentsTestRule(UploadFilesActivity::class.java, true, false)
     var activityRule = IntentsTestRule(UploadFilesActivity::class.java, true, false)
 
 
+    @get:Rule
+    var permissionRule = GrantStoragePermissionRule.grant()
+
+    private val directories = listOf("A", "B", "C", "D")
+        .map { File("${FileStorageUtils.getTemporalPath(account.name)}${File.separator}$it") }
+
+    @Before
+    fun setUp() {
+        directories.forEach { it.mkdirs() }
+    }
+
+    @After
+    fun tearDown() {
+        directories.forEach { it.deleteRecursively() }
+    }
+
     @Test
     @Test
-    // @ScreenshotTest // TODO re-enable and make sure that folder content on emulator is the same on all devices
+    @ScreenshotTest
     fun noneSelected() {
     fun noneSelected() {
         val sut: UploadFilesActivity = activityRule.launchActivity(null)
         val sut: UploadFilesActivity = activityRule.launchActivity(null)
 
 
+        sut.runOnUiThread {
+            sut.fileListFragment.setFiles(
+                directories +
+                    listOf(
+                        File("1.txt"),
+                        File("2.pdf"),
+                        File("3.mp3")
+                    )
+            )
+        }
+
+        waitForIdleSync()
+
+        screenshot(sut)
+    }
+
+    @Test
+    @ScreenshotTest
+    fun localFolderPickerMode() {
+        val sut: UploadFilesActivity = activityRule.launchActivity(
+            Intent().apply {
+                putExtra(
+                    UploadFilesActivity.KEY_LOCAL_FOLDER_PICKER_MODE,
+                    true
+                )
+                putExtra(
+                    UploadFilesActivity.REQUEST_CODE_KEY,
+                    FileDisplayActivity.REQUEST_CODE__SELECT_FILES_FROM_FILE_SYSTEM
+                )
+            }
+        )
+
+        sut.runOnUiThread {
+            sut.fileListFragment.setFiles(
+                directories
+            )
+        }
+
+        waitForIdleSync()
+
         screenshot(sut)
         screenshot(sut)
     }
     }
 
 

+ 7 - 0
app/src/main/java/com/owncloud/android/ui/activity/UploadFilesActivity.java

@@ -70,6 +70,7 @@ import java.util.List;
 import javax.inject.Inject;
 import javax.inject.Inject;
 
 
 import androidx.annotation.NonNull;
 import androidx.annotation.NonNull;
+import androidx.annotation.VisibleForTesting;
 import androidx.appcompat.app.ActionBar;
 import androidx.appcompat.app.ActionBar;
 import androidx.appcompat.widget.SearchView;
 import androidx.appcompat.widget.SearchView;
 import androidx.core.view.MenuItemCompat;
 import androidx.core.view.MenuItemCompat;
@@ -117,6 +118,12 @@ public class UploadFilesActivity extends DrawerActivity implements LocalFileList
     private Spinner mBehaviourSpinner;
     private Spinner mBehaviourSpinner;
     private MaterialButton uploadButton;
     private MaterialButton uploadButton;
 
 
+
+    @VisibleForTesting
+    public LocalFileListFragment getFileListFragment() {
+        return mFileListFragment;
+    }
+
     /**
     /**
      * Helper to launch the UploadFilesActivity for which you would like a result when it finished. Your
      * Helper to launch the UploadFilesActivity for which you would like a result when it finished. Your
      * onActivityResult() method will be called with the given requestCode.
      * onActivityResult() method will be called with the given requestCode.

+ 11 - 0
app/src/main/java/com/owncloud/android/ui/adapter/LocalFileListAdapter.java

@@ -54,6 +54,7 @@ import java.util.Set;
 import java.util.concurrent.Executors;
 import java.util.concurrent.Executors;
 
 
 import androidx.annotation.NonNull;
 import androidx.annotation.NonNull;
+import androidx.annotation.VisibleForTesting;
 import androidx.recyclerview.widget.RecyclerView;
 import androidx.recyclerview.widget.RecyclerView;
 
 
 /**
 /**
@@ -524,4 +525,14 @@ public class LocalFileListAdapter extends RecyclerView.Adapter<RecyclerView.View
             footerText = itemView.findViewById(R.id.footerText);
             footerText = itemView.findViewById(R.id.footerText);
         }
         }
     }
     }
+
+    @VisibleForTesting
+    public void setFiles(List<File> newFiles) {
+        mFiles = newFiles;
+        mFilesAll = new ArrayList<>();
+        mFilesAll.addAll(mFiles);
+
+        notifyDataSetChanged();
+        localFileListFragmentInterface.setLoading(false);
+    }
 }
 }

+ 8 - 1
app/src/main/java/com/owncloud/android/ui/fragment/LocalFileListFragment.java

@@ -41,10 +41,12 @@ import com.owncloud.android.utils.DisplayUtils;
 import com.owncloud.android.utils.FileSortOrder;
 import com.owncloud.android.utils.FileSortOrder;
 
 
 import java.io.File;
 import java.io.File;
+import java.util.List;
 
 
 import javax.inject.Inject;
 import javax.inject.Inject;
 
 
 import androidx.annotation.NonNull;
 import androidx.annotation.NonNull;
+import androidx.annotation.VisibleForTesting;
 import androidx.recyclerview.widget.GridLayoutManager;
 import androidx.recyclerview.widget.GridLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
 import androidx.recyclerview.widget.RecyclerView;
 
 
@@ -377,13 +379,18 @@ public class LocalFileListFragment extends ExtendedListFragment implements
             // ugly hack because setEmptyListLoadingMessage also uses a handler and there's a race condition otherwise
             // ugly hack because setEmptyListLoadingMessage also uses a handler and there's a race condition otherwise
             new Handler().post(() -> {
             new Handler().post(() -> {
                 mAdapter.notifyDataSetChanged();
                 mAdapter.notifyDataSetChanged();
-                if(mAdapter.getFilesCount() == 0){
+                if (mAdapter.getFilesCount() == 0) {
                     setEmptyListMessage(SearchType.NO_SEARCH);
                     setEmptyListMessage(SearchType.NO_SEARCH);
                 }
                 }
             });
             });
         }
         }
     }
     }
 
 
+    @VisibleForTesting
+    public void setFiles(List<File> newFiles) {
+        mAdapter.setFiles(newFiles);
+    }
+
     /**
     /**
      * Interface to implement by any Activity that includes some instance of LocalFileListFragment
      * Interface to implement by any Activity that includes some instance of LocalFileListFragment
      */
      */