Fix unit and UI tests. Apply spotless.

Change-Id: Iab75852a27a44309d349f84e65226911ab59fcd5
pull/1837/head
Don Turner 3 years ago
parent a25ad9c017
commit ed2df9c379

@ -21,12 +21,13 @@ import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType
import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType.Codelab import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType.Codelab
import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType.Unknown import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType.Unknown
import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType.Video import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType.Video
import com.google.samples.apps.nowinandroid.core.model.data.previewTopics
import kotlinx.datetime.Instant import kotlinx.datetime.Instant
import kotlinx.datetime.LocalDateTime import kotlinx.datetime.LocalDateTime
import kotlinx.datetime.TimeZone import kotlinx.datetime.TimeZone
import kotlinx.datetime.toInstant import kotlinx.datetime.toInstant
/* ktlint-disable max-line-length */
/** /**
* A [NewsResource] with the additional user information. * A [NewsResource] with the additional user information.
*/ */

@ -70,7 +70,8 @@ class GetUserNewsResourcesUseCaseTest {
isFollowed = false isFollowed = false
) )
}, },
true), true
),
UserNewsResource( UserNewsResource(
sampleNewsResources[1].id, sampleNewsResources[1].id,
sampleNewsResources[1].title, sampleNewsResources[1].title,
@ -85,7 +86,8 @@ class GetUserNewsResourcesUseCaseTest {
isFollowed = false isFollowed = false
) )
}, },
false), false
),
UserNewsResource( UserNewsResource(
sampleNewsResources[2].id, sampleNewsResources[2].id,
sampleNewsResources[2].title, sampleNewsResources[2].title,
@ -97,10 +99,11 @@ class GetUserNewsResourcesUseCaseTest {
sampleNewsResources[2].topics.map { topic -> sampleNewsResources[2].topics.map { topic ->
FollowableTopic( FollowableTopic(
topic = topic, topic = topic,
isFollowed = true isFollowed = false
) )
}, },
true), true
),
), ),
saveableNewsResources.first() saveableNewsResources.first()
) )
@ -120,7 +123,8 @@ class GetUserNewsResourcesUseCaseTest {
assertEquals( assertEquals(
sampleNewsResources sampleNewsResources
.filter { it.topics.contains(sampleTopic1) } .filter { it.topics.contains(sampleTopic1) }
.map { UserNewsResource( .map {
UserNewsResource(
id = it.id, id = it.id,
title = it.title, title = it.title,
content = it.content, content = it.content,
@ -134,7 +138,9 @@ class GetUserNewsResourcesUseCaseTest {
isFollowed = false isFollowed = false
) )
}, },
isSaved = false) }, isSaved = false
)
},
saveableNewsResources.first() saveableNewsResources.first()
) )
} }

@ -20,7 +20,7 @@ import androidx.activity.ComponentActivity
import androidx.compose.ui.test.assertIsDisplayed import androidx.compose.ui.test.assertIsDisplayed
import androidx.compose.ui.test.junit4.createAndroidComposeRule import androidx.compose.ui.test.junit4.createAndroidComposeRule
import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.onNodeWithText
import com.google.samples.apps.nowinandroid.core.model.data.previewNewsResources import com.google.samples.apps.nowinandroid.core.domain.model.previewUserNewsResources
import org.junit.Rule import org.junit.Rule
import org.junit.Test import org.junit.Test
@ -30,7 +30,7 @@ class NewsResourceCardTest {
@Test @Test
fun testMetaDataDisplay_withCodelabResource() { fun testMetaDataDisplay_withCodelabResource() {
val newsWithKnownResourceType = previewNewsResources[0] val newsWithKnownResourceType = previewUserNewsResources[0]
var dateFormatted = "" var dateFormatted = ""
composeTestRule.setContent { composeTestRule.setContent {
@ -57,7 +57,7 @@ class NewsResourceCardTest {
@Test @Test
fun testMetaDataDisplay_withUnknownResource() { fun testMetaDataDisplay_withUnknownResource() {
val newsWithUnknownResourceType = previewNewsResources[3] val newsWithUnknownResourceType = previewUserNewsResources[3]
var dateFormatted = "" var dateFormatted = ""
composeTestRule.setContent { composeTestRule.setContent {

@ -61,7 +61,6 @@ import com.google.samples.apps.nowinandroid.core.domain.model.UserNewsResource
import com.google.samples.apps.nowinandroid.core.domain.model.previewUserNewsResources import com.google.samples.apps.nowinandroid.core.domain.model.previewUserNewsResources
import com.google.samples.apps.nowinandroid.core.model.data.NewsResource import com.google.samples.apps.nowinandroid.core.model.data.NewsResource
import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType
import com.google.samples.apps.nowinandroid.core.model.data.previewNewsResources
import java.time.ZoneId import java.time.ZoneId
import java.time.format.DateTimeFormatter import java.time.format.DateTimeFormatter
import java.util.Locale import java.util.Locale

@ -31,8 +31,7 @@ import androidx.compose.ui.test.onNodeWithContentDescription
import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick import androidx.compose.ui.test.performClick
import androidx.compose.ui.test.performScrollToNode import androidx.compose.ui.test.performScrollToNode
import com.google.samples.apps.nowinandroid.core.domain.model.UserNewsResource import com.google.samples.apps.nowinandroid.core.domain.model.previewUserNewsResources
import com.google.samples.apps.nowinandroid.core.model.data.previewNewsResources
import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState
import kotlin.test.assertEquals import kotlin.test.assertEquals
import kotlin.test.assertTrue import kotlin.test.assertTrue
@ -70,8 +69,7 @@ class BookmarksScreenTest {
composeTestRule.setContent { composeTestRule.setContent {
BookmarksScreen( BookmarksScreen(
feedState = NewsFeedUiState.Success( feedState = NewsFeedUiState.Success(
previewNewsResources.take(2) previewUserNewsResources.take(2)
.map { UserNewsResource(it, true) }
), ),
removeFromBookmarks = { } removeFromBookmarks = { }
) )
@ -79,7 +77,7 @@ class BookmarksScreenTest {
composeTestRule composeTestRule
.onNodeWithText( .onNodeWithText(
previewNewsResources[0].title, previewUserNewsResources[0].title,
substring = true substring = true
) )
.assertExists() .assertExists()
@ -88,14 +86,14 @@ class BookmarksScreenTest {
composeTestRule.onNode(hasScrollToNodeAction()) composeTestRule.onNode(hasScrollToNodeAction())
.performScrollToNode( .performScrollToNode(
hasText( hasText(
previewNewsResources[1].title, previewUserNewsResources[1].title,
substring = true substring = true
) )
) )
composeTestRule composeTestRule
.onNodeWithText( .onNodeWithText(
previewNewsResources[1].title, previewUserNewsResources[1].title,
substring = true substring = true
) )
.assertExists() .assertExists()
@ -109,11 +107,10 @@ class BookmarksScreenTest {
composeTestRule.setContent { composeTestRule.setContent {
BookmarksScreen( BookmarksScreen(
feedState = NewsFeedUiState.Success( feedState = NewsFeedUiState.Success(
previewNewsResources.take(2) previewUserNewsResources.take(2)
.map { UserNewsResource(it, true) }
), ),
removeFromBookmarks = { newsResourceId -> removeFromBookmarks = { newsResourceId ->
assertEquals(previewNewsResources[0].id, newsResourceId) assertEquals(previewUserNewsResources[0].id, newsResourceId)
removeFromBookmarksCalled = true removeFromBookmarksCalled = true
} }
) )
@ -127,7 +124,7 @@ class BookmarksScreenTest {
).filter( ).filter(
hasAnyAncestor( hasAnyAncestor(
hasText( hasText(
previewNewsResources[0].title, previewUserNewsResources[0].title,
substring = true substring = true
) )
) )

@ -52,9 +52,7 @@ import androidx.lifecycle.compose.ExperimentalLifecycleComposeApi
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaLoadingWheel import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaLoadingWheel
import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme
import com.google.samples.apps.nowinandroid.core.domain.model.UserNewsResource
import com.google.samples.apps.nowinandroid.core.domain.model.previewUserNewsResources import com.google.samples.apps.nowinandroid.core.domain.model.previewUserNewsResources
import com.google.samples.apps.nowinandroid.core.model.data.previewNewsResources
import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState
import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState.Loading import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState.Loading
import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState.Success import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState.Success

@ -29,9 +29,8 @@ import androidx.compose.ui.test.onNodeWithContentDescription
import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performScrollToNode import androidx.compose.ui.test.performScrollToNode
import com.google.samples.apps.nowinandroid.core.domain.model.FollowableTopic import com.google.samples.apps.nowinandroid.core.domain.model.FollowableTopic
import com.google.samples.apps.nowinandroid.core.domain.model.UserNewsResource import com.google.samples.apps.nowinandroid.core.domain.model.previewUserNewsResources
import com.google.samples.apps.nowinandroid.core.model.data.Topic import com.google.samples.apps.nowinandroid.core.model.data.Topic
import com.google.samples.apps.nowinandroid.core.model.data.previewNewsResources
import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState
import org.junit.Rule import org.junit.Rule
import org.junit.Test import org.junit.Test
@ -225,9 +224,7 @@ class ForYouScreenTest {
isSyncing = false, isSyncing = false,
onboardingUiState = OnboardingUiState.NotShown, onboardingUiState = OnboardingUiState.NotShown,
feedState = NewsFeedUiState.Success( feedState = NewsFeedUiState.Success(
feed = previewNewsResources.map { feed = previewUserNewsResources
UserNewsResource(it, false)
}
), ),
onTopicCheckedChanged = { _, _ -> }, onTopicCheckedChanged = { _, _ -> },
saveFollowedTopics = {}, saveFollowedTopics = {},
@ -237,7 +234,7 @@ class ForYouScreenTest {
composeTestRule composeTestRule
.onNodeWithText( .onNodeWithText(
previewNewsResources[0].title, previewUserNewsResources[0].title,
substring = true substring = true
) )
.assertExists() .assertExists()
@ -246,14 +243,14 @@ class ForYouScreenTest {
composeTestRule.onNode(hasScrollToNodeAction()) composeTestRule.onNode(hasScrollToNodeAction())
.performScrollToNode( .performScrollToNode(
hasText( hasText(
previewNewsResources[1].title, previewUserNewsResources[1].title,
substring = true substring = true
) )
) )
composeTestRule composeTestRule
.onNodeWithText( .onNodeWithText(
previewNewsResources[1].title, previewUserNewsResources[1].title,
substring = true substring = true
) )
.assertExists() .assertExists()

@ -83,9 +83,7 @@ import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaOverl
import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons
import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme
import com.google.samples.apps.nowinandroid.core.domain.model.FollowableTopic import com.google.samples.apps.nowinandroid.core.domain.model.FollowableTopic
import com.google.samples.apps.nowinandroid.core.domain.model.UserNewsResource
import com.google.samples.apps.nowinandroid.core.domain.model.previewUserNewsResources import com.google.samples.apps.nowinandroid.core.domain.model.previewUserNewsResources
import com.google.samples.apps.nowinandroid.core.model.data.previewNewsResources
import com.google.samples.apps.nowinandroid.core.model.data.previewTopics import com.google.samples.apps.nowinandroid.core.model.data.previewTopics
import com.google.samples.apps.nowinandroid.core.ui.DevicePreviews import com.google.samples.apps.nowinandroid.core.ui.DevicePreviews
import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState

@ -263,7 +263,9 @@ class ForYouViewModelTest {
val collectJob2 = launch(UnconfinedTestDispatcher()) { viewModel.feedState.collect() } val collectJob2 = launch(UnconfinedTestDispatcher()) { viewModel.feedState.collect() }
topicsRepository.sendTopics(sampleTopics) topicsRepository.sendTopics(sampleTopics)
userDataRepository.setFollowedTopicIds(setOf("0", "1"))
val followedTopicIds = setOf("0", "1")
userDataRepository.setFollowedTopicIds(followedTopicIds)
viewModel.dismissOnboarding() viewModel.dismissOnboarding()
assertEquals( assertEquals(
@ -293,7 +295,7 @@ class ForYouViewModelTest {
topics = it.topics.map { topic -> topics = it.topics.map { topic ->
FollowableTopic( FollowableTopic(
topic = topic, topic = topic,
isFollowed = false isFollowed = followedTopicIds.contains(topic.id)
) )
}, },
isSaved = false isSaved = false
@ -319,41 +321,9 @@ class ForYouViewModelTest {
assertEquals( assertEquals(
OnboardingUiState.Shown( OnboardingUiState.Shown(
topics = listOf( topics = sampleTopics.map {
FollowableTopic( FollowableTopic(it, false)
topic = Topic( }
id = "0",
name = "Headlines",
shortDescription = "",
longDescription = "long description",
url = "URL",
imageUrl = "image URL",
),
isFollowed = false
),
FollowableTopic(
topic = Topic(
id = "1",
name = "UI",
shortDescription = "",
longDescription = "long description",
url = "URL",
imageUrl = "image URL",
),
isFollowed = false
),
FollowableTopic(
topic = Topic(
id = "2",
name = "Tools",
shortDescription = "",
longDescription = "long description",
url = "URL",
imageUrl = "image URL",
),
isFollowed = false
)
),
), ),
viewModel.onboardingUiState.value viewModel.onboardingUiState.value
) )
@ -364,45 +334,14 @@ class ForYouViewModelTest {
viewModel.feedState.value viewModel.feedState.value
) )
viewModel.updateTopicSelection("1", isChecked = true) val followedTopicId = sampleTopics[1].id
viewModel.updateTopicSelection(followedTopicId, isChecked = true)
assertEquals( assertEquals(
OnboardingUiState.Shown( OnboardingUiState.Shown(
topics = listOf( topics = sampleTopics.map {
FollowableTopic( FollowableTopic(it, it.id == followedTopicId)
topic = Topic( }
id = "0",
name = "Headlines",
shortDescription = "",
longDescription = "long description",
url = "URL",
imageUrl = "image URL",
),
isFollowed = false
),
FollowableTopic(
topic = Topic(
id = "1",
name = "UI",
shortDescription = "",
longDescription = "long description",
url = "URL",
imageUrl = "image URL",
),
isFollowed = true
),
FollowableTopic(
topic = Topic(
id = "2",
name = "Tools",
shortDescription = "",
longDescription = "long description",
url = "URL",
imageUrl = "image URL",
),
isFollowed = false
)
),
), ),
viewModel.onboardingUiState.value viewModel.onboardingUiState.value
) )
@ -420,7 +359,7 @@ class ForYouViewModelTest {
topics = sampleNewsResources[1].topics.map { topic -> topics = sampleNewsResources[1].topics.map { topic ->
FollowableTopic( FollowableTopic(
topic = topic, topic = topic,
isFollowed = false isFollowed = topic.id == followedTopicId
) )
}, },
isSaved = false isSaved = false
@ -436,7 +375,7 @@ class ForYouViewModelTest {
topics = sampleNewsResources[2].topics.map { topic -> topics = sampleNewsResources[2].topics.map { topic ->
FollowableTopic( FollowableTopic(
topic = topic, topic = topic,
isFollowed = false isFollowed = topic.id == followedTopicId
) )
}, },
isSaved = false isSaved = false
@ -520,8 +459,10 @@ class ForYouViewModelTest {
launch(UnconfinedTestDispatcher()) { viewModel.onboardingUiState.collect() } launch(UnconfinedTestDispatcher()) { viewModel.onboardingUiState.collect() }
val collectJob2 = launch(UnconfinedTestDispatcher()) { viewModel.feedState.collect() } val collectJob2 = launch(UnconfinedTestDispatcher()) { viewModel.feedState.collect() }
val followedTopicIds = setOf("1")
topicsRepository.sendTopics(sampleTopics) topicsRepository.sendTopics(sampleTopics)
userDataRepository.setFollowedTopicIds(setOf("1")) userDataRepository.setFollowedTopicIds(followedTopicIds)
userDataRepository.setShouldHideOnboarding(true) userDataRepository.setShouldHideOnboarding(true)
newsRepository.sendNewsResources(sampleNewsResources) newsRepository.sendNewsResources(sampleNewsResources)
viewModel.updateNewsResourceSaved("2", true) viewModel.updateNewsResourceSaved("2", true)
@ -544,7 +485,7 @@ class ForYouViewModelTest {
topics = sampleNewsResources[1].topics.map { topic -> topics = sampleNewsResources[1].topics.map { topic ->
FollowableTopic( FollowableTopic(
topic = topic, topic = topic,
isFollowed = false isFollowed = followedTopicIds.contains(topic.id)
) )
}, },
isSaved = true isSaved = true
@ -560,7 +501,7 @@ class ForYouViewModelTest {
topics = sampleNewsResources[2].topics.map { topic -> topics = sampleNewsResources[2].topics.map { topic ->
FollowableTopic( FollowableTopic(
topic = topic, topic = topic,
isFollowed = false isFollowed = followedTopicIds.contains(topic.id)
) )
}, },
isSaved = false isSaved = false

@ -26,7 +26,6 @@ import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performScrollToNode import androidx.compose.ui.test.performScrollToNode
import com.google.samples.apps.nowinandroid.core.domain.model.FollowableTopic import com.google.samples.apps.nowinandroid.core.domain.model.FollowableTopic
import com.google.samples.apps.nowinandroid.core.domain.model.UserNewsResource import com.google.samples.apps.nowinandroid.core.domain.model.UserNewsResource
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.NewsResourceType.Video
import com.google.samples.apps.nowinandroid.core.model.data.Topic import com.google.samples.apps.nowinandroid.core.model.data.Topic
import kotlinx.datetime.Instant import kotlinx.datetime.Instant
@ -99,14 +98,7 @@ class TopicScreenTest {
composeTestRule.setContent { composeTestRule.setContent {
TopicScreen( TopicScreen(
topicUiState = TopicUiState.Loading, topicUiState = TopicUiState.Loading,
newsUiState = NewsUiState.Success( newsUiState = NewsUiState.Success(sampleUserNewsResources),
sampleNewsResources.mapIndexed { index, newsResource ->
UserNewsResource(
newsResource = newsResource,
isSaved = index % 2 == 0,
)
}
),
onBackClick = { }, onBackClick = { },
onFollowClick = { }, onFollowClick = { },
onBookmarkChanged = { _, _ -> }, onBookmarkChanged = { _, _ -> },
@ -126,12 +118,7 @@ class TopicScreenTest {
TopicScreen( TopicScreen(
topicUiState = TopicUiState.Success(testTopic), topicUiState = TopicUiState.Success(testTopic),
newsUiState = NewsUiState.Success( newsUiState = NewsUiState.Success(
sampleNewsResources.mapIndexed { index, newsResource -> sampleUserNewsResources
UserNewsResource(
newsResource = newsResource,
isSaved = index % 2 == 0,
)
}
), ),
onBackClick = { }, onBackClick = { },
onFollowClick = { }, onFollowClick = { },
@ -143,7 +130,7 @@ class TopicScreenTest {
composeTestRule composeTestRule
.onAllNodes(hasScrollToNodeAction()) .onAllNodes(hasScrollToNodeAction())
.onFirst() .onFirst()
.performScrollToNode(hasText(sampleNewsResources.first().title)) .performScrollToNode(hasText(sampleUserNewsResources.first().title))
} }
} }
@ -188,8 +175,8 @@ private val testTopics = listOf(
) )
) )
private val sampleNewsResources = listOf( private val sampleUserNewsResources = listOf(
NewsResource( UserNewsResource(
id = "1", id = "1",
title = "Thanks for helping us reach 1M YouTube Subscribers", title = "Thanks for helping us reach 1M YouTube Subscribers",
content = "Thank you everyone for following the Now in Android series and everything the " + content = "Thank you everyone for following the Now in Android series and everything the " +
@ -201,14 +188,18 @@ private val sampleNewsResources = listOf(
publishDate = Instant.parse("2021-11-09T00:00:00.000Z"), publishDate = Instant.parse("2021-11-09T00:00:00.000Z"),
type = Video, type = Video,
topics = listOf( topics = listOf(
Topic( FollowableTopic(
topic = Topic(
id = "0", id = "0",
name = "Headlines", name = "Headlines",
shortDescription = "", shortDescription = "",
longDescription = TOPIC_DESC, longDescription = TOPIC_DESC,
url = "", url = "",
imageUrl = "" imageUrl = ""
),
isFollowed = false
) )
) ),
isSaved = true
) )
) )

@ -53,9 +53,7 @@ import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaLoadi
import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons
import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme
import com.google.samples.apps.nowinandroid.core.domain.model.FollowableTopic import com.google.samples.apps.nowinandroid.core.domain.model.FollowableTopic
import com.google.samples.apps.nowinandroid.core.domain.model.UserNewsResource
import com.google.samples.apps.nowinandroid.core.domain.model.previewUserNewsResources import com.google.samples.apps.nowinandroid.core.domain.model.previewUserNewsResources
import com.google.samples.apps.nowinandroid.core.model.data.previewNewsResources
import com.google.samples.apps.nowinandroid.core.model.data.previewTopics import com.google.samples.apps.nowinandroid.core.model.data.previewTopics
import com.google.samples.apps.nowinandroid.core.ui.DevicePreviews import com.google.samples.apps.nowinandroid.core.ui.DevicePreviews
import com.google.samples.apps.nowinandroid.core.ui.TrackScrollJank import com.google.samples.apps.nowinandroid.core.ui.TrackScrollJank

Loading…
Cancel
Save