Complement some CTS tests for internal API.

Bug: 218830137
Test: atest CtsSafetyCenterTestCases
Change-Id: Ib9ac669306f50389589f582382c19fd94dbfd7e7
diff --git a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterManagerTest.kt b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterManagerTest.kt
index 9626dc7..54f4e8e 100644
--- a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterManagerTest.kt
+++ b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterManagerTest.kt
@@ -25,20 +25,21 @@
 import android.content.IntentFilter
 import android.os.Build.VERSION_CODES.TIRAMISU
 import android.safetycenter.SafetyCenterData
+import android.safetycenter.SafetyCenterEntry
+import android.safetycenter.SafetyCenterEntry.SEVERITY_UNSPECIFIED_ICON_TYPE_NO_RECOMMENDATION
+import android.safetycenter.SafetyCenterEntryGroup
+import android.safetycenter.SafetyCenterEntryOrGroup
 import android.safetycenter.SafetyCenterErrorDetails
+import android.safetycenter.SafetyCenterIssue
 import android.safetycenter.SafetyCenterManager
 import android.safetycenter.SafetyCenterManager.ACTION_SAFETY_CENTER_ENABLED_CHANGED
 import android.safetycenter.SafetyCenterManager.OnSafetyCenterDataChangedListener
 import android.safetycenter.SafetyCenterManager.REFRESH_REASON_PAGE_OPEN
 import android.safetycenter.SafetyCenterManager.REFRESH_REASON_RESCAN_BUTTON_CLICK
 import android.safetycenter.SafetyCenterStatus
-import android.safetycenter.SafetyCenterStatus.OVERALL_SEVERITY_LEVEL_UNKNOWN
 import android.safetycenter.SafetyEvent
 import android.safetycenter.SafetyEvent.SAFETY_EVENT_TYPE_SOURCE_STATE_CHANGED
 import android.safetycenter.SafetySourceData
-import android.safetycenter.SafetySourceData.SEVERITY_LEVEL_CRITICAL_WARNING
-import android.safetycenter.SafetySourceData.SEVERITY_LEVEL_INFORMATION
-import android.safetycenter.SafetySourceData.SEVERITY_LEVEL_UNSPECIFIED
 import android.safetycenter.SafetySourceErrorDetails
 import android.safetycenter.SafetySourceIssue
 import android.safetycenter.SafetySourceStatus
@@ -59,6 +60,7 @@
 import android.safetycenter.cts.testing.SafetyCenterApisWithShellPermissions.setSafetyCenterConfigForTestsWithPermission
 import android.safetycenter.cts.testing.SafetyCenterApisWithShellPermissions.setSafetySourceDataWithPermission
 import android.safetycenter.cts.testing.SafetyCenterCtsConfig.CTS_CONFIG
+import android.safetycenter.cts.testing.SafetyCenterCtsConfig.CTS_SOURCE_GROUP_ID
 import android.safetycenter.cts.testing.SafetyCenterCtsConfig.CTS_SOURCE_ID
 import android.safetycenter.cts.testing.SafetyCenterEnabledChangedReceiver
 import android.safetycenter.cts.testing.SafetyCenterFlags
@@ -97,7 +99,11 @@
     private val safetySourceDataUnspecified =
         SafetySourceData.Builder()
             .setStatus(
-                SafetySourceStatus.Builder("None title", "None summary", SEVERITY_LEVEL_UNSPECIFIED)
+                SafetySourceStatus.Builder(
+                    "Unspecified title",
+                    "Unspecified summary",
+                    SafetySourceData.SEVERITY_LEVEL_UNSPECIFIED
+                )
                     .setEnabled(false)
                     .build()
             )
@@ -105,7 +111,11 @@
     private val safetySourceDataInformation =
         SafetySourceData.Builder()
             .setStatus(
-                SafetySourceStatus.Builder("Ok title", "Ok summary", SEVERITY_LEVEL_INFORMATION)
+                SafetySourceStatus.Builder(
+                    "Ok title",
+                    "Ok summary",
+                    SafetySourceData.SEVERITY_LEVEL_INFORMATION
+                )
                     .setPendingIntent(somePendingIntent)
                     .build()
             )
@@ -116,7 +126,7 @@
                 SafetySourceStatus.Builder(
                     "Critical title",
                     "Critical summary",
-                    SEVERITY_LEVEL_CRITICAL_WARNING
+                    SafetySourceData.SEVERITY_LEVEL_CRITICAL_WARNING
                 )
                     .setPendingIntent(somePendingIntent)
                     .build()
@@ -126,7 +136,7 @@
                     "critical_issue_id",
                     "Critical issue title",
                     "Critical issue summary",
-                    SEVERITY_LEVEL_CRITICAL_WARNING,
+                    SafetySourceData.SEVERITY_LEVEL_CRITICAL_WARNING,
                     "issue_type_id"
                 )
                     .addAction(
@@ -137,6 +147,136 @@
                     .build()
             )
             .build()
+    private val safetyCenterDataFromConfig =
+        SafetyCenterData(
+            SafetyCenterStatus.Builder("Unknown", "Unknown safety status")
+                .setSeverityLevel(SafetyCenterStatus.OVERALL_SEVERITY_LEVEL_UNKNOWN)
+                .build(),
+            emptyList(),
+            listOf(
+                SafetyCenterEntryOrGroup(
+                    SafetyCenterEntryGroup.Builder(CTS_SOURCE_GROUP_ID, "OK")
+                        .setSeverityLevel(SafetyCenterEntry.ENTRY_SEVERITY_LEVEL_UNKNOWN)
+                        .setSummary("OK")
+                        .setEntries(
+                            listOf(
+                                SafetyCenterEntry.Builder(CTS_SOURCE_ID, "OK")
+                                    .setSeverityLevel(
+                                        SafetyCenterEntry.ENTRY_SEVERITY_LEVEL_UNKNOWN)
+                                    .setSummary("OK")
+                                    .setPendingIntent(somePendingIntent)
+                                    .setSeverityUnspecifiedIconType(
+                                        SEVERITY_UNSPECIFIED_ICON_TYPE_NO_RECOMMENDATION)
+                                    .build()
+                            )
+                        )
+                        .build()
+                )
+            ),
+            emptyList()
+        )
+    private val safetyCenterDataUnspecified =
+        SafetyCenterData(
+            SafetyCenterStatus.Builder("All good", "No problemo maestro")
+                .setSeverityLevel(SafetyCenterStatus.OVERALL_SEVERITY_LEVEL_OK)
+                .build(),
+            emptyList(),
+            listOf(
+                SafetyCenterEntryOrGroup(
+                    SafetyCenterEntryGroup.Builder(CTS_SOURCE_GROUP_ID, "OK")
+                        .setSeverityLevel(SafetyCenterEntry.ENTRY_SEVERITY_LEVEL_UNSPECIFIED)
+                        .setSummary("OK")
+                        .setEntries(
+                            listOf(
+                                SafetyCenterEntry.Builder(CTS_SOURCE_ID, "Unspecified title")
+                                    .setSeverityLevel(
+                                        SafetyCenterEntry.ENTRY_SEVERITY_LEVEL_UNSPECIFIED)
+                                    .setSummary("Unspecified summary")
+                                    .setPendingIntent(somePendingIntent)
+                                    .setEnabled(false)
+                                    .setSeverityUnspecifiedIconType(
+                                        SEVERITY_UNSPECIFIED_ICON_TYPE_NO_RECOMMENDATION)
+                                    .build()
+                            )
+                        )
+                        .build()
+                )
+            ),
+            emptyList()
+        )
+    private val safetyCenterDataOk =
+        SafetyCenterData(
+            SafetyCenterStatus.Builder("All good", "No problemo maestro")
+                .setSeverityLevel(SafetyCenterStatus.OVERALL_SEVERITY_LEVEL_OK)
+                .build(),
+            emptyList(),
+            listOf(
+                SafetyCenterEntryOrGroup(
+                    SafetyCenterEntryGroup.Builder(CTS_SOURCE_GROUP_ID, "OK")
+                        .setSeverityLevel(SafetyCenterEntry.ENTRY_SEVERITY_LEVEL_OK)
+                        .setSummary("OK")
+                        .setEntries(
+                            listOf(
+                                SafetyCenterEntry.Builder(CTS_SOURCE_ID, "Ok title")
+                                    .setSeverityLevel(SafetyCenterEntry.ENTRY_SEVERITY_LEVEL_OK)
+                                    .setSummary("Ok summary")
+                                    .setPendingIntent(somePendingIntent)
+                                    .setSeverityUnspecifiedIconType(
+                                        SEVERITY_UNSPECIFIED_ICON_TYPE_NO_RECOMMENDATION)
+                                    .build()
+                            )
+                        )
+                        .build()
+                )
+            ),
+            emptyList()
+        )
+    private val safetyCenterDataCritical =
+        SafetyCenterData(
+            SafetyCenterStatus.Builder("Uh-oh", "Code red")
+                .setSeverityLevel(SafetyCenterStatus.OVERALL_SEVERITY_LEVEL_CRITICAL_WARNING)
+                .build(),
+            listOf(
+                SafetyCenterIssue.Builder(
+                    "critical_issue_id",
+                    "Critical issue title",
+                    "Critical issue summary"
+                )
+                    .setSeverityLevel(SafetyCenterIssue.ISSUE_SEVERITY_LEVEL_CRITICAL_WARNING)
+                    .setActions(
+                        listOf(
+                            SafetyCenterIssue.Action.Builder(
+                                "critical_action_id",
+                                "Solve issue",
+                                somePendingIntent
+                            )
+                                .build()
+                        )
+                    )
+                    .build()
+            ),
+            listOf(
+                SafetyCenterEntryOrGroup(
+                    SafetyCenterEntryGroup.Builder(CTS_SOURCE_GROUP_ID, "OK")
+                        .setSeverityLevel(SafetyCenterEntry.ENTRY_SEVERITY_LEVEL_CRITICAL_WARNING)
+                        .setSummary("OK")
+                        .setEntries(
+                            listOf(
+                                SafetyCenterEntry.Builder(CTS_SOURCE_ID, "Critical title")
+                                    .setSeverityLevel(
+                                        SafetyCenterEntry.ENTRY_SEVERITY_LEVEL_CRITICAL_WARNING)
+                                    .setSummary("Critical summary")
+                                    .setPendingIntent(somePendingIntent)
+                                    .setSeverityUnspecifiedIconType(
+                                        SEVERITY_UNSPECIFIED_ICON_TYPE_NO_RECOMMENDATION)
+                                    .build()
+                            )
+                        )
+                        .build()
+                )
+            ),
+            emptyList()
+        )
     private val listener =
         object : OnSafetyCenterDataChangedListener {
             private val dataChannel = Channel<SafetyCenterData>(UNLIMITED)
@@ -259,6 +399,19 @@
     }
 
     @Test
+    fun setSafetySourceData_unknownId_throwsIllegalArgumentException() {
+        val thrown =
+            assertFailsWith(IllegalArgumentException::class) {
+                safetyCenterManager.setSafetySourceDataWithPermission(
+                    CTS_SOURCE_ID,
+                    safetySourceDataUnspecified,
+                    EVENT_SOURCE_STATE_CHANGED
+                )
+            }
+        assertThat(thrown).hasMessageThat().isEqualTo("Unexpected safety source \"$CTS_SOURCE_ID\"")
+    }
+
+    @Test
     fun setSafetySourceData_withFlagDisabled_noOp() {
         SafetyCenterFlags.setSafetyCenterEnabled(false)
 
@@ -295,6 +448,15 @@
     }
 
     @Test
+    fun getSafetySourceData_unknownId_throwsIllegalArgumentException() {
+        val thrown =
+            assertFailsWith(IllegalArgumentException::class) {
+                safetyCenterManager.getSafetySourceDataWithPermission(CTS_SOURCE_ID)
+            }
+        assertThat(thrown).hasMessageThat().isEqualTo("Unexpected safety source \"$CTS_SOURCE_ID\"")
+    }
+
+    @Test
     fun getSafetySourceData_withoutPermission_throwsSecurityException() {
         assertFailsWith(SecurityException::class) {
             safetyCenterManager.getSafetySourceData(CTS_SOURCE_ID)
@@ -333,8 +495,10 @@
     @Test
     fun safetyCenterEnabledChanged_whenImplicitReceiverHasPermission_receiverCalled() {
         val enabledChangedReceiver = SafetyCenterEnabledChangedReceiver()
-        context.registerReceiver(enabledChangedReceiver,
-            IntentFilter(ACTION_SAFETY_CENTER_ENABLED_CHANGED))
+        context.registerReceiver(
+            enabledChangedReceiver,
+            IntentFilter(ACTION_SAFETY_CENTER_ENABLED_CHANGED)
+        )
 
         var receiverValue =
             enabledChangedReceiver.setSafetyCenterEnabledWithReceiverPermissionAndWait(false)
@@ -351,8 +515,10 @@
     @Test
     fun safetyCenterEnabledChanged_whenImplicitReceiverDoesNotHavePermission_receiverNotCalled() {
         val enabledChangedReceiver = SafetyCenterEnabledChangedReceiver()
-        context.registerReceiver(enabledChangedReceiver,
-            IntentFilter(ACTION_SAFETY_CENTER_ENABLED_CHANGED))
+        context.registerReceiver(
+            enabledChangedReceiver,
+            IntentFilter(ACTION_SAFETY_CENTER_ENABLED_CHANGED)
+        )
 
         SafetyCenterFlags.setSafetyCenterEnabled(false)
 
@@ -502,8 +668,8 @@
     fun getSafetyCenterConfig_isNotNull() {
         val config = safetyCenterManager.getSafetyCenterConfigWithPermission()
 
-        // TODO(b/225152057): Assert on content.
         assertThat(config).isNotNull()
+        assertThat(config).isNotEqualTo(CTS_CONFIG)
     }
 
     @Test
@@ -517,8 +683,7 @@
 
         val apiSafetyCenterData = safetyCenterManager.getSafetyCenterDataWithPermission()
 
-        // TODO(b/218830137): Assert on content.
-        assertThat(apiSafetyCenterData).isNotNull()
+        assertThat(apiSafetyCenterData).isEqualTo(safetyCenterDataFromConfig)
     }
 
     @Test
@@ -532,8 +697,7 @@
 
         val apiSafetyCenterData = safetyCenterManager.getSafetyCenterDataWithPermission()
 
-        // TODO(b/218830137): Assert on content.
-        assertThat(apiSafetyCenterData).isNotNull()
+        assertThat(apiSafetyCenterData).isEqualTo(safetyCenterDataUnspecified)
     }
 
     @Test
@@ -554,8 +718,8 @@
 
         val apiSafetyCenterData = safetyCenterManager.getSafetyCenterDataWithPermission()
 
-        // TODO(b/218830137): Assert on content.
         assertThat(apiSafetyCenterData).isNotEqualTo(previousApiSafetyCenterData)
+        assertThat(apiSafetyCenterData).isEqualTo(safetyCenterDataCritical)
     }
 
     @Test
@@ -565,17 +729,7 @@
 
         val apiSafetyCenterData = safetyCenterManager.getSafetyCenterDataWithPermission()
 
-        assertThat(apiSafetyCenterData)
-            .isEqualTo(
-                SafetyCenterData(
-                    SafetyCenterStatus.Builder("Unknown", "Unknown safety status")
-                        .setSeverityLevel(OVERALL_SEVERITY_LEVEL_UNKNOWN)
-                        .build(),
-                    emptyList(),
-                    emptyList(),
-                    emptyList()
-                )
-            )
+        assertThat(apiSafetyCenterData).isEqualTo(DEFAULT_SAFETY_CENTER_DATA)
     }
 
     @Test
@@ -592,8 +746,7 @@
         )
         val safetyCenterDataFromListener = listener.receiveSafetyCenterData()
 
-        // TODO(b/218830137): Assert on content.
-        assertThat(safetyCenterDataFromListener).isNotNull()
+        assertThat(safetyCenterDataFromListener).isEqualTo(safetyCenterDataFromConfig)
     }
 
     @Test
@@ -613,8 +766,7 @@
         )
         val safetyCenterDataFromListener = listener.receiveSafetyCenterData()
 
-        // TODO(b/218830137): Assert on content.
-        assertThat(safetyCenterDataFromListener).isNotNull()
+        assertThat(safetyCenterDataFromListener).isEqualTo(safetyCenterDataOk)
     }
 
     @Test
@@ -641,8 +793,7 @@
         )
         val safetyCenterDataFromListener = listener.receiveSafetyCenterData()
 
-        // TODO(b/218830137): Assert on content.
-        assertThat(safetyCenterDataFromListener).isNotNull()
+        assertThat(safetyCenterDataFromListener).isEqualTo(safetyCenterDataCritical)
     }
 
     @Test
@@ -669,8 +820,7 @@
         )
         val safetyCenterDataFromListener = listener.receiveSafetyCenterData()
 
-        // TODO(b/218830137): Assert on content.
-        assertThat(safetyCenterDataFromListener).isNotNull()
+        assertThat(safetyCenterDataFromListener).isEqualTo(safetyCenterDataFromConfig)
     }
 
     @Test
@@ -738,13 +888,6 @@
     }
 
     @Test
-    fun addOnSafetyCenterDataChangedListener_withoutPermission_throwsSecurityException() {
-        assertFailsWith(SecurityException::class) {
-            safetyCenterManager.addOnSafetyCenterDataChangedListener(directExecutor(), listener)
-        }
-    }
-
-    @Test
     // Permission is held for the entire test to avoid a racy scenario where the shell identity is
     // dropped while it's being acquired on another thread.
     fun addOnSafetyCenterDataChangedListener_oneShot_doesntDeadlock() {
@@ -771,6 +914,13 @@
     }
 
     @Test
+    fun addOnSafetyCenterDataChangedListener_withoutPermission_throwsSecurityException() {
+        assertFailsWith(SecurityException::class) {
+            safetyCenterManager.addOnSafetyCenterDataChangedListener(directExecutor(), listener)
+        }
+    }
+
+    @Test
     fun removeOnSafetyCenterDataChangedListener_listenerNotCalledOnSafetySourceData() {
         safetyCenterManager.setSafetyCenterConfigForTestsWithPermission(CTS_CONFIG)
         safetyCenterManager.addOnSafetyCenterDataChangedListenerWithPermission(
@@ -853,6 +1003,15 @@
     }
 
     @Test
+    fun setSafetyCenterConfigForTests_setsConfig() {
+        safetyCenterManager.setSafetyCenterConfigForTestsWithPermission(CTS_CONFIG)
+
+        val config = safetyCenterManager.getSafetyCenterConfigWithPermission()
+
+        assertThat(config).isEqualTo(CTS_CONFIG)
+    }
+
+    @Test
     fun setSafetyCenterConfigForTests_withoutPermission_throwsSecurityException() {
         assertFailsWith(SecurityException::class) {
             safetyCenterManager.setSafetyCenterConfigForTests(CTS_CONFIG)
@@ -869,5 +1028,14 @@
     companion object {
         private val EVENT_SOURCE_STATE_CHANGED =
             SafetyEvent.Builder(SAFETY_EVENT_TYPE_SOURCE_STATE_CHANGED).build()
+        private val DEFAULT_SAFETY_CENTER_DATA =
+            SafetyCenterData(
+                SafetyCenterStatus.Builder("Unknown", "Unknown safety status")
+                    .setSeverityLevel(SafetyCenterStatus.OVERALL_SEVERITY_LEVEL_UNKNOWN)
+                    .build(),
+                emptyList(),
+                emptyList(),
+                emptyList()
+            )
     }
 }
diff --git a/tests/cts/safetycenter/src/android/safetycenter/cts/testing/SafetyCenterCtsConfig.kt b/tests/cts/safetycenter/src/android/safetycenter/cts/testing/SafetyCenterCtsConfig.kt
index 2bf5c8a..ef07a95 100644
--- a/tests/cts/safetycenter/src/android/safetycenter/cts/testing/SafetyCenterCtsConfig.kt
+++ b/tests/cts/safetycenter/src/android/safetycenter/cts/testing/SafetyCenterCtsConfig.kt
@@ -32,7 +32,8 @@
     /** ID of the only source provided by [CTS_CONFIG]. */
     const val CTS_SOURCE_ID = "cts_source_id"
 
-    private const val CTS_SOURCE_GROUP_ID = "cts_source_group"
+    /** ID of the only [SafetySourcesGroup] provided by [CTS_CONFIG]. */
+    const val CTS_SOURCE_GROUP_ID = "cts_source_group"
 
     private val CTS_SOURCE =
         SafetySource.Builder(SAFETY_SOURCE_TYPE_DYNAMIC)