apps-android-commons/app/src/androidTest/java/fr/free/nrw/commons/MainActivityTest.kt
Madhur Gupta 36510a4301
Fix Instrumentation Tests (#4832)
* Fix AboutActivity Instrumentation Tests

* Fix WelcomeActivity Instrumentation Tests

* Fix SearchActivity Instrumentation Tests

* Fix SignupTest Instrumentation Tests

* Fix LoginActivityTest Instrumentation Tests

* Fix SettingsActivity Instrumentation Tests

* Fix LoginActivity Instrumentation Tests

* Update loginUser

* Add logoutUser

* Fix logoutUser

* Update github action to use env variables

* Fix github action to use env variables

* Fix github action

* Fix github action

* Fix github action

* Fix github action

* Fix github action

* Fix github action

* Fix github action

* Fix github action

* Fix github action

* Fix github action

* Fix github action

* Remove scroll

* Add wait time

* Fix keyboard issue

* Disable animation

* Enable animation

* Enable animation

* Disable animation

* Fix compile error

* Remove AVD Cache

* Set timezone and dns

* Add AVD cache

* Add API level

* Update API level to 24

* Add sleep timer

* Add scroll

* Remove logout

* Ignore some tests

* update logout

* update logout

* Fix scroll layout problem

* Fix scroll layout problem

* Ignore orientation test

* Update tests

* Update tests

* Update API level to 29

* Change device and API level to 27

* Use AndroidJUnit4

* Change API to 28

* Try with macos

* Use nested scrollview

* Update Profile Activity Test

* Update Profile Activity Test

* Turn off rotation

* Change device

* Remove failing test

* Change API to 24

* Add rotation lock for failing test

* Change API to 24

* Add sleep

* Remove text

* Remove child

* Force rotation on back press

* Force open more sheet

* Change device to pixel 5

* Change device to 13.5inch

* Update tests

* Ignore failing test

* Use linux

* Update tests

* Use repo secrets instead

* Add mainactivity tests

* Remove content description

* Different workflows for PR and branch, PR workflow will need maintainer approval to prevent secrets getting leaked

* Run instrumentation tests only for push and not for PRs

* Fix FileNotFound Exception

* Update MainActivity and Profile tests

* Fix coverage path issue

* Add wait time for map to load

* Open contribution

* Update settings tests

* Update main activity tests

* Fix failing test

* Fix failing test

* Increase login time

* Separate settings test

* Update review tests

* Ignore uploadCancelledAfterLocationPickedTest

* Update MainActivity Tests

* Update UploadCancelledTest

* Update UploadCancelledTest

* Update device

* Fix Init release error

* Fix failing test

* Fix failing test

* Try with long click

* Update UploadCancelledTest.kt

* Fix Leaderboard Test

* Update testContributions

* Set GPS coordinates

* Add zoomControllers to excludes

* Add ExploreActivityTest

* Remove failing condition

* Merge tests

* Remove failing test

* Remove failing test

* Fix failing test

* Fix failing test

* Update AboutActivityTest.kt

* Update jacoco.gradle
2022-04-26 21:09:15 +10:00

230 lines
No EOL
7.4 KiB
Kotlin

package fr.free.nrw.commons
import android.app.Activity
import android.app.Instrumentation
import androidx.test.espresso.Espresso
import androidx.test.espresso.action.ViewActions
import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.intent.Intents
import androidx.test.espresso.intent.matcher.IntentMatchers
import androidx.test.espresso.matcher.ViewMatchers
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.rule.ActivityTestRule
import androidx.test.rule.GrantPermissionRule
import androidx.test.uiautomator.UiDevice
import com.google.gson.Gson
import fr.free.nrw.commons.UITestHelper.Companion.childAtPosition
import fr.free.nrw.commons.auth.LoginActivity
import fr.free.nrw.commons.kvstore.JsonKvStore
import fr.free.nrw.commons.notification.NotificationActivity
import org.hamcrest.CoreMatchers
import org.hamcrest.Matchers
import org.junit.*
import org.junit.runner.RunWith
@LargeTest
@RunWith(AndroidJUnit4::class)
class MainActivityTest {
@get:Rule
var activityRule: ActivityTestRule<*> = ActivityTestRule(LoginActivity::class.java)
@get:Rule
var mGrantPermissionRule: GrantPermissionRule = GrantPermissionRule.grant(
"android.permission.ACCESS_FINE_LOCATION"
)
private val device: UiDevice =
UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
private lateinit var defaultKvStore: JsonKvStore
@Before
fun setup() {
device.setOrientationNatural()
device.freezeRotation()
UITestHelper.loginUser()
UITestHelper.skipWelcome()
Intents.init()
Intents.intending(CoreMatchers.not(IntentMatchers.isInternal()))
.respondWith(Instrumentation.ActivityResult(Activity.RESULT_OK, null))
val context = InstrumentationRegistry.getInstrumentation().targetContext
val storeName = context.packageName + "_preferences"
defaultKvStore = JsonKvStore(context, storeName, Gson())
}
@After
fun cleanUp() {
Intents.release()
}
@Test
fun testNearby() {
Espresso.onView(
Matchers.allOf(
childAtPosition(
childAtPosition(
ViewMatchers.withId(R.id.fragment_main_nav_tab_layout),
0
),
1
),
ViewMatchers.isDisplayed()
)
).perform(ViewActions.click())
Espresso.onView(ViewMatchers.withId(R.id.fragmentContainer))
.check(matches(ViewMatchers.isDisplayed()))
UITestHelper.sleep(10000)
val actionMenuItemView2 = Espresso.onView(
Matchers.allOf(
ViewMatchers.withId(R.id.list_sheet), ViewMatchers.withContentDescription("List"),
childAtPosition(
childAtPosition(
ViewMatchers.withId(R.id.toolbar),
1
),
0
),
ViewMatchers.isDisplayed()
)
)
actionMenuItemView2.perform(ViewActions.click())
UITestHelper.sleep(1000)
}
@Test
fun testExplore() {
Espresso.onView(
Matchers.allOf(
childAtPosition(
childAtPosition(
ViewMatchers.withId(R.id.fragment_main_nav_tab_layout),
0
),
2
),
ViewMatchers.isDisplayed()
)
).perform(ViewActions.click())
Espresso.onView(ViewMatchers.withId(R.id.fragmentContainer))
.check(matches(ViewMatchers.isDisplayed()))
UITestHelper.sleep(1000)
}
@Test
fun testContributions() {
Espresso.onView(
Matchers.allOf(
childAtPosition(
childAtPosition(
ViewMatchers.withId(R.id.fragment_main_nav_tab_layout),
0
),
0
),
ViewMatchers.isDisplayed()
)
).perform(ViewActions.click())
Espresso.onView(ViewMatchers.withId(R.id.fragmentContainer))
.check(matches(ViewMatchers.isDisplayed()))
Espresso.onView(
Matchers.allOf(
ViewMatchers.withId(R.id.contributionImage),
childAtPosition(
childAtPosition(
ViewMatchers.withId(R.id.contributionsList),
0
),
1
),
ViewMatchers.isDisplayed()
)
).perform(ViewActions.click())
val actionMenuItemView = Espresso.onView(
Matchers.allOf(
ViewMatchers.withId(R.id.menu_bookmark_current_image),
childAtPosition(
childAtPosition(
ViewMatchers.withId(R.id.toolbar),
1
),
0
),
ViewMatchers.isDisplayed()
)
)
actionMenuItemView.perform(ViewActions.click())
UITestHelper.sleep(3000)
}
@Test
fun testBookmarks() {
Espresso.onView(
Matchers.allOf(
childAtPosition(
childAtPosition(
ViewMatchers.withId(R.id.fragment_main_nav_tab_layout),
0
),
3
),
ViewMatchers.isDisplayed()
)
).perform(ViewActions.click())
UITestHelper.sleep(1000)
}
@Test
fun testNotifications() {
Espresso.onView(
Matchers.allOf(
ViewMatchers.withId(R.id.notifications),
childAtPosition(
childAtPosition(
ViewMatchers.withId(R.id.toolbar),
1
),
1
),
ViewMatchers.isDisplayed()
)
).perform(ViewActions.click())
Intents.intended(IntentMatchers.hasComponent(NotificationActivity::class.java.name))
Espresso.pressBack()
UITestHelper.sleep(1000)
}
@Test
fun testLimitedConnectionModeToggle() {
val isEnabled = defaultKvStore
.getBoolean(CommonsApplication.IS_LIMITED_CONNECTION_MODE_ENABLED, false)
Espresso.onView(
Matchers.allOf(
ViewMatchers.withId(R.id.toggle_limited_connection_mode),
childAtPosition(
childAtPosition(
ViewMatchers.withId(R.id.toolbar),
1
),
0
),
ViewMatchers.isDisplayed()
)
).perform(ViewActions.click())
UITestHelper.sleep(1000)
if (isEnabled) {
Assert.assertFalse(
defaultKvStore
.getBoolean(CommonsApplication.IS_LIMITED_CONNECTION_MODE_ENABLED, false)
)
} else {
Assert.assertTrue(
defaultKvStore
.getBoolean(CommonsApplication.IS_LIMITED_CONNECTION_MODE_ENABLED, false)
)
}
}
}