blob: 644260941df26fd637df4f6589fbd2d816bf9e8b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
/*
* Copyright (C) 2023 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.customization.picker.notifications.ui.viewmodel
import androidx.test.filters.SmallTest
import com.android.customization.picker.notifications.data.repository.NotificationsRepository
import com.android.customization.picker.notifications.domain.interactor.NotificationsInteractor
import com.android.customization.picker.notifications.domain.interactor.NotificationsSnapshotRestorer
import com.android.wallpaper.testing.FakeSecureSettingsRepository
import com.android.wallpaper.testing.FakeSnapshotStore
import com.android.wallpaper.testing.collectLastValue
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.UnconfinedTestDispatcher
import kotlinx.coroutines.test.resetMain
import kotlinx.coroutines.test.runTest
import kotlinx.coroutines.test.setMain
import org.junit.After
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
@OptIn(ExperimentalCoroutinesApi::class)
@SmallTest
@RunWith(JUnit4::class)
class NotificationSectionViewModelTest {
private lateinit var underTest: NotificationSectionViewModel
private lateinit var testScope: TestScope
private lateinit var interactor: NotificationsInteractor
@Before
fun setUp() {
val testDispatcher = UnconfinedTestDispatcher()
Dispatchers.setMain(testDispatcher)
testScope = TestScope(testDispatcher)
interactor =
NotificationsInteractor(
repository =
NotificationsRepository(
scope = testScope.backgroundScope,
backgroundDispatcher = testDispatcher,
secureSettingsRepository = FakeSecureSettingsRepository(),
),
snapshotRestorer = {
NotificationsSnapshotRestorer(
interactor = interactor,
)
.apply { runBlocking { setUpSnapshotRestorer(FakeSnapshotStore()) } }
},
)
underTest =
NotificationSectionViewModel(
interactor = interactor,
)
}
@After
fun tearDown() {
Dispatchers.resetMain()
}
@Test
fun `toggles back and forth`() =
testScope.runTest {
val subtitleStringResId = collectLastValue(underTest.subtitleStringResourceId)
val isSwitchOn = collectLastValue(underTest.isSwitchOn)
val initialSubtitleStringRes = subtitleStringResId()
val initialIsSwitchOn = isSwitchOn()
underTest.onClicked()
assertThat(subtitleStringResId()).isNotEqualTo(initialSubtitleStringRes)
assertThat(isSwitchOn()).isNotEqualTo(initialIsSwitchOn)
underTest.onClicked()
assertThat(subtitleStringResId()).isEqualTo(initialSubtitleStringRes)
assertThat(isSwitchOn()).isEqualTo(initialIsSwitchOn)
}
}
|