Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,7 @@ class AppSettingsScreenTest {
appSettings = AppSettingsUiState(),
onAction = screenModel::onAction,
onNavigateBack = {},
onPrivacyClick = {},
isTopLevel = true,
onAdvancedClick = { advancedClicks += 1 },
)
Expand All @@ -203,6 +204,7 @@ class AppSettingsScreenTest {
appSettings = AppSettingsUiState(),
onAction = screenModel::onAction,
onNavigateBack = {},
onPrivacyClick = {},
isTopLevel = false,
onAdvancedClick = null,
)
Expand All @@ -226,6 +228,7 @@ class AppSettingsScreenTest {
appSettings = appSettings,
onAction = screenModel::onAction,
onNavigateBack = {},
onPrivacyClick = {},
)
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
package com.android.messaging.ui.appsettings.privacy.ui

import androidx.activity.ComponentActivity
import androidx.compose.ui.test.assertIsDisplayed
import androidx.compose.ui.test.assertIsOff
import androidx.compose.ui.test.isToggleable
import androidx.compose.ui.test.junit4.createAndroidComposeRule
import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick
import com.android.messaging.R
import com.android.messaging.ui.appsettings.general.model.AppSettingsUiState
import com.android.messaging.ui.appsettings.screen.SettingsScreenModel
import com.android.messaging.ui.appsettings.screen.model.SettingsAction as Action
import com.android.messaging.ui.core.AppTheme
import io.mockk.mockk
import io.mockk.verify
import org.junit.Before
import org.junit.Rule
import org.junit.Test

class PrivacySettingsScreenTest {

@get:Rule
val composeTestRule = createAndroidComposeRule<ComponentActivity>()

private lateinit var screenModel: SettingsScreenModel

@Before
fun setup() {
screenModel = mockk(relaxed = true)
}

@Test
fun youTubeLinkPreviewsToggle_displaysTitleSummaryAndDefaultsToOff() {
setContent()

val title = composeTestRule.activity.getString(
R.string.youtube_link_previews_pref_title,
)
val summary = composeTestRule.activity.getString(
R.string.youtube_link_previews_pref_summary,
)
composeTestRule.onNodeWithText(title).assertIsDisplayed()
composeTestRule.onNodeWithText(summary).assertIsDisplayed()
composeTestRule.onNode(isToggleable()).assertIsOff()
}

@Test
fun youTubeLinkPreviewsToggle_delegatesToScreenModel() {
setContent()

val title = composeTestRule.activity.getString(
R.string.youtube_link_previews_pref_title,
)
composeTestRule.onNodeWithText(title).performClick()

verify(exactly = 1) {
screenModel.onAction(Action.YouTubeLinkPreviewsChanged(true))
}
}

@Test
fun youTubeLinkPreviewsToggle_whenEnabled_delegatesDisable() {
setContent(
appSettings = AppSettingsUiState(youTubeLinkPreviewsEnabled = true),
)

val title = composeTestRule.activity.getString(
R.string.youtube_link_previews_pref_title,
)
composeTestRule.onNodeWithText(title).performClick()

verify(exactly = 1) {
screenModel.onAction(Action.YouTubeLinkPreviewsChanged(false))
}
}

private fun setContent(
appSettings: AppSettingsUiState = AppSettingsUiState(),
) {
composeTestRule.setContent {
AppTheme {
PrivacySettingsScreen(
appSettings = appSettings,
onAction = screenModel::onAction,
onNavigateBack = {},
)
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,7 @@ class ConversationMessageLinkLongClickTest {
canForwardMessage = true,
canResendMessage = false,
canSaveAttachments = false,
isYouTubePreviewEnabled = false,
mmsDownload = null,
mmsSubject = null,
protocol = ConversationMessageUiModel.Protocol.SMS,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,7 @@ internal abstract class BaseConversationMessageRenderingTest {
canForwardMessage = true,
canResendMessage = canResendMessage,
canSaveAttachments = canSaveAttachments,
isYouTubePreviewEnabled = false,
mmsDownload = mmsDownload,
mmsSubject = mmsSubject,
protocol = protocol,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,7 @@ internal abstract class BaseConversationScreenTest {
canForwardMessage = true,
canResendMessage = false,
canSaveAttachments = false,
isYouTubePreviewEnabled = false,
mmsDownload = null,
mmsSubject = null,
protocol = ConversationMessageUiModel.Protocol.SMS,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
import org.robolectric.RuntimeEnvironment

@OptIn(ExperimentalCoroutinesApi::class)
@RunWith(RobolectricTestRunner::class)
Expand Down Expand Up @@ -63,6 +64,12 @@ internal class AppSettingsRepositoryImplTest {
every { context.getString(R.string.send_sound_pref_key) } returns SEND_SOUND_PREF_KEY
every { context.getString(R.string.dump_sms_pref_key) } returns DUMP_SMS_PREF_KEY
every { context.getString(R.string.dump_mms_pref_key) } returns DUMP_MMS_PREF_KEY
every {
context.getString(R.string.youtube_link_previews_pref_key)
} returns YOUTUBE_LINK_PREVIEWS_PREF_KEY
every {
resources.getBoolean(R.bool.youtube_link_previews_pref_default)
} returns YOUTUBE_LINK_PREVIEWS_DEFAULT
every { resources.getBoolean(R.bool.send_sound_pref_default) } returns
SEND_SOUND_DEFAULT
every { resources.getBoolean(R.bool.dump_sms_pref_default) } returns DUMP_SMS_DEFAULT
Expand All @@ -83,6 +90,12 @@ internal class AppSettingsRepositoryImplTest {
every { appPrefs.getBoolean(SEND_SOUND_PREF_KEY, SEND_SOUND_DEFAULT) } returns false
every { appPrefs.getBoolean(DUMP_SMS_PREF_KEY, DUMP_SMS_DEFAULT) } returns true
every { appPrefs.getBoolean(DUMP_MMS_PREF_KEY, DUMP_MMS_DEFAULT) } returns false
every {
appPrefs.getBoolean(
YOUTUBE_LINK_PREVIEWS_PREF_KEY,
YOUTUBE_LINK_PREVIEWS_DEFAULT,
)
} returns true

val result = createRepository(
ioDispatcher = UnconfinedTestDispatcher(testScheduler),
Expand All @@ -91,11 +104,16 @@ internal class AppSettingsRepositoryImplTest {
assertTrue(result.isDefaultSmsApp)
assertEquals(DEFAULT_SMS_APP_LABEL, result.defaultSmsAppLabel)
assertFalse(result.sendSoundEnabled)
assertTrue(result.youTubeLinkPreviewsEnabled)
assertTrue(result.isDebugEnabled)
assertTrue(result.dumpSmsEnabled)
assertFalse(result.dumpMmsEnabled)
verify(exactly = 1) {
appPrefs.getBoolean(SEND_SOUND_PREF_KEY, SEND_SOUND_DEFAULT)
appPrefs.getBoolean(
YOUTUBE_LINK_PREVIEWS_PREF_KEY,
YOUTUBE_LINK_PREVIEWS_DEFAULT,
)
appPrefs.getBoolean(DUMP_SMS_PREF_KEY, DUMP_SMS_DEFAULT)
appPrefs.getBoolean(DUMP_MMS_PREF_KEY, DUMP_MMS_DEFAULT)
}
Expand All @@ -122,6 +140,10 @@ internal class AppSettingsRepositoryImplTest {
pref = AppBooleanPref.DUMP_MMS,
enabled = true,
)
repository.setBooleanPref(
pref = AppBooleanPref.YOUTUBE_LINK_PREVIEWS,
enabled = true,
)

verify(exactly = 1) {
appPrefs.putBoolean(
Expand All @@ -136,10 +158,47 @@ internal class AppSettingsRepositoryImplTest {
DUMP_MMS_PREF_KEY,
true,
)
appPrefs.putBoolean(
YOUTUBE_LINK_PREVIEWS_PREF_KEY,
true,
)
}
}
}

@Test
fun isYouTubeLinkPreviewsEnabled_readsPreferenceWithResourceDefault() {
runTest {
every {
appPrefs.getBoolean(
YOUTUBE_LINK_PREVIEWS_PREF_KEY,
YOUTUBE_LINK_PREVIEWS_DEFAULT,
)
} returns true

val result = createRepository(
ioDispatcher = UnconfinedTestDispatcher(testScheduler),
).isYouTubeLinkPreviewsEnabled()

assertTrue(result)
}
}

@Test
fun isYouTubeLinkPreviewsEnabled_defaultsToDisabledFromResources() {
runTest {
every { appPrefs.getBoolean(any(), any()) } answers { secondArg() }

val result = AppSettingsRepositoryImpl(
context = RuntimeEnvironment.getApplication().applicationContext,
ioDispatcher = UnconfinedTestDispatcher(testScheduler),
debugFeaturesProvider = debugFeaturesProvider,
).isYouTubeLinkPreviewsEnabled()

assertFalse(result)
}
}

private fun createRepository(ioDispatcher: CoroutineDispatcher): AppSettingsRepositoryImpl {
return AppSettingsRepositoryImpl(
context = context,
Expand All @@ -156,5 +215,7 @@ internal class AppSettingsRepositoryImplTest {
private const val DUMP_SMS_PREF_KEY = "dump_sms"
private const val SEND_SOUND_DEFAULT = true
private const val SEND_SOUND_PREF_KEY = "send_sound"
private const val YOUTUBE_LINK_PREVIEWS_DEFAULT = false
private const val YOUTUBE_LINK_PREVIEWS_PREF_KEY = "youtube_link_previews"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ internal class AppSettingsUiStateMapperImplTest {
isDefaultSmsApp = true,
defaultSmsAppLabel = DEFAULT_SMS_APP_LABEL,
sendSoundEnabled = false,
youTubeLinkPreviewsEnabled = true,
isDebugEnabled = true,
dumpSmsEnabled = true,
dumpMmsEnabled = false,
Expand All @@ -39,6 +40,7 @@ internal class AppSettingsUiStateMapperImplTest {
isDefaultSmsApp = true,
defaultSmsAppLabel = FORMATTED_DEFAULT_SMS_APP_LABEL,
sendSoundEnabled = false,
youTubeLinkPreviewsEnabled = true,
isDebugEnabled = true,
dumpSmsEnabled = true,
dumpMmsEnabled = false,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.android.messaging.ui.conversation.messagedetails

import android.content.ClipboardManager
import androidx.lifecycle.SavedStateHandle
import com.android.messaging.data.appsettings.repository.AppSettingsRepository
import com.android.messaging.data.conversation.model.message.ConversationMessageDetails
import com.android.messaging.data.conversation.model.message.ConversationMessageDetailsResult
import com.android.messaging.data.conversation.repository.ConversationsRepository
Expand All @@ -28,6 +29,9 @@ internal class MessageDetailsViewModelTest {
val mainDispatcherRule = MainDispatcherRule()

private val conversationsRepository = mockk<ConversationsRepository>()
private val appSettingsRepository = mockk<AppSettingsRepository> {
coEvery { isYouTubeLinkPreviewsEnabled() } returns false
}
private val messageDetailsUiStateMapper = mockk<MessageDetailsUiStateMapper>()
private val clipboardManager = mockk<ClipboardManager>()

Expand Down Expand Up @@ -58,6 +62,7 @@ internal class MessageDetailsViewModelTest {
messageDetailsUiStateMapper.map(
message = message,
details = details,
isYouTubePreviewEnabled = false,
)
} returns content

Expand All @@ -79,6 +84,7 @@ internal class MessageDetailsViewModelTest {
messageDetailsUiStateMapper.map(
message = message,
details = details,
isYouTubePreviewEnabled = false,
)
}
}
Expand All @@ -96,6 +102,7 @@ internal class MessageDetailsViewModelTest {
messageDetailsUiStateMapper.map(
message = null,
details = null,
isYouTubePreviewEnabled = false,
)
} returns MessageDetailsUiState.Unavailable

Expand Down Expand Up @@ -128,6 +135,7 @@ internal class MessageDetailsViewModelTest {
): MessageDetailsViewModel {
return MessageDetailsViewModel(
conversationsRepository = conversationsRepository,
appSettingsRepository = appSettingsRepository,
messageDetailsUiStateMapper = messageDetailsUiStateMapper,
clipboardManager = clipboardManager,
savedStateHandle = savedStateHandle,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,17 @@ internal class MessageDetailsUiStateMapperImplTest {
val message = mockk<ConversationMessageData>()
val preview = mockk<ConversationMessageUiModel>()

every { conversationMessageUiModelMapper.map(data = message) } returns preview
every {
conversationMessageUiModelMapper.map(
data = message,
isYouTubePreviewEnabled = false,
)
} returns preview

val result = mapper.map(
message = message,
details = details(),
isYouTubePreviewEnabled = false,
)

val content = result as MessageDetailsUiState.Content
Expand All @@ -41,6 +47,7 @@ internal class MessageDetailsUiStateMapperImplTest {
val result = mapper.map(
message = null,
details = details(),
isYouTubePreviewEnabled = false,
)

assertEquals(MessageDetailsUiState.Unavailable, result)
Expand All @@ -51,6 +58,7 @@ internal class MessageDetailsUiStateMapperImplTest {
val result = mapper.map(
message = mockk<ConversationMessageData>(),
details = null,
isYouTubePreviewEnabled = false,
)

assertEquals(MessageDetailsUiState.Unavailable, result)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.android.messaging.ui.conversation.messages.delegate

import androidx.core.net.toUri
import com.android.messaging.data.appsettings.repository.AppSettingsRepository
import com.android.messaging.data.conversation.repository.ConversationVCardMetadataRepository
import com.android.messaging.data.conversation.repository.ConversationsRepository
import com.android.messaging.domain.photoviewer.usecase.ResolveConversationPhotoViewerInitialOccurrenceIndex
Expand All @@ -23,6 +24,7 @@ internal class ConversationMessagesDelegateImplTest {
mockk<ResolveConversationPhotoViewerInitialOccurrenceIndex>()
private val delegate = ConversationMessagesDelegateImpl(
conversationsRepository = mockk<ConversationsRepository>(),
appSettingsRepository = mockk<AppSettingsRepository>(),
resolveInitialPhotoOccurrenceIndex = resolveInitialPhotoOccurrenceIndex,
conversationMessageUiModelMapper = mockk<ConversationMessageUiModelMapper>(),
conversationVCardAttachmentUiModelMapper =
Expand Down
Loading
Loading