diff --git a/.github/workflows/Build.yaml b/.github/workflows/Build.yaml
index 54dbcb252..a047a451a 100644
--- a/.github/workflows/Build.yaml
+++ b/.github/workflows/Build.yaml
@@ -34,16 +34,16 @@ jobs:
uses: gradle/gradle-build-action@v2
- name: Check spotless
- run: ./gradlew spotlessCheck --init-script gradle/init.gradle.kts --no-configuration-cache --stacktrace
+ run: ./gradlew spotlessCheck --init-script gradle/init.gradle.kts --no-configuration-cache
- name: Check lint
- run: ./gradlew lintDemoDebug --stacktrace
+ run: ./gradlew lintDemoDebug
- name: Build all build type and flavor permutations
- run: ./gradlew assemble --stacktrace
+ run: ./gradlew assemble
- name: Run local tests
- run: ./gradlew testDemoDebug testProdDebug --stacktrace
+ run: ./gradlew testDemoDebug testProdDebug
- name: Upload build outputs (APKs)
uses: actions/upload-artifact@v3
@@ -90,7 +90,7 @@ jobs:
disable-animations: true
disk-size: 6000M
heap-size: 600M
- script: ./gradlew connectedProdDebugAndroidTest -x :benchmark:connectedProdBenchmarkAndroidTest --stacktrace
+ script: ./gradlew connectedProdDebugAndroidTest -x :benchmark:connectedProdBenchmarkAndroidTest
- name: Upload test reports
if: always()
diff --git a/.google/packaging.yaml b/.google/packaging.yaml
index e3b33ada7..40ab81389 100644
--- a/.google/packaging.yaml
+++ b/.google/packaging.yaml
@@ -18,15 +18,31 @@
# End users may safely ignore this file. It has no relevance to other systems.
---
status: PUBLISHED
-technologies: [Android]
+technologies: [Android, JetpackCompose, Coroutines]
categories:
- AndroidTesting
- AndroidArchitecture
- AndroidArchitectureUILayer
- AndroidArchitectureDomainLayer
- AndroidArchitectureDataLayer
+ - AndroidArchitectureStateProduction
+ - AndroidArchitectureStateHolder
+ - JetpackComposeTesting
+ - JetpackComposeA11y
+ - JetpackComposeArchitectureAndState
+ - JetpackComposeDesignSystems
+ - JetpackComposeNavigation
+ - JetpackComposeAnimation
+solutions:
+ - Mobile
+ - Flow
+ - JetpackHilt
+ - JetpackDataStore
+ - JetpackRoom
+ - JetpackNavigation
+ - JetpackWorkManager
+ - JetpackLifecycle
languages: [Kotlin]
-solutions: [Mobile]
github: android/nowinandroid
level: ADVANCED
license: apache2
diff --git a/.run/Generate Demo Baseline Profile.run.xml b/.run/Generate Demo Baseline Profile.run.xml
new file mode 100644
index 000000000..68174ea4b
--- /dev/null
+++ b/.run/Generate Demo Baseline Profile.run.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ true
+ false
+
+
+
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index c4d60e202..b73bdef64 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -91,13 +91,13 @@ dependencies {
implementation(project(":core:model"))
implementation(project(":sync:work"))
- implementation(project(":sync:sync-test"))
androidTestImplementation(project(":core:testing"))
androidTestImplementation(project(":core:datastore-test"))
androidTestImplementation(project(":core:data-test"))
androidTestImplementation(project(":core:network"))
androidTestImplementation(libs.androidx.navigation.testing)
+ androidTestImplementation(kotlin("test"))
debugImplementation(libs.androidx.compose.ui.testManifest)
implementation(libs.accompanist.systemuicontroller)
diff --git a/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt b/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt
index cfda9c0d9..8e0d65636 100644
--- a/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt
+++ b/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt
@@ -31,13 +31,13 @@ import androidx.navigation.compose.composable
import androidx.navigation.createGraph
import androidx.navigation.testing.TestNavHostController
import com.google.samples.apps.nowinandroid.core.testing.util.TestNetworkMonitor
+import kotlin.test.assertEquals
+import kotlin.test.assertFalse
+import kotlin.test.assertTrue
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch
import kotlinx.coroutines.test.UnconfinedTestDispatcher
import kotlinx.coroutines.test.runTest
-import org.junit.Assert.assertEquals
-import org.junit.Assert.assertFalse
-import org.junit.Assert.assertTrue
import org.junit.Rule
import org.junit.Test
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 4287a5fb9..5c3b889d2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -32,8 +32,7 @@
+ android:exported="true">
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index ba503b90d..47ca6df06 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -15,12 +15,6 @@
limitations under the License.
-->
- #FFBB86FC
- #FF6200EE
- #FF3700B3
- #FF03DAC5
- #FF018786
-
#4D000000
diff --git a/benchmark/build.gradle.kts b/benchmarks/build.gradle.kts
similarity index 92%
rename from benchmark/build.gradle.kts
rename to benchmarks/build.gradle.kts
index 931fd6d00..3271250dd 100644
--- a/benchmark/build.gradle.kts
+++ b/benchmarks/build.gradle.kts
@@ -21,7 +21,7 @@ plugins {
}
android {
- namespace = "com.google.samples.apps.nowinandroid.benchmark"
+ namespace = "com.google.samples.apps.nowinandroid.benchmarks"
defaultConfig {
minSdk = 23
@@ -55,9 +55,9 @@ android {
testOptions {
managedDevices {
devices {
- create("pixel5Api30") {
- device = "Pixel 5"
- apiLevel = 30
+ create("pixel6Api31") {
+ device = "Pixel 6"
+ apiLevel = 31
systemImageSource = "aosp"
}
}
diff --git a/benchmark/src/main/AndroidManifest.xml b/benchmarks/src/main/AndroidManifest.xml
similarity index 100%
rename from benchmark/src/main/AndroidManifest.xml
rename to benchmarks/src/main/AndroidManifest.xml
diff --git a/benchmark/src/main/java/com/google/samples/apps/nowinandroid/Utils.kt b/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/Utils.kt
similarity index 68%
rename from benchmark/src/main/java/com/google/samples/apps/nowinandroid/Utils.kt
rename to benchmarks/src/main/java/com/google/samples/apps/nowinandroid/Utils.kt
index 41f817c8d..ffb3da23c 100644
--- a/benchmark/src/main/java/com/google/samples/apps/nowinandroid/Utils.kt
+++ b/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/Utils.kt
@@ -16,10 +16,16 @@
package com.google.samples.apps.nowinandroid
-import com.google.samples.apps.nowinandroid.benchmark.BuildConfig
+import com.google.samples.apps.nowinandroid.benchmarks.BuildConfig
/**
* Convenience parameter to use proper package name with regards to build type and build flavor.
*/
-const val PACKAGE_NAME =
- "com.google.samples.apps.nowinandroid.${BuildConfig.FLAVOR}.${BuildConfig.BUILD_TYPE}"
+val PACKAGE_NAME = StringBuilder("com.google.samples.apps.nowinandroid").apply {
+ if (BuildConfig.FLAVOR != "prod") {
+ append(".${BuildConfig.FLAVOR}")
+ }
+ if (BuildConfig.BUILD_TYPE != "release") {
+ append(".${BuildConfig.BUILD_TYPE}")
+ }
+}.toString()
diff --git a/benchmark/src/main/java/com/google/samples/apps/nowinandroid/baselineprofile/BaselineProfileGenerator.kt b/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/baselineprofile/BaselineProfileGenerator.kt
similarity index 100%
rename from benchmark/src/main/java/com/google/samples/apps/nowinandroid/baselineprofile/BaselineProfileGenerator.kt
rename to benchmarks/src/main/java/com/google/samples/apps/nowinandroid/baselineprofile/BaselineProfileGenerator.kt
diff --git a/benchmark/src/main/java/com/google/samples/apps/nowinandroid/bookmarks/BookmarksActions.kt b/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/bookmarks/BookmarksActions.kt
similarity index 100%
rename from benchmark/src/main/java/com/google/samples/apps/nowinandroid/bookmarks/BookmarksActions.kt
rename to benchmarks/src/main/java/com/google/samples/apps/nowinandroid/bookmarks/BookmarksActions.kt
diff --git a/benchmark/src/main/java/com/google/samples/apps/nowinandroid/foryou/ForYouActions.kt b/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/foryou/ForYouActions.kt
similarity index 100%
rename from benchmark/src/main/java/com/google/samples/apps/nowinandroid/foryou/ForYouActions.kt
rename to benchmarks/src/main/java/com/google/samples/apps/nowinandroid/foryou/ForYouActions.kt
diff --git a/benchmark/src/main/java/com/google/samples/apps/nowinandroid/foryou/ScrollForYouFeedBenchmark.kt b/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/foryou/ScrollForYouFeedBenchmark.kt
similarity index 100%
rename from benchmark/src/main/java/com/google/samples/apps/nowinandroid/foryou/ScrollForYouFeedBenchmark.kt
rename to benchmarks/src/main/java/com/google/samples/apps/nowinandroid/foryou/ScrollForYouFeedBenchmark.kt
diff --git a/benchmark/src/main/java/com/google/samples/apps/nowinandroid/interests/InterestsActions.kt b/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/interests/InterestsActions.kt
similarity index 100%
rename from benchmark/src/main/java/com/google/samples/apps/nowinandroid/interests/InterestsActions.kt
rename to benchmarks/src/main/java/com/google/samples/apps/nowinandroid/interests/InterestsActions.kt
diff --git a/benchmark/src/main/java/com/google/samples/apps/nowinandroid/interests/TopicsScreenRecompositionBenchmark.kt b/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/interests/TopicsScreenRecompositionBenchmark.kt
similarity index 100%
rename from benchmark/src/main/java/com/google/samples/apps/nowinandroid/interests/TopicsScreenRecompositionBenchmark.kt
rename to benchmarks/src/main/java/com/google/samples/apps/nowinandroid/interests/TopicsScreenRecompositionBenchmark.kt
diff --git a/benchmark/src/main/java/com/google/samples/apps/nowinandroid/startup/StartupBenchmark.kt b/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/startup/StartupBenchmark.kt
similarity index 100%
rename from benchmark/src/main/java/com/google/samples/apps/nowinandroid/startup/StartupBenchmark.kt
rename to benchmarks/src/main/java/com/google/samples/apps/nowinandroid/startup/StartupBenchmark.kt
diff --git a/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt
index 110c5ade0..a637b78c0 100644
--- a/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt
+++ b/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt
@@ -21,6 +21,7 @@ import org.gradle.api.artifacts.VersionCatalogsExtension
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.dependencies
import org.gradle.kotlin.dsl.getByType
+import org.gradle.kotlin.dsl.kotlin
class AndroidFeatureConventionPlugin : Plugin {
override fun apply(target: Project) {
@@ -46,7 +47,9 @@ class AndroidFeatureConventionPlugin : Plugin {
add("implementation", project(":core:common"))
add("implementation", project(":core:domain"))
+ add("testImplementation", kotlin("test"))
add("testImplementation", project(":core:testing"))
+ add("androidTestImplementation", kotlin("test"))
add("androidTestImplementation", project(":core:testing"))
add("implementation", libs.findLibrary("coil.kt").get())
diff --git a/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt
index 4bcd039f3..f7d6d184a 100644
--- a/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt
+++ b/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt
@@ -26,6 +26,7 @@ import org.gradle.api.artifacts.VersionCatalogsExtension
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.dependencies
import org.gradle.kotlin.dsl.getByType
+import org.gradle.kotlin.dsl.kotlin
class AndroidLibraryConventionPlugin : Plugin {
override fun apply(target: Project) {
@@ -51,6 +52,10 @@ class AndroidLibraryConventionPlugin : Plugin {
force("org.objenesis:objenesis:2.6")
}
}
+ dependencies {
+ add("androidTestImplementation", kotlin("test"))
+ add("testImplementation", kotlin("test"))
+ }
}
}
}
\ No newline at end of file
diff --git a/core/common/src/test/java/com/google/samples/apps/nowinandroid/core/result/ResultKtTest.kt b/core/common/src/test/java/com/google/samples/apps/nowinandroid/core/result/ResultKtTest.kt
index 964ac2ab5..90852c7c5 100644
--- a/core/common/src/test/java/com/google/samples/apps/nowinandroid/core/result/ResultKtTest.kt
+++ b/core/common/src/test/java/com/google/samples/apps/nowinandroid/core/result/ResultKtTest.kt
@@ -17,9 +17,9 @@
package com.google.samples.apps.nowinandroid.core.result
import app.cash.turbine.test
+import kotlin.test.assertEquals
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.test.runTest
-import org.junit.Assert.assertEquals
import org.junit.Test
class ResultKtTest {
diff --git a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/model/NetworkEntityKtTest.kt b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/model/NetworkEntityKtTest.kt
index c910d2c79..035d72801 100644
--- a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/model/NetworkEntityKtTest.kt
+++ b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/model/NetworkEntityKtTest.kt
@@ -21,8 +21,8 @@ import com.google.samples.apps.nowinandroid.core.network.model.NetworkAuthor
import com.google.samples.apps.nowinandroid.core.network.model.NetworkNewsResource
import com.google.samples.apps.nowinandroid.core.network.model.NetworkNewsResourceExpanded
import com.google.samples.apps.nowinandroid.core.network.model.NetworkTopic
+import kotlin.test.assertEquals
import kotlinx.datetime.Instant
-import org.junit.Assert.assertEquals
import org.junit.Test
class NetworkEntityKtTest {
diff --git a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepositoryTest.kt b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepositoryTest.kt
index 61c5fb809..ea7e9c4ba 100644
--- a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepositoryTest.kt
+++ b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepositoryTest.kt
@@ -29,9 +29,9 @@ import com.google.samples.apps.nowinandroid.core.datastore.test.testUserPreferen
import com.google.samples.apps.nowinandroid.core.model.data.Author
import com.google.samples.apps.nowinandroid.core.network.model.NetworkAuthor
import com.google.samples.apps.nowinandroid.core.network.model.NetworkChangeList
+import kotlin.test.assertEquals
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.test.runTest
-import org.junit.Assert
import org.junit.Before
import org.junit.Rule
import org.junit.Test
@@ -68,7 +68,7 @@ class OfflineFirstAuthorsRepositoryTest {
@Test
fun offlineFirstAuthorsRepository_Authors_stream_is_backed_by_Authors_dao() =
runTest {
- Assert.assertEquals(
+ assertEquals(
authorDao.getAuthorEntitiesStream()
.first()
.map(AuthorEntity::asExternalModel),
@@ -88,13 +88,13 @@ class OfflineFirstAuthorsRepositoryTest {
val dbAuthors = authorDao.getAuthorEntitiesStream()
.first()
- Assert.assertEquals(
+ assertEquals(
networkAuthors.map(AuthorEntity::id),
dbAuthors.map(AuthorEntity::id)
)
// After sync version should be updated
- Assert.assertEquals(
+ assertEquals(
network.latestChangeListVersion(CollectionType.Authors),
synchronizer.getChangeListVersions().authorVersion
)
@@ -125,13 +125,13 @@ class OfflineFirstAuthorsRepositoryTest {
val db = authorDao.getAuthorEntitiesStream()
.first()
- Assert.assertEquals(
+ assertEquals(
network.map(AuthorEntity::id),
db.map(AuthorEntity::id)
)
// After sync version should be updated
- Assert.assertEquals(
+ assertEquals(
changeList.last().changeListVersion,
synchronizer.getChangeListVersions().authorVersion
)
@@ -166,13 +166,13 @@ class OfflineFirstAuthorsRepositoryTest {
.map(AuthorEntity::asExternalModel)
// Assert that items marked deleted on the network have been deleted locally
- Assert.assertEquals(
+ assertEquals(
networkAuthors.map(Author::id) - deletedItems,
dbAuthors.map(Author::id)
)
// After sync version should be updated
- Assert.assertEquals(
+ assertEquals(
network.latestChangeListVersion(CollectionType.Authors),
synchronizer.getChangeListVersions().authorVersion
)
diff --git a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepositoryTest.kt b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepositoryTest.kt
index 4429f1021..78fcac0f2 100644
--- a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepositoryTest.kt
+++ b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepositoryTest.kt
@@ -39,9 +39,9 @@ import com.google.samples.apps.nowinandroid.core.datastore.test.testUserPreferen
import com.google.samples.apps.nowinandroid.core.model.data.NewsResource
import com.google.samples.apps.nowinandroid.core.network.model.NetworkChangeList
import com.google.samples.apps.nowinandroid.core.network.model.NetworkNewsResource
+import kotlin.test.assertEquals
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.test.runTest
-import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Rule
import org.junit.Test
@@ -112,7 +112,7 @@ class OfflineFirstNewsRepositoryTest {
)
assertEquals(
- emptyList(),
+ emptyList(),
subject.getNewsResourcesStream(
filterTopicIds = nonPresentInterestsIds,
)
@@ -136,7 +136,7 @@ class OfflineFirstNewsRepositoryTest {
)
assertEquals(
- emptyList(),
+ emptyList(),
subject.getNewsResourcesStream(
filterAuthorIds = nonPresentInterestsIds
)
diff --git a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepositoryTest.kt b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepositoryTest.kt
index 48570d5f0..2514b07cb 100644
--- a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepositoryTest.kt
+++ b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepositoryTest.kt
@@ -28,9 +28,9 @@ import com.google.samples.apps.nowinandroid.core.datastore.NiaPreferencesDataSou
import com.google.samples.apps.nowinandroid.core.datastore.test.testUserPreferencesDataStore
import com.google.samples.apps.nowinandroid.core.model.data.Topic
import com.google.samples.apps.nowinandroid.core.network.model.NetworkTopic
+import kotlin.test.assertEquals
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.test.runTest
-import org.junit.Assert
import org.junit.Before
import org.junit.Rule
import org.junit.Test
@@ -69,7 +69,7 @@ class OfflineFirstTopicsRepositoryTest {
@Test
fun offlineFirstTopicsRepository_topics_stream_is_backed_by_topics_dao() =
runTest {
- Assert.assertEquals(
+ assertEquals(
topicDao.getTopicEntitiesStream()
.first()
.map(TopicEntity::asExternalModel),
@@ -89,13 +89,13 @@ class OfflineFirstTopicsRepositoryTest {
val dbTopics = topicDao.getTopicEntitiesStream()
.first()
- Assert.assertEquals(
+ assertEquals(
networkTopics.map(TopicEntity::id),
dbTopics.map(TopicEntity::id)
)
// After sync version should be updated
- Assert.assertEquals(
+ assertEquals(
network.latestChangeListVersion(CollectionType.Topics),
synchronizer.getChangeListVersions().topicVersion
)
@@ -119,13 +119,13 @@ class OfflineFirstTopicsRepositoryTest {
val dbTopics = topicDao.getTopicEntitiesStream()
.first()
- Assert.assertEquals(
+ assertEquals(
networkTopics.map(TopicEntity::id),
dbTopics.map(TopicEntity::id)
)
// After sync version should be updated
- Assert.assertEquals(
+ assertEquals(
network.latestChangeListVersion(CollectionType.Topics),
synchronizer.getChangeListVersions().topicVersion
)
@@ -160,13 +160,13 @@ class OfflineFirstTopicsRepositoryTest {
.map(TopicEntity::asExternalModel)
// Assert that items marked deleted on the network have been deleted locally
- Assert.assertEquals(
+ assertEquals(
networkTopics.map(Topic::id) - deletedItems,
dbTopics.map(Topic::id)
)
// After sync version should be updated
- Assert.assertEquals(
+ assertEquals(
network.latestChangeListVersion(CollectionType.Topics),
synchronizer.getChangeListVersions().topicVersion
)
diff --git a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepositoryTest.kt b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepositoryTest.kt
index c1d740602..63aadc7bf 100644
--- a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepositoryTest.kt
+++ b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepositoryTest.kt
@@ -21,10 +21,12 @@ import com.google.samples.apps.nowinandroid.core.datastore.test.testUserPreferen
import com.google.samples.apps.nowinandroid.core.model.data.DarkThemeConfig
import com.google.samples.apps.nowinandroid.core.model.data.ThemeBrand
import com.google.samples.apps.nowinandroid.core.model.data.UserData
+import kotlin.test.assertEquals
+import kotlin.test.assertFalse
+import kotlin.test.assertTrue
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.test.runTest
-import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Rule
import org.junit.Test
@@ -194,9 +196,9 @@ class OfflineFirstUserDataRepositoryTest {
runTest {
subject.setFollowedTopicIds(setOf("1"))
subject.setShouldHideOnboarding(true)
- assertEquals(true, subject.userDataStream.first().shouldHideOnboarding)
+ assertTrue(subject.userDataStream.first().shouldHideOnboarding)
subject.setFollowedTopicIds(emptySet())
- assertEquals(false, subject.userDataStream.first().shouldHideOnboarding)
+ assertFalse(subject.userDataStream.first().shouldHideOnboarding)
}
}
diff --git a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/database/model/PopulatedNewsResourceKtTest.kt b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/database/model/PopulatedNewsResourceKtTest.kt
index 1bc89d1f4..504277e23 100644
--- a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/database/model/PopulatedNewsResourceKtTest.kt
+++ b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/database/model/PopulatedNewsResourceKtTest.kt
@@ -20,8 +20,8 @@ import com.google.samples.apps.nowinandroid.core.model.data.Author
import com.google.samples.apps.nowinandroid.core.model.data.NewsResource
import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType.Video
import com.google.samples.apps.nowinandroid.core.model.data.Topic
+import kotlin.test.assertEquals
import kotlinx.datetime.Instant
-import org.junit.Assert.assertEquals
import org.junit.Test
class PopulatedNewsResourceKtTest {
diff --git a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/database/util/NewsResourceTypeConverterTest.kt b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/database/util/NewsResourceTypeConverterTest.kt
index 4a52bd5b7..37a25dc7e 100644
--- a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/database/util/NewsResourceTypeConverterTest.kt
+++ b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/database/util/NewsResourceTypeConverterTest.kt
@@ -17,7 +17,7 @@
package com.google.samples.apps.nowinandroid.core.database.util
import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType
-import org.junit.Assert.assertEquals
+import kotlin.test.assertEquals
import org.junit.Test
class NewsResourceTypeConverterTest {
diff --git a/core/database/src/androidTest/java/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDaoTest.kt b/core/database/src/androidTest/java/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDaoTest.kt
index 3c6557a2b..017704381 100644
--- a/core/database/src/androidTest/java/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDaoTest.kt
+++ b/core/database/src/androidTest/java/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDaoTest.kt
@@ -27,10 +27,10 @@ import com.google.samples.apps.nowinandroid.core.database.model.NewsResourceTopi
import com.google.samples.apps.nowinandroid.core.database.model.TopicEntity
import com.google.samples.apps.nowinandroid.core.database.model.asExternalModel
import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType
+import kotlin.test.assertEquals
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.test.runTest
import kotlinx.datetime.Instant
-import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Test
diff --git a/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/IntToStringIdsMigrationTest.kt b/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/IntToStringIdsMigrationTest.kt
index 89035dc91..e82f74b52 100644
--- a/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/IntToStringIdsMigrationTest.kt
+++ b/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/IntToStringIdsMigrationTest.kt
@@ -16,9 +16,9 @@
package com.google.samples.apps.nowinandroid.core.datastore
+import kotlin.test.assertEquals
+import kotlin.test.assertTrue
import kotlinx.coroutines.test.runTest
-import org.junit.Assert.assertEquals
-import org.junit.Assert.assertTrue
import org.junit.Test
/**
diff --git a/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/ListToMapMigrationTest.kt b/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/ListToMapMigrationTest.kt
index 6fc06f585..c2fdf4f55 100644
--- a/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/ListToMapMigrationTest.kt
+++ b/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/ListToMapMigrationTest.kt
@@ -16,8 +16,9 @@
package com.google.samples.apps.nowinandroid.core.datastore
+import kotlin.test.assertEquals
+import kotlin.test.assertTrue
import kotlinx.coroutines.test.runTest
-import org.junit.Assert
import org.junit.Test
class ListToMapMigrationTest {
@@ -29,7 +30,7 @@ class ListToMapMigrationTest {
deprecatedFollowedTopicIds.addAll(listOf("1", "2", "3"))
}
// Assert that there are no topic ids in the map yet
- Assert.assertEquals(
+ assertEquals(
emptyMap(),
preMigrationUserPreferences.followedTopicIdsMap
)
@@ -39,13 +40,13 @@ class ListToMapMigrationTest {
ListToMapMigration.migrate(preMigrationUserPreferences)
// Assert the deprecated topic ids have been migrated to the topic ids map
- Assert.assertEquals(
+ assertEquals(
mapOf("1" to true, "2" to true, "3" to true),
postMigrationUserPreferences.followedTopicIdsMap
)
// Assert that the migration has been marked complete
- Assert.assertTrue(postMigrationUserPreferences.hasDoneListToMapMigration)
+ assertTrue(postMigrationUserPreferences.hasDoneListToMapMigration)
}
@Test
@@ -55,7 +56,7 @@ class ListToMapMigrationTest {
deprecatedFollowedAuthorIds.addAll(listOf("4", "5", "6"))
}
// Assert that there are no author ids in the map yet
- Assert.assertEquals(
+ assertEquals(
emptyMap(),
preMigrationUserPreferences.followedAuthorIdsMap
)
@@ -65,13 +66,13 @@ class ListToMapMigrationTest {
ListToMapMigration.migrate(preMigrationUserPreferences)
// Assert the deprecated author ids have been migrated to the author ids map
- Assert.assertEquals(
+ assertEquals(
mapOf("4" to true, "5" to true, "6" to true),
postMigrationUserPreferences.followedAuthorIdsMap
)
// Assert that the migration has been marked complete
- Assert.assertTrue(postMigrationUserPreferences.hasDoneListToMapMigration)
+ assertTrue(postMigrationUserPreferences.hasDoneListToMapMigration)
}
@Test
@@ -81,7 +82,7 @@ class ListToMapMigrationTest {
deprecatedBookmarkedNewsResourceIds.addAll(listOf("7", "8", "9"))
}
// Assert that there are no bookmarks in the map yet
- Assert.assertEquals(
+ assertEquals(
emptyMap(),
preMigrationUserPreferences.bookmarkedNewsResourceIdsMap
)
@@ -91,12 +92,12 @@ class ListToMapMigrationTest {
ListToMapMigration.migrate(preMigrationUserPreferences)
// Assert the deprecated bookmarks have been migrated to the bookmarks map
- Assert.assertEquals(
+ assertEquals(
mapOf("7" to true, "8" to true, "9" to true),
postMigrationUserPreferences.bookmarkedNewsResourceIdsMap
)
// Assert that the migration has been marked complete
- Assert.assertTrue(postMigrationUserPreferences.hasDoneListToMapMigration)
+ assertTrue(postMigrationUserPreferences.hasDoneListToMapMigration)
}
}
diff --git a/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSourceTest.kt b/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSourceTest.kt
index d5e4be841..78759d0ce 100644
--- a/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSourceTest.kt
+++ b/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSourceTest.kt
@@ -17,9 +17,10 @@
package com.google.samples.apps.nowinandroid.core.datastore
import com.google.samples.apps.nowinandroid.core.datastore.test.testUserPreferencesDataStore
+import kotlin.test.assertFalse
+import kotlin.test.assertTrue
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.test.runTest
-import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Rule
import org.junit.Test
@@ -40,13 +41,13 @@ class NiaPreferencesDataSourceTest {
@Test
fun shouldHideOnboardingIsFalseByDefault() = runTest {
- assertEquals(false, subject.userDataStream.first().shouldHideOnboarding)
+ assertFalse(subject.userDataStream.first().shouldHideOnboarding)
}
@Test
fun userShouldHideOnboardingIsTrueWhenSet() = runTest {
subject.setShouldHideOnboarding(true)
- assertEquals(true, subject.userDataStream.first().shouldHideOnboarding)
+ assertTrue(subject.userDataStream.first().shouldHideOnboarding)
}
@Test
@@ -60,7 +61,7 @@ class NiaPreferencesDataSourceTest {
subject.toggleFollowedAuthorId("1", false)
// Then: onboarding should be shown again
- assertEquals(false, subject.userDataStream.first().shouldHideOnboarding)
+ assertFalse(subject.userDataStream.first().shouldHideOnboarding)
}
@Test
@@ -74,7 +75,7 @@ class NiaPreferencesDataSourceTest {
subject.toggleFollowedTopicId("1", false)
// Then: onboarding should be shown again
- assertEquals(false, subject.userDataStream.first().shouldHideOnboarding)
+ assertFalse(subject.userDataStream.first().shouldHideOnboarding)
}
@Test
@@ -88,7 +89,7 @@ class NiaPreferencesDataSourceTest {
subject.setFollowedAuthorIds(emptySet())
// Then: onboarding should be shown again
- assertEquals(false, subject.userDataStream.first().shouldHideOnboarding)
+ assertFalse(subject.userDataStream.first().shouldHideOnboarding)
}
@Test
@@ -102,7 +103,7 @@ class NiaPreferencesDataSourceTest {
subject.setFollowedTopicIds(emptySet())
// Then: onboarding should be shown again
- assertEquals(false, subject.userDataStream.first().shouldHideOnboarding)
+ assertFalse(subject.userDataStream.first().shouldHideOnboarding)
}
@Test
@@ -117,7 +118,7 @@ class NiaPreferencesDataSourceTest {
subject.setFollowedTopicIds(emptySet())
// Then: onboarding should still be dismissed
- assertEquals(true, subject.userDataStream.first().shouldHideOnboarding)
+ assertTrue(subject.userDataStream.first().shouldHideOnboarding)
}
@Test
@@ -132,6 +133,6 @@ class NiaPreferencesDataSourceTest {
subject.setFollowedAuthorIds(emptySet())
// Then: onboarding should still be dismissed
- assertEquals(true, subject.userDataStream.first().shouldHideOnboarding)
+ assertTrue(subject.userDataStream.first().shouldHideOnboarding)
}
}
diff --git a/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/UserPreferencesSerializerTest.kt b/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/UserPreferencesSerializerTest.kt
index cf3fcf338..1b10c5672 100644
--- a/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/UserPreferencesSerializerTest.kt
+++ b/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/UserPreferencesSerializerTest.kt
@@ -19,8 +19,8 @@ package com.google.samples.apps.nowinandroid.core.datastore
import androidx.datastore.core.CorruptionException
import java.io.ByteArrayInputStream
import java.io.ByteArrayOutputStream
+import kotlin.test.assertEquals
import kotlinx.coroutines.test.runTest
-import org.junit.Assert.assertEquals
import org.junit.Test
class UserPreferencesSerializerTest {
diff --git a/core/designsystem/src/androidTest/java/com/google/samples/apps/nowinandroid/core/designsystem/ThemeTest.kt b/core/designsystem/src/androidTest/java/com/google/samples/apps/nowinandroid/core/designsystem/ThemeTest.kt
index 8710ba265..4bc69712d 100644
--- a/core/designsystem/src/androidTest/java/com/google/samples/apps/nowinandroid/core/designsystem/ThemeTest.kt
+++ b/core/designsystem/src/androidTest/java/com/google/samples/apps/nowinandroid/core/designsystem/ThemeTest.kt
@@ -36,7 +36,7 @@ import com.google.samples.apps.nowinandroid.core.designsystem.theme.LightDefault
import com.google.samples.apps.nowinandroid.core.designsystem.theme.LocalBackgroundTheme
import com.google.samples.apps.nowinandroid.core.designsystem.theme.LocalGradientColors
import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme
-import org.junit.Assert.assertEquals
+import kotlin.test.assertEquals
import org.junit.Rule
import org.junit.Test
diff --git a/core/domain/src/test/java/com/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsStreamUseCaseTest.kt b/core/domain/src/test/java/com/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsStreamUseCaseTest.kt
index 101590605..a3fff0d20 100644
--- a/core/domain/src/test/java/com/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsStreamUseCaseTest.kt
+++ b/core/domain/src/test/java/com/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsStreamUseCaseTest.kt
@@ -22,9 +22,9 @@ import com.google.samples.apps.nowinandroid.core.model.data.Topic
import com.google.samples.apps.nowinandroid.core.testing.repository.TestTopicsRepository
import com.google.samples.apps.nowinandroid.core.testing.repository.TestUserDataRepository
import com.google.samples.apps.nowinandroid.core.testing.util.MainDispatcherRule
+import kotlin.test.assertEquals
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.test.runTest
-import org.junit.Assert.assertEquals
import org.junit.Rule
import org.junit.Test
diff --git a/core/domain/src/test/java/com/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesStreamUseCaseTest.kt b/core/domain/src/test/java/com/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesStreamUseCaseTest.kt
index c8fa5b949..062fb4dc2 100644
--- a/core/domain/src/test/java/com/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesStreamUseCaseTest.kt
+++ b/core/domain/src/test/java/com/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesStreamUseCaseTest.kt
@@ -24,10 +24,10 @@ import com.google.samples.apps.nowinandroid.core.model.data.Topic
import com.google.samples.apps.nowinandroid.core.testing.repository.TestNewsRepository
import com.google.samples.apps.nowinandroid.core.testing.repository.TestUserDataRepository
import com.google.samples.apps.nowinandroid.core.testing.util.MainDispatcherRule
+import kotlin.test.assertEquals
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.test.runTest
import kotlinx.datetime.Instant
-import org.junit.Assert.assertEquals
import org.junit.Rule
import org.junit.Test
diff --git a/core/domain/src/test/java/com/google/samples/apps/nowinandroid/core/domain/GetSortedFollowableAuthorsStreamUseCaseTest.kt b/core/domain/src/test/java/com/google/samples/apps/nowinandroid/core/domain/GetSortedFollowableAuthorsStreamUseCaseTest.kt
index a08ca1b3a..24b88a88b 100644
--- a/core/domain/src/test/java/com/google/samples/apps/nowinandroid/core/domain/GetSortedFollowableAuthorsStreamUseCaseTest.kt
+++ b/core/domain/src/test/java/com/google/samples/apps/nowinandroid/core/domain/GetSortedFollowableAuthorsStreamUseCaseTest.kt
@@ -21,9 +21,9 @@ import com.google.samples.apps.nowinandroid.core.model.data.Author
import com.google.samples.apps.nowinandroid.core.testing.repository.TestAuthorsRepository
import com.google.samples.apps.nowinandroid.core.testing.repository.TestUserDataRepository
import com.google.samples.apps.nowinandroid.core.testing.util.MainDispatcherRule
+import kotlin.test.assertEquals
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.test.runTest
-import org.junit.Assert.assertEquals
import org.junit.Rule
import org.junit.Test
diff --git a/core/network/src/test/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSourceTest.kt b/core/network/src/test/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSourceTest.kt
index 2147b8cc4..3d7cbee4a 100644
--- a/core/network/src/test/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSourceTest.kt
+++ b/core/network/src/test/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSourceTest.kt
@@ -20,13 +20,13 @@ import JvmUnitTestFakeAssetManager
import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType.Codelab
import com.google.samples.apps.nowinandroid.core.network.model.NetworkNewsResource
import com.google.samples.apps.nowinandroid.core.network.model.NetworkTopic
+import kotlin.test.assertEquals
import kotlinx.coroutines.test.StandardTestDispatcher
import kotlinx.coroutines.test.runTest
import kotlinx.datetime.LocalDateTime
import kotlinx.datetime.TimeZone
import kotlinx.datetime.toInstant
import kotlinx.serialization.json.Json
-import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Test
diff --git a/core/network/src/test/java/com/google/samples/apps/nowinandroid/core/network/model/util/NewsResourceTypeSerializerTest.kt b/core/network/src/test/java/com/google/samples/apps/nowinandroid/core/network/model/util/NewsResourceTypeSerializerTest.kt
index c446c7ec3..191501a3d 100644
--- a/core/network/src/test/java/com/google/samples/apps/nowinandroid/core/network/model/util/NewsResourceTypeSerializerTest.kt
+++ b/core/network/src/test/java/com/google/samples/apps/nowinandroid/core/network/model/util/NewsResourceTypeSerializerTest.kt
@@ -17,8 +17,8 @@
package com.google.samples.apps.nowinandroid.core.network.model.util
import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType
+import kotlin.test.assertEquals
import kotlinx.serialization.json.Json
-import org.junit.Assert.assertEquals
import org.junit.Test
class NewsResourceTypeSerializerTest {
diff --git a/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCard.kt b/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCard.kt
index 36e5ff60a..16e86c192 100644
--- a/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCard.kt
+++ b/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCard.kt
@@ -156,12 +156,12 @@ fun NewsResourceAuthors(
authors: List
) {
if (authors.isNotEmpty()) {
- // Only display first author for now
- val author = authors[0]
+ // display all authors
+ val authorNameFormatted =
+ authors.joinToString(separator = ", ") { author -> author.name }
+ .uppercase(Locale.getDefault())
- val authorNameFormatted = author.name.uppercase(Locale.getDefault())
-
- val authorImageUrl = author.imageUrl
+ val authorImageUrl = authors[0].imageUrl
val authorImageModifier = Modifier
.clip(CircleShape)
diff --git a/docs/images/screenshots.png b/docs/images/screenshots.png
index 7319fd6d7..92f8b3679 100644
Binary files a/docs/images/screenshots.png and b/docs/images/screenshots.png differ
diff --git a/feature/author/src/test/java/com/google/samples/apps/nowinandroid/feature/author/AuthorViewModelTest.kt b/feature/author/src/test/java/com/google/samples/apps/nowinandroid/feature/author/AuthorViewModelTest.kt
index aac9617a4..92164ae54 100644
--- a/feature/author/src/test/java/com/google/samples/apps/nowinandroid/feature/author/AuthorViewModelTest.kt
+++ b/feature/author/src/test/java/com/google/samples/apps/nowinandroid/feature/author/AuthorViewModelTest.kt
@@ -28,6 +28,9 @@ import com.google.samples.apps.nowinandroid.core.testing.repository.TestNewsRepo
import com.google.samples.apps.nowinandroid.core.testing.repository.TestUserDataRepository
import com.google.samples.apps.nowinandroid.core.testing.util.MainDispatcherRule
import com.google.samples.apps.nowinandroid.feature.author.navigation.authorIdArg
+import kotlin.test.assertEquals
+import kotlin.test.assertIs
+import kotlin.test.assertTrue
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.first
@@ -35,8 +38,6 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.test.UnconfinedTestDispatcher
import kotlinx.coroutines.test.runTest
import kotlinx.datetime.Instant
-import org.junit.Assert.assertEquals
-import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Rule
import org.junit.Test
@@ -83,15 +84,14 @@ class AuthorViewModelTest {
userDataRepository.setFollowedAuthorIds(setOf(testInputAuthors[1].author.id))
val item = viewModel.authorUiState.value
- assertTrue(item is AuthorUiState.Success)
+ assertIs(item)
- val successAuthorUiState = item as AuthorUiState.Success
val authorFromRepository = authorsRepository.getAuthorStream(
id = testInputAuthors[0].author.id
).first()
- successAuthorUiState.followableAuthor.author
- assertEquals(authorFromRepository, successAuthorUiState.followableAuthor.author)
+ item.followableAuthor.author
+ assertEquals(authorFromRepository, item.followableAuthor.author)
collectJob.cancel()
}
@@ -132,8 +132,8 @@ class AuthorViewModelTest {
val authorState = viewModel.authorUiState.value
val newsUiState = viewModel.newsUiState.value
- assertTrue(authorState is AuthorUiState.Success)
- assertTrue(newsUiState is NewsUiState.Loading)
+ assertIs(authorState)
+ assertIs(newsUiState)
collectJob.cancel()
}
@@ -155,8 +155,8 @@ class AuthorViewModelTest {
val authorState = viewModel.authorUiState.value
val newsUiState = viewModel.newsUiState.value
- assertTrue(authorState is AuthorUiState.Success)
- assertTrue(newsUiState is NewsUiState.Success)
+ assertIs(authorState)
+ assertIs(newsUiState)
collectJob.cancel()
}
diff --git a/feature/bookmarks/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreenTest.kt b/feature/bookmarks/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreenTest.kt
index f018be8c0..1dafc5c98 100644
--- a/feature/bookmarks/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreenTest.kt
+++ b/feature/bookmarks/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreenTest.kt
@@ -34,8 +34,8 @@ import androidx.compose.ui.test.performScrollToNode
import com.google.samples.apps.nowinandroid.core.domain.model.SaveableNewsResource
import com.google.samples.apps.nowinandroid.core.model.data.previewNewsResources
import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState
-import org.junit.Assert.assertEquals
-import org.junit.Assert.assertTrue
+import kotlin.test.assertEquals
+import kotlin.test.assertTrue
import org.junit.Rule
import org.junit.Test
diff --git a/feature/bookmarks/src/test/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModelTest.kt b/feature/bookmarks/src/test/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModelTest.kt
index 78d9801b1..03d04af75 100644
--- a/feature/bookmarks/src/test/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModelTest.kt
+++ b/feature/bookmarks/src/test/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModelTest.kt
@@ -23,12 +23,12 @@ import com.google.samples.apps.nowinandroid.core.testing.repository.TestUserData
import com.google.samples.apps.nowinandroid.core.testing.util.MainDispatcherRule
import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState.Loading
import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState.Success
+import kotlin.test.assertEquals
+import kotlin.test.assertIs
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch
import kotlinx.coroutines.test.UnconfinedTestDispatcher
import kotlinx.coroutines.test.runTest
-import org.junit.Assert.assertEquals
-import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Rule
import org.junit.Test
@@ -69,8 +69,8 @@ class BookmarksViewModelTest {
newsRepository.sendNewsResources(previewNewsResources)
userDataRepository.updateNewsResourceBookmark(previewNewsResources[0].id, true)
val item = viewModel.feedUiState.value
- assertTrue(item is Success)
- assertEquals((item as Success).feed.size, 1)
+ assertIs(item)
+ assertEquals(item.feed.size, 1)
collectJob.cancel()
}
@@ -86,8 +86,8 @@ class BookmarksViewModelTest {
viewModel.removeFromSavedResources(previewNewsResources[0].id)
// Verify list of saved resources is now empty
val item = viewModel.feedUiState.value
- assertTrue(item is Success)
- assertEquals((item as Success).feed.size, 0)
+ assertIs(item)
+ assertEquals(item.feed.size, 0)
collectJob.cancel()
}
diff --git a/feature/foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel.kt b/feature/foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel.kt
index c79c9d777..599bfd868 100644
--- a/feature/foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel.kt
+++ b/feature/foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel.kt
@@ -16,7 +16,6 @@
package com.google.samples.apps.nowinandroid.feature.foryou
-import androidx.compose.runtime.snapshotFlow
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.google.samples.apps.nowinandroid.core.data.repository.UserDataRepository
@@ -33,6 +32,7 @@ import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.flatMapLatest
+import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onStart
import kotlinx.coroutines.flow.stateIn
@@ -67,7 +67,7 @@ class ForYouViewModel @Inject constructor(
userData.followedAuthors.isEmpty() &&
userData.followedTopics.isEmpty()
) {
- snapshotFlow { NewsFeedUiState.Success(emptyList()) }
+ flowOf(NewsFeedUiState.Success(emptyList()))
} else {
getSaveableNewsResourcesStream(
filterTopicIds = userData.followedTopics,
diff --git a/feature/foryou/src/test/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelTest.kt b/feature/foryou/src/test/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelTest.kt
index 5f21f9d06..daeeb46c2 100644
--- a/feature/foryou/src/test/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelTest.kt
+++ b/feature/foryou/src/test/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelTest.kt
@@ -34,13 +34,13 @@ import com.google.samples.apps.nowinandroid.core.testing.util.MainDispatcherRule
import com.google.samples.apps.nowinandroid.core.testing.util.TestNetworkMonitor
import com.google.samples.apps.nowinandroid.core.testing.util.TestSyncStatusMonitor
import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState
+import kotlin.test.assertEquals
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch
import kotlinx.coroutines.test.UnconfinedTestDispatcher
import kotlinx.coroutines.test.advanceUntilIdle
import kotlinx.coroutines.test.runTest
import kotlinx.datetime.Instant
-import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Rule
import org.junit.Test
diff --git a/feature/interests/src/test/java/com/google/samples/apps/nowinandroid/interests/InterestsViewModelTest.kt b/feature/interests/src/test/java/com/google/samples/apps/nowinandroid/interests/InterestsViewModelTest.kt
index 6ecf3930a..aaac504d3 100644
--- a/feature/interests/src/test/java/com/google/samples/apps/nowinandroid/interests/InterestsViewModelTest.kt
+++ b/feature/interests/src/test/java/com/google/samples/apps/nowinandroid/interests/InterestsViewModelTest.kt
@@ -28,11 +28,11 @@ import com.google.samples.apps.nowinandroid.core.testing.repository.TestUserData
import com.google.samples.apps.nowinandroid.core.testing.util.MainDispatcherRule
import com.google.samples.apps.nowinandroid.feature.interests.InterestsUiState
import com.google.samples.apps.nowinandroid.feature.interests.InterestsViewModel
+import kotlin.test.assertEquals
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch
import kotlinx.coroutines.test.UnconfinedTestDispatcher
import kotlinx.coroutines.test.runTest
-import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Rule
import org.junit.Test
diff --git a/feature/settings/src/test/java/com/google/samples/apps/nowinandroid/feature/settings/SettingsViewModelTest.kt b/feature/settings/src/test/java/com/google/samples/apps/nowinandroid/feature/settings/SettingsViewModelTest.kt
index b9df2fafd..6d8cf8b13 100644
--- a/feature/settings/src/test/java/com/google/samples/apps/nowinandroid/feature/settings/SettingsViewModelTest.kt
+++ b/feature/settings/src/test/java/com/google/samples/apps/nowinandroid/feature/settings/SettingsViewModelTest.kt
@@ -22,7 +22,7 @@ import com.google.samples.apps.nowinandroid.core.testing.repository.TestUserData
import com.google.samples.apps.nowinandroid.core.testing.util.MainDispatcherRule
import com.google.samples.apps.nowinandroid.feature.settings.SettingsUiState.Loading
import com.google.samples.apps.nowinandroid.feature.settings.SettingsUiState.Success
-import junit.framework.Assert.assertEquals
+import kotlin.test.assertEquals
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch
import kotlinx.coroutines.test.UnconfinedTestDispatcher
diff --git a/feature/topic/src/test/java/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModelTest.kt b/feature/topic/src/test/java/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModelTest.kt
index b914856be..17d7b45ee 100644
--- a/feature/topic/src/test/java/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModelTest.kt
+++ b/feature/topic/src/test/java/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModelTest.kt
@@ -28,6 +28,8 @@ import com.google.samples.apps.nowinandroid.core.testing.repository.TestTopicsRe
import com.google.samples.apps.nowinandroid.core.testing.repository.TestUserDataRepository
import com.google.samples.apps.nowinandroid.core.testing.util.MainDispatcherRule
import com.google.samples.apps.nowinandroid.feature.topic.navigation.topicIdArg
+import kotlin.test.assertEquals
+import kotlin.test.assertIs
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.first
@@ -35,8 +37,6 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.test.UnconfinedTestDispatcher
import kotlinx.coroutines.test.runTest
import kotlinx.datetime.Instant
-import org.junit.Assert.assertEquals
-import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Rule
import org.junit.Test
@@ -77,14 +77,13 @@ class TopicViewModelTest {
topicsRepository.sendTopics(testInputTopics.map(FollowableTopic::topic))
userDataRepository.setFollowedTopicIds(setOf(testInputTopics[1].topic.id))
val item = viewModel.topicUiState.value
- assertTrue(item is TopicUiState.Success)
+ assertIs(item)
- val successTopicState = item as TopicUiState.Success
val topicFromRepository = topicsRepository.getTopic(
testInputTopics[0].topic.id
).first()
- assertEquals(topicFromRepository, successTopicState.followableTopic.topic)
+ assertEquals(topicFromRepository, item.followableTopic.topic)
collectJob.cancel()
}
@@ -119,8 +118,8 @@ class TopicViewModelTest {
val topicUiState = viewModel.topicUiState.value
val newsUiState = viewModel.newUiState.value
- assertTrue(topicUiState is TopicUiState.Success)
- assertTrue(newsUiState is NewsUiState.Loading)
+ assertIs(topicUiState)
+ assertIs(newsUiState)
collectJob.cancel()
}
@@ -141,8 +140,8 @@ class TopicViewModelTest {
val topicUiState = viewModel.topicUiState.value
val newsUiState = viewModel.newUiState.value
- assertTrue(topicUiState is TopicUiState.Success)
- assertTrue(newsUiState is NewsUiState.Success)
+ assertIs(topicUiState)
+ assertIs(newsUiState)
collectJob.cancel()
}
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 8d13d36d5..5892e277d 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -4,7 +4,7 @@ androidDesugarJdkLibs = "1.2.0"
androidGradlePlugin = "7.3.1"
androidxActivity = "1.6.1"
androidxAppCompat = "1.5.1"
-androidxComposeBom = "2022.10.00"
+androidxComposeBom = "2022.11.00"
androidxComposeCompiler = "1.3.2"
androidxComposeRuntimeTracing = "1.0.0-alpha01"
androidxCore = "1.9.0"
@@ -13,7 +13,7 @@ androidxDataStore = "1.0.0"
androidxEspresso = "3.5.0"
androidxHiltNavigationCompose = "1.0.0"
androidxLifecycle = "2.6.0-alpha03"
-androidxMacroBenchmark = "1.1.0"
+androidxMacroBenchmark = "1.1.1"
androidxNavigation = "2.5.3"
androidxMetrics = "1.0.0-alpha03"
androidxProfileinstaller = "1.2.0"
@@ -27,7 +27,7 @@ androidxTracing = "1.1.0"
androidxUiAutomator = "2.2.0"
androidxWork = "2.7.1"
coil = "2.2.2"
-hilt = "2.44"
+hilt = "2.44.2"
hiltExt = "1.0.0"
jacoco = "0.8.7"
junit4 = "4.13.2"
@@ -35,14 +35,14 @@ kotlin = "1.7.20"
kotlinxCoroutines = "1.6.4"
kotlinxDatetime = "0.4.0"
kotlinxSerializationJson = "1.4.1"
-ksp = "1.7.20-1.0.8"
+ksp = "1.7.21-1.0.8"
lint = "30.3.1"
okhttp = "4.10.0"
protobuf = "3.21.9"
protobufPlugin = "0.8.19"
retrofit = "2.9.0"
retrofitKotlinxSerializationJson = "0.8.0"
-room = "2.5.0-beta01"
+room = "2.5.0-beta02"
secrets = "2.0.1"
turbine = "0.12.1"
diff --git a/settings.gradle.kts b/settings.gradle.kts
index d8ff0162c..cfa31a150 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -33,7 +33,7 @@ dependencyResolutionManagement {
rootProject.name = "nowinandroid"
include(":app")
include(":app-nia-catalog")
-include(":benchmark")
+include(":benchmarks")
include(":core:common")
include(":core:data")
include(":core:data-test")
diff --git a/sync/README.md b/sync/README.md
index 5fb075605..b100e27ad 100644
--- a/sync/README.md
+++ b/sync/README.md
@@ -1,3 +1,3 @@
# :sync module
-
+
diff --git a/sync/work/src/androidTest/java/com/google/samples/apps/nowinandroid/sync/workers/SyncWorkerTest.kt b/sync/work/src/androidTest/java/com/google/samples/apps/nowinandroid/sync/workers/SyncWorkerTest.kt
index 3f3fa9d8e..4bcc19be8 100644
--- a/sync/work/src/androidTest/java/com/google/samples/apps/nowinandroid/sync/workers/SyncWorkerTest.kt
+++ b/sync/work/src/androidTest/java/com/google/samples/apps/nowinandroid/sync/workers/SyncWorkerTest.kt
@@ -25,7 +25,7 @@ import androidx.work.testing.SynchronousExecutor
import androidx.work.testing.WorkManagerTestInitHelper
import dagger.hilt.android.testing.HiltAndroidRule
import dagger.hilt.android.testing.HiltAndroidTest
-import org.junit.Assert.assertEquals
+import kotlin.test.assertEquals
import org.junit.Before
import org.junit.Rule
import org.junit.Test