Loading packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/MediaTestHelper.kt +2 −12 Original line number Diff line number Diff line Loading @@ -16,9 +16,7 @@ package com.android.systemui.media.controls import android.R import android.app.smartspace.SmartspaceAction import android.content.Context import android.graphics.drawable.Icon import com.android.systemui.util.mockito.mock import com.android.systemui.util.mockito.whenever Loading @@ -26,17 +24,9 @@ import com.android.systemui.util.mockito.whenever class MediaTestHelper { companion object { /** Returns a list of three mocked recommendations */ fun getValidRecommendationList(context: Context): List<SmartspaceAction> { fun getValidRecommendationList(mediaIcon: Icon): List<SmartspaceAction> { val mediaRecommendationItem = mock<SmartspaceAction> { whenever(icon) .thenReturn( Icon.createWithResource( context, R.drawable.ic_media_play, ) ) } mock<SmartspaceAction> { whenever(icon).thenReturn(mediaIcon) } return listOf(mediaRecommendationItem, mediaRecommendationItem, mediaRecommendationItem) } } Loading packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/data/repository/MediaDataRepositoryTest.kt +6 −2 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.systemui.media.controls.data.repository import android.R import android.graphics.drawable.Icon import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase Loading Loading @@ -81,11 +83,12 @@ class MediaDataRepositoryTest : SysuiTestCase() { testScope.runTest { kosmos.fakeFeatureFlagsClassic.set(Flags.MEDIA_RETAIN_RECOMMENDATIONS, true) val smartspaceData by collectLastValue(underTest.smartspaceMediaData) val icon = Icon.createWithResource(context, R.drawable.ic_media_play) val recommendation = SmartspaceMediaData( targetId = KEY_MEDIA_SMARTSPACE, isActive = true, recommendations = MediaTestHelper.getValidRecommendationList(context), recommendations = MediaTestHelper.getValidRecommendationList(icon), ) underTest.setRecommendation(recommendation) Loading @@ -102,11 +105,12 @@ class MediaDataRepositoryTest : SysuiTestCase() { fun dismissRecommendation() = testScope.runTest { val smartspaceData by collectLastValue(underTest.smartspaceMediaData) val icon = Icon.createWithResource(context, R.drawable.ic_media_play) val recommendation = SmartspaceMediaData( targetId = KEY_MEDIA_SMARTSPACE, isActive = true, recommendations = MediaTestHelper.getValidRecommendationList(context), recommendations = MediaTestHelper.getValidRecommendationList(icon), ) underTest.setRecommendation(recommendation) Loading packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/data/repository/MediaFilterRepositoryTest.kt +4 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.systemui.media.controls.data.repository import android.R import android.graphics.drawable.Icon import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.internal.logging.InstanceId Loading Loading @@ -124,11 +126,12 @@ class MediaFilterRepositoryTest : SysuiTestCase() { testScope.runTest { val smartspaceMediaData by collectLastValue(underTest.smartspaceMediaData) val icon = Icon.createWithResource(context, R.drawable.ic_media_play) val mediaRecommendation = SmartspaceMediaData( targetId = KEY_MEDIA_SMARTSPACE, isActive = true, recommendations = MediaTestHelper.getValidRecommendationList(context), recommendations = MediaTestHelper.getValidRecommendationList(icon), ) underTest.setRecommendation(mediaRecommendation) Loading packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/domain/interactor/MediaCarouselInteractorTest.kt +8 −3 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.systemui.media.controls.domain.interactor import android.R import android.graphics.drawable.Icon import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase Loading Loading @@ -103,11 +105,12 @@ class MediaCarouselInteractorTest : SysuiTestCase() { collectLastValue(underTest.hasAnyMediaOrRecommendation) kosmos.fakeFeatureFlagsClassic.set(Flags.MEDIA_RETAIN_RECOMMENDATIONS, false) val icon = Icon.createWithResource(context, R.drawable.ic_media_play) val userMediaRecommendation = SmartspaceMediaData( targetId = KEY_MEDIA_SMARTSPACE, isActive = true, recommendations = MediaTestHelper.getValidRecommendationList(context), recommendations = MediaTestHelper.getValidRecommendationList(icon), ) val userMedia = MediaData().copy(active = false) Loading @@ -131,11 +134,12 @@ class MediaCarouselInteractorTest : SysuiTestCase() { collectLastValue(underTest.hasAnyMediaOrRecommendation) kosmos.fakeFeatureFlagsClassic.set(Flags.MEDIA_RETAIN_RECOMMENDATIONS, false) val icon = Icon.createWithResource(context, R.drawable.ic_media_play) val mediaRecommendation = SmartspaceMediaData( targetId = KEY_MEDIA_SMARTSPACE, isActive = true, recommendations = MediaTestHelper.getValidRecommendationList(context), recommendations = MediaTestHelper.getValidRecommendationList(icon), ) mediaFilterRepository.setRecommendation(mediaRecommendation) Loading @@ -158,11 +162,12 @@ class MediaCarouselInteractorTest : SysuiTestCase() { collectLastValue(underTest.hasAnyMediaOrRecommendation) kosmos.fakeFeatureFlagsClassic.set(Flags.MEDIA_RETAIN_RECOMMENDATIONS, false) val icon = Icon.createWithResource(context, R.drawable.ic_media_play) val mediaRecommendation = SmartspaceMediaData( targetId = KEY_MEDIA_SMARTSPACE, isActive = true, recommendations = MediaTestHelper.getValidRecommendationList(context), recommendations = MediaTestHelper.getValidRecommendationList(icon), ) mediaFilterRepository.setRecommendation(mediaRecommendation) Loading packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/domain/interactor/MediaControlInteractorTest.kt 0 → 100644 +93 −0 Original line number Diff line number Diff line /* * Copyright (C) 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.systemui.media.controls.domain.interactor import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.internal.logging.InstanceId import com.android.systemui.SysuiTestCase import com.android.systemui.coroutines.collectLastValue import com.android.systemui.kosmos.testScope import com.android.systemui.media.controls.domain.pipeline.MediaDataFilterImpl import com.android.systemui.media.controls.domain.pipeline.interactor.MediaControlInteractor import com.android.systemui.media.controls.domain.pipeline.interactor.mediaControlInteractor import com.android.systemui.media.controls.domain.pipeline.mediaDataFilter import com.android.systemui.media.controls.shared.model.MediaData import com.android.systemui.media.controls.util.mediaInstanceId import com.android.systemui.statusbar.notificationLockscreenUserManager import com.android.systemui.testKosmos import com.android.systemui.util.mockito.whenever import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.test.runTest import org.junit.Test import org.junit.runner.RunWith @SmallTest @RunWith(AndroidJUnit4::class) class MediaControlInteractorTest : SysuiTestCase() { private val kosmos = testKosmos() private val testScope = kosmos.testScope private val mediaDataFilter: MediaDataFilterImpl = kosmos.mediaDataFilter private val instanceId: InstanceId = kosmos.mediaInstanceId private val notificationLockscreenUserManager = kosmos.notificationLockscreenUserManager private val underTest: MediaControlInteractor = kosmos.mediaControlInteractor @Test fun onMediaDataUpdated() = testScope.runTest { whenever(notificationLockscreenUserManager.isCurrentProfile(USER_ID)).thenReturn(true) whenever(notificationLockscreenUserManager.isProfileAvailable(USER_ID)).thenReturn(true) val controlModel by collectLastValue(underTest.mediaControl) var mediaData = MediaData(userId = USER_ID, instanceId = instanceId, artist = SESSION_ARTIST) mediaDataFilter.onMediaDataLoaded(KEY, KEY, mediaData) assertThat(controlModel?.instanceId).isEqualTo(instanceId) assertThat(controlModel?.artistName).isEqualTo(SESSION_ARTIST) mediaData = MediaData(userId = USER_ID, instanceId = instanceId, artist = SESSION_ARTIST_2) mediaDataFilter.onMediaDataLoaded(KEY, KEY, mediaData) assertThat(controlModel?.instanceId).isEqualTo(instanceId) assertThat(controlModel?.artistName).isEqualTo(SESSION_ARTIST_2) mediaData = MediaData( userId = USER_ID, instanceId = InstanceId.fakeInstanceId(2), artist = SESSION_ARTIST ) mediaDataFilter.onMediaDataLoaded(KEY, KEY, mediaData) assertThat(controlModel?.instanceId).isNotEqualTo(mediaData.instanceId) assertThat(controlModel?.artistName).isEqualTo(SESSION_ARTIST_2) } companion object { private const val USER_ID = 0 private const val KEY = "key" private const val SESSION_ARTIST = "artist" private const val SESSION_ARTIST_2 = "artist2" } } Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/MediaTestHelper.kt +2 −12 Original line number Diff line number Diff line Loading @@ -16,9 +16,7 @@ package com.android.systemui.media.controls import android.R import android.app.smartspace.SmartspaceAction import android.content.Context import android.graphics.drawable.Icon import com.android.systemui.util.mockito.mock import com.android.systemui.util.mockito.whenever Loading @@ -26,17 +24,9 @@ import com.android.systemui.util.mockito.whenever class MediaTestHelper { companion object { /** Returns a list of three mocked recommendations */ fun getValidRecommendationList(context: Context): List<SmartspaceAction> { fun getValidRecommendationList(mediaIcon: Icon): List<SmartspaceAction> { val mediaRecommendationItem = mock<SmartspaceAction> { whenever(icon) .thenReturn( Icon.createWithResource( context, R.drawable.ic_media_play, ) ) } mock<SmartspaceAction> { whenever(icon).thenReturn(mediaIcon) } return listOf(mediaRecommendationItem, mediaRecommendationItem, mediaRecommendationItem) } } Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/data/repository/MediaDataRepositoryTest.kt +6 −2 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.systemui.media.controls.data.repository import android.R import android.graphics.drawable.Icon import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase Loading Loading @@ -81,11 +83,12 @@ class MediaDataRepositoryTest : SysuiTestCase() { testScope.runTest { kosmos.fakeFeatureFlagsClassic.set(Flags.MEDIA_RETAIN_RECOMMENDATIONS, true) val smartspaceData by collectLastValue(underTest.smartspaceMediaData) val icon = Icon.createWithResource(context, R.drawable.ic_media_play) val recommendation = SmartspaceMediaData( targetId = KEY_MEDIA_SMARTSPACE, isActive = true, recommendations = MediaTestHelper.getValidRecommendationList(context), recommendations = MediaTestHelper.getValidRecommendationList(icon), ) underTest.setRecommendation(recommendation) Loading @@ -102,11 +105,12 @@ class MediaDataRepositoryTest : SysuiTestCase() { fun dismissRecommendation() = testScope.runTest { val smartspaceData by collectLastValue(underTest.smartspaceMediaData) val icon = Icon.createWithResource(context, R.drawable.ic_media_play) val recommendation = SmartspaceMediaData( targetId = KEY_MEDIA_SMARTSPACE, isActive = true, recommendations = MediaTestHelper.getValidRecommendationList(context), recommendations = MediaTestHelper.getValidRecommendationList(icon), ) underTest.setRecommendation(recommendation) Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/data/repository/MediaFilterRepositoryTest.kt +4 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.systemui.media.controls.data.repository import android.R import android.graphics.drawable.Icon import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.internal.logging.InstanceId Loading Loading @@ -124,11 +126,12 @@ class MediaFilterRepositoryTest : SysuiTestCase() { testScope.runTest { val smartspaceMediaData by collectLastValue(underTest.smartspaceMediaData) val icon = Icon.createWithResource(context, R.drawable.ic_media_play) val mediaRecommendation = SmartspaceMediaData( targetId = KEY_MEDIA_SMARTSPACE, isActive = true, recommendations = MediaTestHelper.getValidRecommendationList(context), recommendations = MediaTestHelper.getValidRecommendationList(icon), ) underTest.setRecommendation(mediaRecommendation) Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/domain/interactor/MediaCarouselInteractorTest.kt +8 −3 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.systemui.media.controls.domain.interactor import android.R import android.graphics.drawable.Icon import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase Loading Loading @@ -103,11 +105,12 @@ class MediaCarouselInteractorTest : SysuiTestCase() { collectLastValue(underTest.hasAnyMediaOrRecommendation) kosmos.fakeFeatureFlagsClassic.set(Flags.MEDIA_RETAIN_RECOMMENDATIONS, false) val icon = Icon.createWithResource(context, R.drawable.ic_media_play) val userMediaRecommendation = SmartspaceMediaData( targetId = KEY_MEDIA_SMARTSPACE, isActive = true, recommendations = MediaTestHelper.getValidRecommendationList(context), recommendations = MediaTestHelper.getValidRecommendationList(icon), ) val userMedia = MediaData().copy(active = false) Loading @@ -131,11 +134,12 @@ class MediaCarouselInteractorTest : SysuiTestCase() { collectLastValue(underTest.hasAnyMediaOrRecommendation) kosmos.fakeFeatureFlagsClassic.set(Flags.MEDIA_RETAIN_RECOMMENDATIONS, false) val icon = Icon.createWithResource(context, R.drawable.ic_media_play) val mediaRecommendation = SmartspaceMediaData( targetId = KEY_MEDIA_SMARTSPACE, isActive = true, recommendations = MediaTestHelper.getValidRecommendationList(context), recommendations = MediaTestHelper.getValidRecommendationList(icon), ) mediaFilterRepository.setRecommendation(mediaRecommendation) Loading @@ -158,11 +162,12 @@ class MediaCarouselInteractorTest : SysuiTestCase() { collectLastValue(underTest.hasAnyMediaOrRecommendation) kosmos.fakeFeatureFlagsClassic.set(Flags.MEDIA_RETAIN_RECOMMENDATIONS, false) val icon = Icon.createWithResource(context, R.drawable.ic_media_play) val mediaRecommendation = SmartspaceMediaData( targetId = KEY_MEDIA_SMARTSPACE, isActive = true, recommendations = MediaTestHelper.getValidRecommendationList(context), recommendations = MediaTestHelper.getValidRecommendationList(icon), ) mediaFilterRepository.setRecommendation(mediaRecommendation) Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/domain/interactor/MediaControlInteractorTest.kt 0 → 100644 +93 −0 Original line number Diff line number Diff line /* * Copyright (C) 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.systemui.media.controls.domain.interactor import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.internal.logging.InstanceId import com.android.systemui.SysuiTestCase import com.android.systemui.coroutines.collectLastValue import com.android.systemui.kosmos.testScope import com.android.systemui.media.controls.domain.pipeline.MediaDataFilterImpl import com.android.systemui.media.controls.domain.pipeline.interactor.MediaControlInteractor import com.android.systemui.media.controls.domain.pipeline.interactor.mediaControlInteractor import com.android.systemui.media.controls.domain.pipeline.mediaDataFilter import com.android.systemui.media.controls.shared.model.MediaData import com.android.systemui.media.controls.util.mediaInstanceId import com.android.systemui.statusbar.notificationLockscreenUserManager import com.android.systemui.testKosmos import com.android.systemui.util.mockito.whenever import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.test.runTest import org.junit.Test import org.junit.runner.RunWith @SmallTest @RunWith(AndroidJUnit4::class) class MediaControlInteractorTest : SysuiTestCase() { private val kosmos = testKosmos() private val testScope = kosmos.testScope private val mediaDataFilter: MediaDataFilterImpl = kosmos.mediaDataFilter private val instanceId: InstanceId = kosmos.mediaInstanceId private val notificationLockscreenUserManager = kosmos.notificationLockscreenUserManager private val underTest: MediaControlInteractor = kosmos.mediaControlInteractor @Test fun onMediaDataUpdated() = testScope.runTest { whenever(notificationLockscreenUserManager.isCurrentProfile(USER_ID)).thenReturn(true) whenever(notificationLockscreenUserManager.isProfileAvailable(USER_ID)).thenReturn(true) val controlModel by collectLastValue(underTest.mediaControl) var mediaData = MediaData(userId = USER_ID, instanceId = instanceId, artist = SESSION_ARTIST) mediaDataFilter.onMediaDataLoaded(KEY, KEY, mediaData) assertThat(controlModel?.instanceId).isEqualTo(instanceId) assertThat(controlModel?.artistName).isEqualTo(SESSION_ARTIST) mediaData = MediaData(userId = USER_ID, instanceId = instanceId, artist = SESSION_ARTIST_2) mediaDataFilter.onMediaDataLoaded(KEY, KEY, mediaData) assertThat(controlModel?.instanceId).isEqualTo(instanceId) assertThat(controlModel?.artistName).isEqualTo(SESSION_ARTIST_2) mediaData = MediaData( userId = USER_ID, instanceId = InstanceId.fakeInstanceId(2), artist = SESSION_ARTIST ) mediaDataFilter.onMediaDataLoaded(KEY, KEY, mediaData) assertThat(controlModel?.instanceId).isNotEqualTo(mediaData.instanceId) assertThat(controlModel?.artistName).isEqualTo(SESSION_ARTIST_2) } companion object { private const val USER_ID = 0 private const val KEY = "key" private const val SESSION_ARTIST = "artist" private const val SESSION_ARTIST_2 = "artist2" } }