diff --git a/app/src/androidTest/java/org/kiwix/kiwixmobile/webserver/ZimHostFragmentTest.kt b/app/src/androidTest/java/org/kiwix/kiwixmobile/webserver/ZimHostFragmentTest.kt index 78f74903e..0319abe60 100644 --- a/app/src/androidTest/java/org/kiwix/kiwixmobile/webserver/ZimHostFragmentTest.kt +++ b/app/src/androidTest/java/org/kiwix/kiwixmobile/webserver/ZimHostFragmentTest.kt @@ -53,14 +53,16 @@ class ZimHostFragmentTest { arrayOf( Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.NEARBY_WIFI_DEVICES + Manifest.permission.NEARBY_WIFI_DEVICES, + Manifest.permission.ACCESS_NETWORK_STATE ) } else { arrayOf( Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.ACCESS_COARSE_LOCATION, - Manifest.permission.ACCESS_FINE_LOCATION + Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.ACCESS_NETWORK_STATE ) } diff --git a/app/src/androidTest/java/org/kiwix/kiwixmobile/webserver/ZimHostRobot.kt b/app/src/androidTest/java/org/kiwix/kiwixmobile/webserver/ZimHostRobot.kt index 40341a5db..e69c158fb 100644 --- a/app/src/androidTest/java/org/kiwix/kiwixmobile/webserver/ZimHostRobot.kt +++ b/app/src/androidTest/java/org/kiwix/kiwixmobile/webserver/ZimHostRobot.kt @@ -24,6 +24,7 @@ import androidx.test.espresso.action.ViewActions.click import androidx.test.espresso.assertion.ViewAssertions.matches import androidx.test.espresso.matcher.ViewMatchers import androidx.test.espresso.matcher.ViewMatchers.assertThat +import androidx.test.espresso.matcher.ViewMatchers.withText import applyWithViewHierarchyPrinting import com.adevinta.android.barista.interaction.BaristaSleepInteractions import com.adevinta.android.barista.interaction.BaristaSwipeRefreshInteractions.refresh @@ -64,14 +65,21 @@ class ZimHostRobot : BaseRobot() { } fun clickOnTestZim() { + pauseForBetterTestPerformance() clickOn(Text("Test_Zim")) } fun startServer() { + // stop the server if it is already running. + stopServerIfAlreadyStarted() clickOn(ViewId(R.id.startServerButton)) + assetWifiDialogDisplayed() + onView(withText("PROCEED")).perform(click()) + } + + private fun assetWifiDialogDisplayed() { pauseForBetterTestPerformance() - isVisible(TextId(R.string.wifi_dialog_title)) - clickOn(TextId(R.string.hotspot_dialog_neutral_button)) + isVisible(Text("WiFi connection detected")) } fun assertServerStarted() { @@ -110,7 +118,6 @@ class ZimHostRobot : BaseRobot() { } private fun selectZimFile(position: Int) { - pauseForBetterTestPerformance() try { onView( RecyclerViewMatcher(R.id.recyclerViewZimHost).atPositionOnView( @@ -119,7 +126,6 @@ class ZimHostRobot : BaseRobot() { ) ).check(matches(ViewMatchers.isChecked())) } catch (assertionError: AssertionFailedError) { - pauseForBetterTestPerformance() onView( RecyclerViewMatcher(R.id.recyclerViewZimHost).atPositionOnView( position, @@ -148,6 +154,6 @@ class ZimHostRobot : BaseRobot() { } private fun pauseForBetterTestPerformance() { - BaristaSleepInteractions.sleep(TestUtils.TEST_PAUSE_MS_FOR_DOWNLOAD_TEST.toLong()) + BaristaSleepInteractions.sleep(TestUtils.TEST_PAUSE_MS.toLong()) } } diff --git a/contrib/instrumentation.sh b/contrib/instrumentation.sh index 6ab3998c5..96e6e443b 100644 --- a/contrib/instrumentation.sh +++ b/contrib/instrumentation.sh @@ -1,7 +1,10 @@ #!/usr/bin/env bash +# Enable Wi-Fi on the emulator +adb shell svc wifi enable adb logcat -c -adb logcat ./*:E -v color & +# shellcheck disable=SC2035 +adb logcat *:E -v color & retry=0 while [ $retry -le 3 ] do @@ -11,8 +14,11 @@ do else adb kill-server adb start-server + # Enable Wi-Fi on the emulator + adb shell svc wifi enable adb logcat -c - adb logcat ./*:E -v color & + # shellcheck disable=SC2035 + adb logcat *:E -v color & ./gradlew clean retry=$(( retry + 1 )) if [ $retry -eq 3 ]; then diff --git a/core/src/test/java/org/kiwix/kiwixmobile/core/search/viewmodel/effects/SaveSearchToRecentsTest.kt b/core/src/test/java/org/kiwix/kiwixmobile/core/search/viewmodel/effects/SaveSearchToRecentsTest.kt index 7a7ba92f8..57d2f13b6 100644 --- a/core/src/test/java/org/kiwix/kiwixmobile/core/search/viewmodel/effects/SaveSearchToRecentsTest.kt +++ b/core/src/test/java/org/kiwix/kiwixmobile/core/search/viewmodel/effects/SaveSearchToRecentsTest.kt @@ -22,20 +22,23 @@ import androidx.appcompat.app.AppCompatActivity import io.mockk.Called import io.mockk.mockk import io.mockk.verify -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.test.TestScope +import kotlinx.coroutines.test.advanceUntilIdle +import kotlinx.coroutines.test.runTest import org.junit.jupiter.api.Test import org.kiwix.kiwixmobile.core.dao.NewRecentSearchDao import org.kiwix.kiwixmobile.core.reader.ZimFileReader import org.kiwix.kiwixmobile.core.search.adapter.SearchListItem.RecentSearchListItem +@OptIn(ExperimentalCoroutinesApi::class) internal class SaveSearchToRecentsTest { private val newRecentSearchDao: NewRecentSearchDao = mockk() private val searchListItem = RecentSearchListItem("", ZimFileReader.CONTENT_PREFIX) private val activity: AppCompatActivity = mockk() - private val viewModelScope = CoroutineScope(Dispatchers.IO) + private val testDispatcher = TestScope() @Test fun `invoke with null Id does nothing`() { @@ -43,7 +46,7 @@ internal class SaveSearchToRecentsTest { newRecentSearchDao, searchListItem, null, - viewModelScope + testDispatcher ).invokeWith( activity ) @@ -51,14 +54,15 @@ internal class SaveSearchToRecentsTest { } @Test - fun `invoke with non null Id saves search`() { + fun `invoke with non null Id saves search`() = testDispatcher.runTest { val id = "id" SaveSearchToRecents( newRecentSearchDao, searchListItem, id, - viewModelScope + testDispatcher ).invokeWith(activity) + testDispatcher.advanceUntilIdle() verify { newRecentSearchDao.saveSearch(searchListItem.value, id, ZimFileReader.CONTENT_PREFIX) } } }