1+ package me.nya_n.notificationnotifier
2+
3+ import androidx.test.ext.junit.runners.AndroidJUnit4
4+ import androidx.test.platform.app.InstrumentationRegistry
5+ import com.google.common.truth.Truth.assertThat
6+ import kotlinx.coroutines.ExperimentalCoroutinesApi
7+ import kotlinx.coroutines.test.UnconfinedTestDispatcher
8+ import kotlinx.coroutines.test.runTest
9+ import me.nya_n.notificationnotifier.data.repository.AppRepository
10+ import me.nya_n.notificationnotifier.data.repository.impl.AppRepositoryImpl
11+ import me.nya_n.notificationnotifier.data.repository.source.DB
12+ import me.nya_n.notificationnotifier.model.FilterCondition
13+ import me.nya_n.notificationnotifier.model.InstalledApp
14+ import org.junit.Before
15+ import org.junit.Test
16+ import org.junit.runner.RunWith
17+
18+ @Suppress(" NonAsciiCharacters" )
19+ @RunWith(AndroidJUnit4 ::class )
20+ class AppRepositoryTest {
21+ @OptIn(ExperimentalCoroutinesApi ::class )
22+ private val testDispatcher = UnconfinedTestDispatcher ()
23+ private lateinit var appRepository: AppRepository
24+
25+ @Before
26+ fun setUp () {
27+ val appContext = InstrumentationRegistry .getInstrumentation().targetContext
28+ val db = DB .get(appContext, isInMemory = true ).apply {
29+ clearAllTables()
30+ }
31+ appRepository = AppRepositoryImpl (
32+ appContext.packageManager,
33+ db.filterConditionDao(),
34+ db.targetAppDao(),
35+ testDispatcher
36+ )
37+ }
38+
39+ @Test
40+ fun `通知対象アプリの追加、取得、削除` () {
41+ runTest(testDispatcher) {
42+ val app = InstalledApp (" sample" , " com.sample.www" )
43+ appRepository.addTargetApp(app)
44+
45+ val added = appRepository.getTargetAppList()
46+ assertThat(added).hasSize(1 )
47+ assertThat(added.first()).isEqualTo(app)
48+
49+ appRepository.deleteTargetApp(app)
50+ val deleted = appRepository.getTargetAppList()
51+ assertThat(deleted).isEmpty()
52+ }
53+ }
54+
55+
56+ @Test
57+ fun `通知条件の追加、取得、更新` () {
58+ runTest(testDispatcher) {
59+ val packageName = " com.sample.www"
60+
61+ // データなし
62+ assertThat(appRepository.getFilterCondition(packageName)).isNull()
63+ assertThat(appRepository.getFilterConditionOrDefault(packageName))
64+ .isEqualTo(FilterCondition .default(packageName))
65+
66+ // 追加
67+ val added = FilterCondition (packageName, false , " test" )
68+ appRepository.saveFilterCondition(added)
69+ assertThat(appRepository.getFilterCondition(packageName)).isEqualTo(added)
70+
71+ // メッセージ条件の更新
72+ val updatedCondition = added.copy(condition = " updated" )
73+ appRepository.saveFilterCondition(updatedCondition)
74+ assertThat(appRepository.getFilterCondition(packageName)).isEqualTo(updatedCondition)
75+
76+ // サマリー条件の更新
77+ val updatedSummary = updatedCondition.copy(isIgnoreSummary = true )
78+ appRepository.saveFilterCondition(updatedSummary)
79+ assertThat(appRepository.getFilterCondition(packageName)).isEqualTo(updatedSummary)
80+ }
81+ }
82+ }
0 commit comments