Skip to content

Instantly share code, notes, and snippets.

@AaronMT
Created October 28, 2025 20:17
Show Gist options
  • Select an option

  • Save AaronMT/e0789c0fc5da3de19399f4bb44d04607 to your computer and use it in GitHub Desktop.

Select an option

Save AaronMT/e0789c0fc5da3de19399f4bb44d04607 to your computer and use it in GitHub Desktop.
class UnifiedTrustPanelRobot {
fun verifyUnifiedTrustPanelItems(
composeTestRule: ComposeTestRule,
webSite: String,
webSiteURL: String,
isTheWebSiteSecure: Boolean,
isEnhancedTrackingProtectionEnabled: Boolean,
isTrackerBlockingEnabled: Boolean,
areTrackersBlocked: Boolean,
) {
Log.i(TAG, "verifyUnifiedTrustPanelItems: site=$webSite, url=$webSiteURL, secure=$isTheWebSiteSecure, etp=$isEnhancedTrackingProtectionEnabled")
waitForAppWindowToBeUpdated()
composeTestRule.onNodeWithText(webSite, useUnmergedTree = true).assertIsDisplayed()
composeTestRule.onNodeWithText(webSiteURL, useUnmergedTree = true, substring = true).assertIsDisplayed()
verifyTheEnhancedTrackingProtectionState(composeTestRule, isEnhancedTrackingProtectionEnabled, isTheWebSiteSecure)
verifyTheTrackersBlockedOptionState(composeTestRule, isTrackerBlockingEnabled, areTrackersBlocked)
verifyTheSiteSecurityOption(composeTestRule, isTheWebSiteSecure)
composeTestRule.onNodeWithText(getStringResource(R.string.clear_site_data), useUnmergedTree = true).assertIsDisplayed()
composeTestRule.onNodeWithContentDescription("Privacy Settings Links available", useUnmergedTree = true).assertIsDisplayed()
}
fun verifyTheEnhancedTrackingProtectionState(
composeTestRule: ComposeTestRule,
isEnabled: Boolean,
isSecure: Boolean
) {
Log.i(TAG, "verifyETPState: enabled=$isEnabled, secure=$isSecure")
val (bannerTitle, bannerDesc) = when {
isEnabled && isSecure ->
R.string.protection_panel_banner_protected_title to R.string.protection_panel_banner_protected_description
isEnabled && !isSecure ->
R.string.protection_panel_banner_not_secure_title to R.string.protection_panel_banner_not_secure_description
!isEnabled && isSecure ->
R.string.protection_panel_banner_not_protected_title to R.string.protection_panel_banner_not_protected_description
else ->
R.string.protection_panel_banner_not_secure_title to R.string.protection_panel_banner_not_secure_description
}
composeTestRule.onNodeWithText(getStringResource(bannerTitle, argument = appName), useUnmergedTree = true).assertIsDisplayed()
composeTestRule.onNodeWithText(getStringResource(bannerDesc), useUnmergedTree = true).assertIsDisplayed()
val toggleState = if (isEnabled) R.string.protection_panel_etp_toggle_on else R.string.protection_panel_etp_toggle_off
val toggleDesc = if (isEnabled) R.string.protection_panel_etp_toggle_enabled_description_2
else R.string.protection_panel_etp_toggle_disabled_description_2
composeTestRule.onNodeWithText(getStringResource(R.string.protection_panel_etp_toggle_label), useUnmergedTree = true).assertIsDisplayed()
composeTestRule.onNodeWithText(getStringResource(toggleDesc), useUnmergedTree = true).assertIsDisplayed()
composeTestRule.onNodeWithText(getStringResource(toggleState), useUnmergedTree = true).assertIsDisplayed()
}
fun verifyTheTrackersBlockedOptionState(
composeTestRule: ComposeTestRule,
isEnabled: Boolean,
areBlocked: Boolean
) {
Log.i(TAG, "verifyTrackersState: enabled=$isEnabled, blocked=$areBlocked")
val expectedText = when {
isEnabled && areBlocked -> "Trackers blocked:"
isEnabled && !areBlocked -> getStringResource(R.string.protection_panel_no_trackers_blocked)
else -> getStringResource(R.string.protection_panel_etp_disabled_no_trackers_blocked)
}
composeTestRule.onNodeWithText(expectedText, useUnmergedTree = true, substring = isEnabled && areBlocked).assertIsDisplayed()
}
fun verifyTheSiteSecurityOption(composeTestRule: ComposeTestRule, isSecure: Boolean) {
Log.i(TAG, "verifySiteSecurity: secure=$isSecure")
if (isSecure) {
composeTestRule.onNodeWithText(getStringResource(R.string.connection_security_panel_secure), useUnmergedTree = true).assertIsDisplayed()
composeTestRule.onNodeWithText("Verified by", useUnmergedTree = true, substring = true).assertIsDisplayed()
} else {
composeTestRule.onNodeWithText(getStringResource(R.string.connection_security_panel_not_secure), useUnmergedTree = true).assertIsDisplayed()
}
}
fun clickTheEnhancedTrackingProtectionOption(composeTestRule: ComposeTestRule) {
Log.i(TAG, "clickETPToggle")
composeTestRule.onNodeWithText(getStringResource(R.string.protection_panel_etp_toggle_label), useUnmergedTree = true).performClick()
composeTestRule.waitForIdle()
}
fun clickTheClearCookiesAndSiteDataButton(composeTestRule: ComposeTestRule) {
Log.i(TAG, "clickClearCookies")
composeTestRule.onNodeWithText(getStringResource(R.string.clear_site_data), useUnmergedTree = true).performClick()
}
fun verifyTheClearCookiesAndSiteDataDialog(composeTestRule: ComposeTestRule, webSite: String) {
Log.i(TAG, "verifyClearCookiesDialog: site=$webSite")
val dialogDesc = HtmlCompat.fromHtml(
getStringResource(R.string.clear_site_data_dialog_description, argument = webSite),
HtmlCompat.FROM_HTML_MODE_LEGACY
).toString()
composeTestRule.onNodeWithText(getStringResource(R.string.clear_site_data), useUnmergedTree = true).assertIsDisplayed()
composeTestRule.onNodeWithText(dialogDesc, useUnmergedTree = true).assertIsDisplayed()
composeTestRule.onNodeWithText(getStringResource(R.string.clear_site_data_dialog_positive_button_text), useUnmergedTree = true).assertIsDisplayed()
composeTestRule.onNodeWithText(getStringResource(R.string.clear_site_data_dialog_negative_button_text), useUnmergedTree = true).assertIsDisplayed()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment