瀏覽代碼

Fix flaky tests

Signed-off-by: alperozturk <alper_ozturk@proton.me>
alperozturk 6 月之前
父節點
當前提交
c4ed8fe7d8
共有 1 個文件被更改,包括 144 次插入91 次删除
  1. 144 91
      app/src/androidTest/java/com/owncloud/android/ui/fragment/FileDetailFragmentStaticServerIT.kt

+ 144 - 91
app/src/androidTest/java/com/owncloud/android/ui/fragment/FileDetailFragmentStaticServerIT.kt

@@ -1,14 +1,18 @@
 /*
  * Nextcloud - Android Client
  *
- * SPDX-FileCopyrightText: 2020 Tobias Kaminsky <tobias@kaminsky.me>
- * SPDX-FileCopyrightText: 2020 Chris Narkiewicz <hello@ezaquarii.com>
- * SPDX-FileCopyrightText: 2020 Chris Narkiewicz <hello@ezaquarii.com>
- * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ * SPDX-FileCopyrightText: 2024 Alper Ozturk <alper.ozturk@nextcloud.com>
+ * SPDX-License-Identifier: AGPL-3.0-or-later
  */
 package com.owncloud.android.ui.fragment
 
-import androidx.test.espresso.intent.rule.IntentsTestRule
+import androidx.annotation.UiThread
+import androidx.test.core.app.launchActivity
+import androidx.test.espresso.Espresso.onView
+import androidx.test.espresso.IdlingRegistry
+import androidx.test.espresso.assertion.ViewAssertions.matches
+import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
+import androidx.test.espresso.matcher.ViewMatchers.isRoot
 import com.nextcloud.test.TestActivity
 import com.nextcloud.ui.ImageDetailFragment
 import com.owncloud.android.AbstractIT
@@ -18,80 +22,111 @@ import com.owncloud.android.lib.resources.activities.model.Activity
 import com.owncloud.android.lib.resources.activities.model.RichElement
 import com.owncloud.android.lib.resources.activities.model.RichObject
 import com.owncloud.android.lib.resources.activities.models.PreviewObject
+import com.owncloud.android.utils.EspressoIdlingResource
 import com.owncloud.android.utils.ScreenshotTest
-import org.junit.Rule
+import org.junit.After
+import org.junit.Before
 import org.junit.Test
+import java.io.File
 import java.util.GregorianCalendar
 
 class FileDetailFragmentStaticServerIT : AbstractIT() {
-    @get:Rule
-    val testActivityRule = IntentsTestRule(TestActivity::class.java, true, false)
+    private val testClassName = "com.owncloud.android.ui.fragment.FileDetailFragmentStaticServerIT"
 
-    var file = getFile("gps.jpg")
-    val oCFile = OCFile("/").apply {
+    @Before
+    fun registerIdlingResource() {
+        IdlingRegistry.getInstance().register(EspressoIdlingResource.countingIdlingResource)
+    }
+
+    @After
+    fun unregisterIdlingResource() {
+        IdlingRegistry.getInstance().unregister(EspressoIdlingResource.countingIdlingResource)
+    }
+
+    private var file: File = getFile("gps.jpg")
+    private val oCFile: OCFile = OCFile("/").apply {
         storagePath = file.absolutePath
         fileId = 12
         fileDataStorageManager.saveFile(this)
     }
 
     @Test
+    @UiThread
     @ScreenshotTest
     fun showFileDetailActivitiesFragment() {
-        val sut = testActivityRule.launchActivity(null)
-        sut.addFragment(FileDetailActivitiesFragment.newInstance(oCFile, user))
-
-        waitForIdleSync()
-        shortSleep()
-        shortSleep()
-        screenshot(sut)
+        launchActivity<TestActivity>().use { scenario ->
+            scenario.onActivity { sut ->
+                onIdleSync {
+                    EspressoIdlingResource.increment()
+                    sut.addFragment(FileDetailActivitiesFragment.newInstance(oCFile, user))
+                    EspressoIdlingResource.decrement()
+
+                    val screenShotName = createName(testClassName + "_" + "showFileDetailActivitiesFragment", "")
+                    onView(isRoot()).check(matches(isDisplayed()))
+                    screenshotViaName(sut, screenShotName)
+                }
+            }
+        }
     }
 
     @Test
+    @UiThread
     @ScreenshotTest
     fun showFileDetailSharingFragment() {
-        val sut = testActivityRule.launchActivity(null)
-        sut.addFragment(FileDetailSharingFragment.newInstance(oCFile, user))
-
-        waitForIdleSync()
-        shortSleep()
-        shortSleep()
-        screenshot(sut)
+        launchActivity<TestActivity>().use { scenario ->
+            scenario.onActivity { sut ->
+                onIdleSync {
+                    EspressoIdlingResource.increment()
+                    sut.addFragment(FileDetailSharingFragment.newInstance(oCFile, user))
+                    EspressoIdlingResource.decrement()
+
+                    val screenShotName = createName(testClassName + "_" + "showFileDetailSharingFragment", "")
+                    onView(isRoot()).check(matches(isDisplayed()))
+                    screenshotViaName(sut, screenShotName)
+                }
+            }
+        }
     }
 
     @Test
+    @UiThread
     @ScreenshotTest
     fun showFileDetailDetailsFragment() {
-        val activity = testActivityRule.launchActivity(null)
-        val sut = ImageDetailFragment.newInstance(oCFile, user)
-        activity.addFragment(sut)
-
-        shortSleep()
-        shortSleep()
-        waitForIdleSync()
-
-        activity.runOnUiThread {
-            sut.hideMap()
+        launchActivity<TestActivity>().use { scenario ->
+            scenario.onActivity { sut ->
+                onIdleSync {
+                    EspressoIdlingResource.increment()
+                    val fragment = ImageDetailFragment.newInstance(oCFile, user).apply {
+                        hideMap()
+                    }
+                    sut.addFragment(fragment)
+                    EspressoIdlingResource.decrement()
+
+                    val screenShotName = createName(testClassName + "_" + "showFileDetailDetailsFragment", "")
+                    onView(isRoot()).check(matches(isDisplayed()))
+                    screenshotViaName(sut, screenShotName)
+                }
+            }
         }
-
-        screenshot(activity)
     }
 
     @Test
+    @UiThread
     @ScreenshotTest
     @Suppress("MagicNumber")
     fun showDetailsActivities() {
-        val date = GregorianCalendar()
-        date.set(2005, 4, 17, 10, 35, 30) // random date
-
-        val richObjectList: ArrayList<RichObject> = ArrayList()
-        richObjectList.add(RichObject("file", "abc", "text.txt", "/text.txt", "link", "tag"))
-        richObjectList.add(RichObject("file", "1", "text.txt", "/text.txt", "link", "tag"))
+        val date = GregorianCalendar().apply {
+            set(2005, 4, 17, 10, 35, 30)
+        }
 
-        val previewObjectList1: ArrayList<PreviewObject> = ArrayList()
-        previewObjectList1.add(PreviewObject(1, "source", "link", true, "text/plain", "view", "text.txt"))
+        val richObjectList = ArrayList<RichObject>().apply {
+            add(RichObject("file", "abc", "text.txt", "/text.txt", "link", "tag"))
+            add(RichObject("file", "1", "text.txt", "/text.txt", "link", "tag"))
+        }
 
-        val richObjectList2: ArrayList<RichObject> = ArrayList()
-        richObjectList2.add(RichObject("user", "admin", "Admin", "", "", ""))
+        val previewObjectList1 = ArrayList<PreviewObject>().apply {
+            add(PreviewObject(1, "source", "link", true, "text/plain", "view", "text.txt"))
+        }
 
         val activities = mutableListOf(
             Activity(
@@ -132,67 +167,85 @@ class FileDetailFragmentStaticServerIT : AbstractIT() {
             )
         )
 
-        val sut = FileDetailFragment.newInstance(oCFile, user, 0)
-        testActivityRule.launchActivity(null).apply {
-            addFragment(sut)
-            waitForIdleSync()
-            runOnUiThread {
-                sut.fileDetailActivitiesFragment.populateList(activities as List<Any>?, true)
+        launchActivity<TestActivity>().use { scenario ->
+            scenario.onActivity { sut ->
+                onIdleSync {
+                    EspressoIdlingResource.increment()
+                    val fragment = FileDetailFragment.newInstance(oCFile, user, 0)
+                    sut.addFragment(fragment)
+                    fragment.fileDetailActivitiesFragment.populateList(activities as List<Any>?, true)
+                    EspressoIdlingResource.decrement()
+
+                    val screenShotName = createName(testClassName + "_" + "showDetailsActivities", "")
+                    onView(isRoot()).check(matches(isDisplayed()))
+                    screenshotViaName(sut, screenShotName)
+                }
             }
-            longSleep()
-            screenshot(sut.fileDetailActivitiesFragment.binding.swipeContainingList)
         }
     }
 
-    // @Test
-    // @ScreenshotTest
+    @Test
+    @UiThread
+    @ScreenshotTest
     fun showDetailsActivitiesNone() {
-        val activity = testActivityRule.launchActivity(null)
-        val sut = FileDetailFragment.newInstance(oCFile, user, 0)
-        activity.addFragment(sut)
-
-        waitForIdleSync()
-
-        activity.runOnUiThread {
-            sut.fileDetailActivitiesFragment.populateList(emptyList(), true)
+        launchActivity<TestActivity>().use { scenario ->
+            scenario.onActivity { sut ->
+                onIdleSync {
+                    EspressoIdlingResource.increment()
+                    val fragment = FileDetailFragment.newInstance(oCFile, user, 0)
+                    sut.addFragment(fragment)
+                    fragment.fileDetailActivitiesFragment.populateList(emptyList(), true)
+                    EspressoIdlingResource.decrement()
+
+                    val screenShotName = createName(testClassName + "_" + "showDetailsActivitiesNone", "")
+                    onView(isRoot()).check(matches(isDisplayed()))
+                    screenshotViaName(sut, screenShotName)
+                }
+            }
         }
-
-        shortSleep()
-        shortSleep()
-        screenshot(sut.fileDetailActivitiesFragment.binding.list)
     }
 
     @Test
+    @UiThread
     @ScreenshotTest
     fun showDetailsActivitiesError() {
-        val activity = testActivityRule.launchActivity(null)
-        val sut = FileDetailFragment.newInstance(oCFile, user, 0)
-        activity.addFragment(sut)
-
-        waitForIdleSync()
-
-        activity.runOnUiThread {
-            sut.fileDetailActivitiesFragment.disableLoadingActivities()
-            sut
-                .fileDetailActivitiesFragment
-                .setErrorContent(targetContext.resources.getString(R.string.file_detail_activity_error))
+        launchActivity<TestActivity>().use { scenario ->
+            scenario.onActivity { sut ->
+                onIdleSync {
+                    EspressoIdlingResource.increment()
+                    val fragment = FileDetailFragment.newInstance(oCFile, user, 0)
+                    sut.addFragment(fragment)
+                    fragment.fileDetailActivitiesFragment.disableLoadingActivities()
+                    fragment.fileDetailActivitiesFragment.setErrorContent(
+                        targetContext.resources.getString(R.string.file_detail_activity_error)
+                    )
+                    EspressoIdlingResource.decrement()
+
+                    val screenShotName = createName(testClassName + "_" + "showDetailsActivitiesError", "")
+                    onView(isRoot()).check(matches(isDisplayed()))
+                    screenshotViaName(sut, screenShotName)
+                }
+            }
         }
-
-        shortSleep()
-        shortSleep()
-        screenshot(sut.fileDetailActivitiesFragment.binding.emptyList.emptyListView)
     }
 
     @Test
+    @UiThread
     @ScreenshotTest
     fun showDetailsSharing() {
-        val sut = testActivityRule.launchActivity(null)
-        sut.addFragment(FileDetailFragment.newInstance(oCFile, user, 1))
-
-        waitForIdleSync()
-
-        shortSleep()
-        shortSleep()
-        screenshot(sut)
+        launchActivity<TestActivity>().use { scenario ->
+            scenario.onActivity { sut ->
+                onIdleSync {
+                    EspressoIdlingResource.increment()
+                    val fragment = FileDetailFragment.newInstance(oCFile, user, 1)
+                    sut.addFragment(fragment)
+                    EspressoIdlingResource.decrement()
+
+                    val screenShotName = createName(testClassName + "_" + "showDetailsSharing", "")
+                    onView(isRoot()).check(matches(isDisplayed()))
+                    screenshotViaName(sut, screenShotName)
+                }
+            }
+        }
     }
 }