Fix git conflicts

Signed-off-by: alperozturk <alper_ozturk@proton.me>
This commit is contained in:
alperozturk 2024-07-04 10:54:51 +02:00 committed by Alper Öztürk
parent f86d0a1e86
commit 80c46b8d21
6 changed files with 130 additions and 72 deletions

View file

@ -391,6 +391,7 @@ dependencies {
androidTestImplementation "androidx.test.espresso:espresso-web:$espressoVersion"
androidTestImplementation "androidx.test.espresso:espresso-accessibility:$espressoVersion"
androidTestImplementation "androidx.test.espresso:espresso-intents:$espressoVersion"
implementation "androidx.test.espresso:espresso-idling-resource:$espressoVersion"
// Mocking support
androidTestImplementation 'com.github.tmurakami:dexopener:2.0.5' // required to allow mocking on API 27 and older

View file

@ -301,6 +301,10 @@ public abstract class AbstractIT {
InstrumentationRegistry.getInstrumentation().waitForIdleSync();
}
protected void onIdleSync(Runnable recipient) {
InstrumentationRegistry.getInstrumentation().waitForIdle(recipient);
}
protected void openDrawer(IntentsTestRule activityRule) {
Activity sut = activityRule.launchActivity(null);

View file

@ -10,11 +10,17 @@ package com.owncloud.android.ui.trashbin
import android.accounts.Account
import android.accounts.AccountManager
import android.content.Intent
import androidx.test.espresso.intent.rule.IntentsTestRule
import androidx.test.core.app.ActivityScenario
import androidx.test.core.app.ApplicationProvider
import androidx.test.espresso.IdlingRegistry
import androidx.test.ext.junit.rules.ActivityScenarioRule
import com.nextcloud.utils.EspressoIdlingResource
import com.owncloud.android.AbstractIT
import com.owncloud.android.MainApp
import com.owncloud.android.lib.common.accounts.AccountUtils
import com.owncloud.android.utils.ScreenshotTest
import org.junit.After
import org.junit.Before
import org.junit.Rule
import org.junit.Test
@ -25,91 +31,91 @@ class TrashbinActivityIT : AbstractIT() {
FILES
}
private var scenario: ActivityScenario<TrashbinActivity>? = null
val intent = Intent(ApplicationProvider.getApplicationContext(), TrashbinActivity::class.java)
@get:Rule
var activityRule = IntentsTestRule(TrashbinActivity::class.java, true, false)
val activityRule = ActivityScenarioRule<TrashbinActivity>(intent)
@Before
fun registerIdlingResource() {
IdlingRegistry.getInstance().register(EspressoIdlingResource.countingIdlingResource)
}
@After
fun unregisterIdlingResource() {
IdlingRegistry.getInstance().unregister(EspressoIdlingResource.countingIdlingResource)
scenario?.close()
}
@Test
@ScreenshotTest
fun error() {
val sut: TrashbinActivity = activityRule.launchActivity(null)
val trashbinRepository = TrashbinLocalRepository(TestCase.ERROR)
sut.trashbinPresenter = TrashbinPresenter(trashbinRepository, sut)
sut.runOnUiThread { sut.loadFolder() }
shortSleep()
screenshot(sut)
scenario = activityRule.scenario
scenario?.onActivity { sut ->
val trashbinRepository = TrashbinLocalRepository(TestCase.ERROR)
sut.trashbinPresenter = TrashbinPresenter(trashbinRepository, sut)
onIdleSync {
sut.runOnUiThread { sut.loadFolder() }
screenshot(sut)
}
}
}
@Test
@ScreenshotTest
fun files() {
val sut: TrashbinActivity = activityRule.launchActivity(null)
val trashbinRepository = TrashbinLocalRepository(TestCase.FILES)
sut.trashbinPresenter = TrashbinPresenter(trashbinRepository, sut)
sut.runOnUiThread { sut.loadFolder() }
waitForIdleSync()
shortSleep()
shortSleep()
screenshot(sut)
scenario = activityRule.scenario
scenario?.onActivity { sut ->
val trashbinRepository = TrashbinLocalRepository(TestCase.FILES)
sut.trashbinPresenter = TrashbinPresenter(trashbinRepository, sut)
onIdleSync {
sut.runOnUiThread { sut.loadFolder() }
screenshot(sut)
}
}
}
@Test
@ScreenshotTest
fun empty() {
val sut: TrashbinActivity = activityRule.launchActivity(null)
val trashbinRepository = TrashbinLocalRepository(TestCase.EMPTY)
sut.trashbinPresenter = TrashbinPresenter(trashbinRepository, sut)
sut.runOnUiThread { sut.loadFolder() }
shortSleep()
shortSleep()
waitForIdleSync()
screenshot(sut.binding.emptyList.emptyListView)
scenario = activityRule.scenario
scenario?.onActivity { sut ->
val trashbinRepository = TrashbinLocalRepository(TestCase.EMPTY)
sut.trashbinPresenter = TrashbinPresenter(trashbinRepository, sut)
onIdleSync {
sut.runOnUiThread { sut.loadFolder() }
screenshot(sut)
}
}
}
@Test
@ScreenshotTest
fun loading() {
val sut: TrashbinActivity = activityRule.launchActivity(null)
val trashbinRepository = TrashbinLocalRepository(TestCase.EMPTY)
sut.trashbinPresenter = TrashbinPresenter(trashbinRepository, sut)
sut.runOnUiThread { sut.showInitialLoading() }
shortSleep()
screenshot(sut.binding.listFragmentLayout)
scenario = activityRule.scenario
scenario?.onActivity { sut ->
val trashbinRepository = TrashbinLocalRepository(TestCase.EMPTY)
sut.trashbinPresenter = TrashbinPresenter(trashbinRepository, sut)
onIdleSync {
sut.runOnUiThread { sut.showInitialLoading() }
screenshot(sut)
}
}
}
@Test
@ScreenshotTest
fun normalUser() {
val sut: TrashbinActivity = activityRule.launchActivity(null)
val trashbinRepository = TrashbinLocalRepository(TestCase.EMPTY)
sut.trashbinPresenter = TrashbinPresenter(trashbinRepository, sut)
sut.runOnUiThread { sut.showUser() }
shortSleep()
screenshot(sut)
scenario = activityRule.scenario
scenario?.onActivity { sut ->
val trashbinRepository = TrashbinLocalRepository(TestCase.EMPTY)
sut.trashbinPresenter = TrashbinPresenter(trashbinRepository, sut)
onIdleSync {
sut.runOnUiThread { sut.showUser() }
screenshot(sut)
}
}
}
@Test
@ -122,18 +128,18 @@ class TrashbinActivityIT : AbstractIT() {
platformAccountManager.setUserData(temp, AccountUtils.Constants.KEY_OC_BASE_URL, "https://nextcloud.localhost")
platformAccountManager.setUserData(temp, AccountUtils.Constants.KEY_USER_ID, "differentUser")
val intent = Intent()
val intent = Intent(targetContext, TrashbinActivity::class.java)
intent.putExtra(Intent.EXTRA_USER, "differentUser@https://nextcloud.localhost")
val sut: TrashbinActivity = activityRule.launchActivity(intent)
val trashbinRepository = TrashbinLocalRepository(TestCase.EMPTY)
sut.trashbinPresenter = TrashbinPresenter(trashbinRepository, sut)
sut.runOnUiThread { sut.showUser() }
shortSleep()
screenshot(sut)
val sutScenario = ActivityScenario.launch<TrashbinActivity>(intent)
sutScenario.onActivity { sut ->
sut.intent = intent
val trashbinRepository = TrashbinLocalRepository(TestCase.EMPTY)
sut.trashbinPresenter = TrashbinPresenter(trashbinRepository, sut)
onIdleSync {
sut.runOnUiThread { sut.showUser() }
screenshot(sut)
}
}
}
}

View file

@ -0,0 +1,27 @@
/*
* Nextcloud - Android Client
*
* SPDX-FileCopyrightText: 2024 Alper Ozturk <alper.ozturk@nextcloud.com>
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
package com.nextcloud.utils
import androidx.test.espresso.idling.CountingIdlingResource
object EspressoIdlingResource {
private const val RESOURCE = "GLOBAL"
@JvmField val countingIdlingResource = CountingIdlingResource(RESOURCE)
fun increment() {
countingIdlingResource.increment()
}
fun decrement() {
if (!countingIdlingResource.isIdleNow) {
countingIdlingResource.decrement()
}
}
}

View file

@ -25,6 +25,7 @@ import com.nextcloud.client.account.CurrentAccountProvider
import com.nextcloud.client.di.Injectable
import com.nextcloud.client.network.ClientFactory
import com.nextcloud.client.preferences.AppPreferences
import com.nextcloud.utils.EspressoIdlingResource
import com.owncloud.android.R
import com.owncloud.android.databinding.TrashbinActivityBinding
import com.owncloud.android.lib.resources.trashbin.model.TrashbinFile
@ -177,6 +178,7 @@ class TrashbinActivity :
}
fun loadFolder() {
EspressoIdlingResource.increment()
trashbinListAdapter?.let {
if (it.itemCount > EMPTY_LIST_COUNT) {
binding.swipeContainingList.isRefreshing = true
@ -186,6 +188,7 @@ class TrashbinActivity :
trashbinPresenter?.loadFolder()
}
EspressoIdlingResource.decrement()
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
@ -285,19 +288,23 @@ class TrashbinActivity :
@VisibleForTesting
fun showInitialLoading() {
EspressoIdlingResource.increment()
binding.emptyList.emptyListView.visibility = View.GONE
binding.list.visibility = View.GONE
binding.loadingContent.visibility = View.VISIBLE
EspressoIdlingResource.decrement()
}
@VisibleForTesting
fun showUser() {
EspressoIdlingResource.increment()
binding.loadingContent.visibility = View.GONE
binding.list.visibility = View.VISIBLE
binding.swipeContainingList.isRefreshing = false
binding.emptyList.emptyListViewText.text = user.get().accountName
binding.emptyList.emptyListViewText.visibility = View.VISIBLE
binding.emptyList.emptyListView.visibility = View.VISIBLE
EspressoIdlingResource.decrement()
}
override fun showError(message: Int) {

View file

@ -6384,6 +6384,14 @@
<sha256 value="e4bb54753c36a27a0e5d70154a5034fedd8feac4282295034bfd483d6c7aae78" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="com.google.android.apps.common.testing.accessibility.framework" name="accessibility-test-framework" version="3.1">
<artifact name="accessibility-test-framework-3.1.aar">
<sha256 value="e641e2a2c7287afd41b85310dd8f1344a8668034bbbfc4b02f58a48fd9c05ec7" origin="Generated by Gradle" reason="Artifact is not signed"/>
</artifact>
<artifact name="accessibility-test-framework-3.1.pom">
<sha256 value="80567228cdbd44d61e5320cd090883de7232dbc1ed7ebf5ab5c9810c11cd67e0" origin="Generated by Gradle" reason="Artifact is not signed"/>
</artifact>
</component>
<component group="com.google.android.apps.common.testing.accessibility.framework" name="accessibility-test-framework" version="3.1.2">
<artifact name="accessibility-test-framework-3.1.2.aar">
<sha256 value="9b586dc8eeeb4f601038e23ef8ffd6a1deeca1163276d02797b0d2b8f9764b62" origin="Generated by Gradle" reason="Artifact is not signed"/>
@ -7567,6 +7575,11 @@
<sha256 value="47f0635b33c969e5f55ac9f1a4a8e10c120b8bab2cb3f06faaabc0e82057e276" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="com.h3xstream.findsecbugs" name="findsecbugs-root-pom" version="1.13.0">
<artifact name="findsecbugs-root-pom-1.13.0.pom">
<sha256 value="da8755645ba7ae39588598e548f62eb0be1d2f47a6eee57efc5eb2865a4a556b" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="com.intellij" name="annotations" version="12.0">
<artifact name="annotations-12.0.jar">
<sha256 value="f8ab13b14be080fe2f617f90e55599760e4a1b4deeea5c595df63d0d6375ed6d" origin="Generated by Gradle"/>