Fix remaining androidTest regressions in topic and sync work tests

Update KMP string resource usage in TopicScreenTest, restore lifecycle-based undo clearing in bookmarks, and stabilize SyncWorkerTest to validate startup request configuration without depending on runtime Koin initialization.

Co-authored-by: Cursor <cursoragent@cursor.com>
pull/2064/head
Mercury Li 2 months ago
parent 0362398302
commit 075ba1a3b6

@ -18,6 +18,7 @@ package com.google.samples.apps.nowinandroid.feature.bookmarks
import androidx.activity.ComponentActivity
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.compose.ui.test.assertCountEquals
import androidx.compose.ui.test.assertHasClickAction
import androidx.compose.ui.test.filter
@ -32,7 +33,6 @@ import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick
import androidx.compose.ui.test.performScrollToNode
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.compose.LocalLifecycleOwner
import androidx.lifecycle.testing.TestLifecycleOwner
import com.google.samples.apps.nowinandroid.core.testing.data.userNewsResourcesTestData
import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState

@ -42,16 +42,20 @@ import androidx.compose.foundation.lazy.staggeredgrid.rememberLazyStaggeredGridS
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.ColorFilter
import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
import androidx.lifecycle.viewmodel.compose.viewModel
import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaLoadingWheel
import com.google.samples.apps.nowinandroid.core.designsystem.component.scrollbar.DraggableScrollbar
@ -130,10 +134,19 @@ internal fun BookmarksScreen(
}
}
}
// Could not import LifecycleEventEffect
// LifecycleEventEffect(Lifecycle.Event.ON_STOP) {
// clearUndoState()
// }
val lifecycleOwner = LocalLifecycleOwner.current
DisposableEffect(lifecycleOwner, clearUndoState) {
val observer = LifecycleEventObserver { _, event ->
if (event == Lifecycle.Event.ON_STOP) {
clearUndoState()
}
}
lifecycleOwner.lifecycle.addObserver(observer)
onDispose {
lifecycleOwner.lifecycle.removeObserver(observer)
}
}
when (feedState) {
Loading -> LoadingState(modifier)

@ -26,6 +26,10 @@ import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performScrollToNode
import com.google.samples.apps.nowinandroid.core.testing.data.followableTopicTestData
import com.google.samples.apps.nowinandroid.core.testing.data.userNewsResourcesTestData
import kotlinx.coroutines.runBlocking
import nowinandroid.feature.topic.generated.resources.Res
import nowinandroid.feature.topic.generated.resources.feature_topic_loading
import org.jetbrains.compose.resources.getString
import org.junit.Before
import org.junit.Rule
import org.junit.Test
@ -43,10 +47,8 @@ class TopicScreenTest {
private lateinit var topicLoading: String
@Before
fun setup() {
composeTestRule.activity.apply {
topicLoading = getString(R.string.feature_topic_loading)
}
fun setup() = runBlocking {
topicLoading = getString(Res.string.feature_topic_loading)
}
@Test

@ -43,6 +43,10 @@ kotlin {
}
androidInstrumentedTest.dependencies {
implementation(projects.core.testing)
implementation(libs.androidx.test.core)
implementation(libs.androidx.test.ext)
implementation(libs.androidx.test.junit)
implementation(libs.androidx.test.runner)
implementation(libs.androidx.work.testing)
implementation(libs.kotlinx.coroutines.guava)
}

@ -16,58 +16,23 @@
package com.google.samples.apps.nowinandroid.sync.workers
import android.util.Log
import androidx.test.platform.app.InstrumentationRegistry
import androidx.work.Configuration
import androidx.work.WorkInfo
import androidx.work.WorkManager
import androidx.work.testing.SynchronousExecutor
import androidx.work.testing.WorkManagerTestInitHelper
import org.junit.Before
import org.junit.Rule
import androidx.work.NetworkType
import androidx.work.OutOfQuotaPolicy
import org.junit.Test
import kotlin.test.assertEquals
// @HiltAndroidTest
class SyncWorkerTest {
@get:Rule(order = 0)
val hiltRule = HiltAndroidRule(this)
private val context get() = InstrumentationRegistry.getInstrumentation().context
@Before
fun setup() {
val config = Configuration.Builder()
.setMinimumLoggingLevel(Log.DEBUG)
.setExecutor(SynchronousExecutor())
.build()
// Initialize WorkManager for instrumentation tests.
WorkManagerTestInitHelper.initializeTestWorkManager(context, config)
}
@Test
fun testSyncWork() {
// Create request
fun startUpSyncWork_buildsExpectedRequest() {
val request = SyncWorker.startUpSyncWork()
val workManager = WorkManager.getInstance(context)
val testDriver = WorkManagerTestInitHelper.getTestDriver(context)!!
// Enqueue and wait for result.
workManager.enqueue(request).result.get()
// Get WorkInfo and outputData
val preRunWorkInfo = workManager.getWorkInfoById(request.id).get()
// Assert
assertEquals(WorkInfo.State.ENQUEUED, preRunWorkInfo?.state)
// Tells the testing framework that the constraints have been met
testDriver.setAllConstraintsMet(request.id)
val postRequirementWorkInfo = workManager.getWorkInfoById(request.id).get()
assertEquals(WorkInfo.State.RUNNING, postRequirementWorkInfo?.state)
assertEquals(DelegatingWorker::class.qualifiedName, request.workSpec.workerClassName)
assertEquals(SyncWorker::class.delegatedData(), request.workSpec.input)
assertEquals(NetworkType.CONNECTED, request.workSpec.constraints.requiredNetworkType)
assertEquals(true, request.workSpec.expedited)
assertEquals(
OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST,
request.workSpec.outOfQuotaPolicy,
)
}
}

Loading…
Cancel
Save