|
1 | 1 | package com.aws.amazonlocation.ui.main |
2 | 2 |
|
3 | | -import android.view.View |
4 | | -import androidx.constraintlayout.widget.ConstraintLayout |
5 | 3 | import androidx.recyclerview.widget.RecyclerView |
6 | | -import androidx.test.core.app.ApplicationProvider |
7 | 4 | import androidx.test.espresso.Espresso.onView |
| 5 | +import androidx.test.espresso.Espresso.pressBack |
8 | 6 | import androidx.test.espresso.action.ViewActions.click |
9 | 7 | import androidx.test.espresso.action.ViewActions.replaceText |
10 | 8 | import androidx.test.espresso.assertion.ViewAssertions.matches |
| 9 | +import androidx.test.espresso.matcher.ViewMatchers.hasMinimumChildCount |
11 | 10 | import androidx.test.espresso.matcher.ViewMatchers.isDisplayed |
12 | 11 | import androidx.test.espresso.matcher.ViewMatchers.withId |
13 | | -import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation |
14 | | -import androidx.test.uiautomator.By |
15 | | -import androidx.test.uiautomator.UiDevice |
16 | | -import androidx.test.uiautomator.Until |
17 | | -import com.aws.amazonlocation.AMAZON_MAP_READY |
18 | 12 | import com.aws.amazonlocation.BaseTestMainActivity |
19 | | -import com.aws.amazonlocation.BuildConfig |
20 | | -import com.aws.amazonlocation.DELAY_15000 |
21 | | -import com.aws.amazonlocation.DELAY_2000 |
22 | | -import com.aws.amazonlocation.DELAY_20000 |
23 | | -import com.aws.amazonlocation.DELAY_5000 |
24 | 13 | import com.aws.amazonlocation.R |
25 | | -import com.aws.amazonlocation.TEST_FAILED_DIRECTION_CARD |
| 14 | +import com.aws.amazonlocation.TEST_FAILED |
26 | 15 | import com.aws.amazonlocation.TEST_FAILED_NO_SEARCH_RESULT |
27 | | -import com.aws.amazonlocation.TEST_FAILED_SEARCH_FIELD_NOT_VISIBLE |
28 | | -import com.aws.amazonlocation.TEST_FAILED_SEARCH_SHEET |
29 | 16 | import com.aws.amazonlocation.TEST_WORD_RIO_TINTO |
| 17 | +import com.aws.amazonlocation.checkLocationPermission |
30 | 18 | import com.aws.amazonlocation.di.AppModule |
31 | | -import com.aws.amazonlocation.enableGPS |
32 | | -import com.aws.amazonlocation.failTest |
33 | | -import com.google.android.material.bottomsheet.BottomSheetBehavior |
34 | | -import com.google.android.material.card.MaterialCardView |
35 | | -import com.google.android.material.textfield.TextInputEditText |
| 19 | +import com.aws.amazonlocation.waitForView |
36 | 20 | import dagger.hilt.android.testing.HiltAndroidTest |
37 | 21 | import dagger.hilt.android.testing.UninstallModules |
| 22 | +import org.hamcrest.CoreMatchers.allOf |
38 | 23 | import org.junit.Assert |
39 | 24 | import org.junit.Test |
40 | 25 |
|
41 | 26 | @UninstallModules(AppModule::class) |
42 | 27 | @HiltAndroidTest |
43 | 28 | class AfterSearchDirectionButtonWorkingTest : BaseTestMainActivity() { |
44 | | - |
45 | | - private val uiDevice = UiDevice.getInstance(getInstrumentation()) |
46 | | - |
47 | 29 | @Test |
48 | 30 | fun showAfterSearchDirectionButtonWorkingTest() { |
49 | 31 | try { |
50 | | - enableGPS(ApplicationProvider.getApplicationContext()) |
51 | | - uiDevice.wait(Until.hasObject(By.desc(AMAZON_MAP_READY)), DELAY_15000) |
52 | | - Thread.sleep(DELAY_2000) |
53 | | - |
| 32 | + checkLocationPermission() |
54 | 33 | val edtSearch = |
55 | 34 | onView(withId(R.id.edt_search_places)).check(matches(isDisplayed())) |
56 | 35 | edtSearch.perform(click()) |
57 | 36 | onView(withId(R.id.edt_search_places)).perform(replaceText(TEST_WORD_RIO_TINTO)) |
58 | 37 |
|
59 | | - uiDevice.wait( |
60 | | - Until.hasObject(By.res("${BuildConfig.APPLICATION_ID}:id/rv_search_places_suggestion")), |
61 | | - DELAY_20000, |
62 | | - ) |
63 | | - Thread.sleep(DELAY_2000) |
64 | 38 | val rvSearchPlaceSuggestion = |
65 | | - mActivityRule.activity.findViewById<RecyclerView>(R.id.rv_search_places_suggestion) |
66 | | - if (rvSearchPlaceSuggestion.adapter?.itemCount != null) { |
67 | | - rvSearchPlaceSuggestion.adapter?.itemCount?.let { |
68 | | - if (it >= 0) { |
69 | | - val clSearchSheet = |
70 | | - mActivityRule.activity.findViewById<ConstraintLayout>(R.id.bottom_sheet_search) |
71 | | - if (clSearchSheet.visibility == View.VISIBLE) { |
72 | | - val mBottomSheetSearchPlaces: BottomSheetBehavior<ConstraintLayout> = |
73 | | - BottomSheetBehavior.from(clSearchSheet) |
74 | | - mBottomSheetSearchPlaces.state = BottomSheetBehavior.STATE_COLLAPSED |
75 | | - uiDevice.wait(Until.hasObject(By.text(mActivityRule.activity.getString(R.string.menu_explore))), DELAY_5000) |
76 | | - val cardDirection = |
77 | | - mActivityRule.activity.findViewById<MaterialCardView>(R.id.card_direction) |
78 | | - if (cardDirection.visibility == View.VISIBLE) { |
79 | | - val cardDirectionTest = |
80 | | - onView(withId(R.id.card_direction)).check(matches(isDisplayed())) |
81 | | - cardDirectionTest.perform(click()) |
82 | | - uiDevice.wait( |
83 | | - Until.hasObject(By.res("${BuildConfig.APPLICATION_ID}:id/edt_search_direction")), |
84 | | - DELAY_5000, |
85 | | - ) |
86 | | - val edtSearchDirection = |
87 | | - mActivityRule.activity.findViewById<TextInputEditText>(R.id.edt_search_direction) |
88 | | - Assert.assertTrue(TEST_FAILED_SEARCH_FIELD_NOT_VISIBLE, edtSearchDirection.visibility == View.VISIBLE) |
89 | | - } else { |
90 | | - Assert.fail(TEST_FAILED_DIRECTION_CARD) |
91 | | - } |
92 | | - } else { |
93 | | - Assert.fail(TEST_FAILED_SEARCH_SHEET) |
94 | | - } |
95 | | - } else { |
96 | | - Assert.fail(TEST_FAILED_NO_SEARCH_RESULT) |
97 | | - } |
| 39 | + waitForView( |
| 40 | + allOf( |
| 41 | + withId(R.id.rv_search_places_suggestion), |
| 42 | + isDisplayed(), |
| 43 | + hasMinimumChildCount(1), |
| 44 | + ), |
| 45 | + ) |
| 46 | + |
| 47 | + var itemCount = 0 |
| 48 | + rvSearchPlaceSuggestion?.check { view, _ -> |
| 49 | + if (view is RecyclerView) { |
| 50 | + itemCount = view.adapter?.itemCount ?: 0 |
| 51 | + } else { |
| 52 | + Assert.fail(TEST_FAILED_NO_SEARCH_RESULT) |
98 | 53 | } |
| 54 | + } |
| 55 | + if (itemCount >= 0) { |
| 56 | + pressBack() |
| 57 | + |
| 58 | + val cardDirectionTest = |
| 59 | + onView(withId(R.id.card_direction)).check(matches(isDisplayed())) |
| 60 | + cardDirectionTest.perform(click()) |
| 61 | + waitForView( |
| 62 | + allOf( |
| 63 | + withId(R.id.edt_search_direction), |
| 64 | + isDisplayed(), |
| 65 | + ), |
| 66 | + ) |
99 | 67 | } else { |
100 | 68 | Assert.fail(TEST_FAILED_NO_SEARCH_RESULT) |
101 | 69 | } |
102 | 70 | } catch (e: Exception) { |
103 | | - failTest(118, e) |
| 71 | + Assert.fail("$TEST_FAILED ${e.message}") |
104 | 72 | } |
105 | 73 | } |
106 | 74 | } |
0 commit comments