-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathUseCaseTest.kt
More file actions
127 lines (109 loc) · 4.6 KB
/
Copy pathUseCaseTest.kt
File metadata and controls
127 lines (109 loc) · 4.6 KB
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
package me.nya_n.notificationnotifier
import com.google.common.truth.Truth.assertThat
import io.mockk.Runs
import io.mockk.every
import io.mockk.just
import io.mockk.mockk
import io.mockk.mockkStatic
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.UnconfinedTestDispatcher
import kotlinx.coroutines.test.runTest
import me.nya_n.notificationnotifier.data.repository.AppRepository
import me.nya_n.notificationnotifier.data.repository.UserSettingsRepository
import me.nya_n.notificationnotifier.domain.usecase.NotifyUseCase
import me.nya_n.notificationnotifier.domain.usecase.SaveAddressUseCase
import me.nya_n.notificationnotifier.domain.usecase.impl.LoadAppUseCaseImpl
import me.nya_n.notificationnotifier.domain.usecase.impl.NotifyUseCaseImpl
import me.nya_n.notificationnotifier.domain.usecase.impl.SaveAddressUseCaseImpl
import me.nya_n.notificationnotifier.model.AppException.PermissionDeniedException
import me.nya_n.notificationnotifier.model.InstalledApp
import me.nya_n.notificationnotifier.model.UserSettings
import org.junit.Assume.assumeTrue
import org.junit.Before
import org.junit.Test
@Suppress("NonAsciiCharacters", "RemoveRedundantBackticks")
class UseCaseTest {
@OptIn(ExperimentalCoroutinesApi::class)
private val testDispatcher = UnconfinedTestDispatcher()
private val userSettingsRepository: UserSettingsRepository = mockk()
private val appRepository: AppRepository = mockk()
private lateinit var loadAppUseCase: LoadAppUseCaseImpl
private lateinit var saveAddressUseCase: SaveAddressUseCase
private lateinit var notifyUseCase: NotifyUseCase
@Before
fun setUp() {
loadAppUseCase = LoadAppUseCaseImpl(userSettingsRepository, appRepository, testDispatcher)
saveAddressUseCase = SaveAddressUseCaseImpl(userSettingsRepository)
notifyUseCase = NotifyUseCaseImpl(userSettingsRepository, testDispatcher)
mockkStatic(android.text.TextUtils::class)
every { android.text.TextUtils.isDigitsOnly(any()) } answers {
val str = it.invocation.args[0] as? CharSequence
str?.all { char -> char.isDigit() } == true
}
}
@Test
fun `インストール済みアプリの取得_許可あり`() {
every { userSettingsRepository.getUserSettings() } returns UserSettings("", 0, true, false)
every { appRepository.loadInstalledAppList() } returns listOf(InstalledApp("", ""))
val ret = loadAppUseCase.loadInstalledAppList()
assertThat(ret.getOrNull()).apply {
isNotNull()
isNotEmpty()
}
}
@Test
fun `インストール済みアプリの取得_許可なし`() {
every { userSettingsRepository.getUserSettings() } returns UserSettings("", 0, false, false)
every { appRepository.loadInstalledAppList() } throws PermissionDeniedException()
val ret = loadAppUseCase.loadInstalledAppList()
assertThat(ret.exceptionOrNull()).apply {
isNotNull()
isInstanceOf(PermissionDeniedException::class.java)
}
}
@Test
fun `IPアドレスの追加_成功`() {
every { userSettingsRepository.getUserSettings() } returns UserSettings(
"192.168.10.18",
8484,
true,
false
)
every { userSettingsRepository.saveUserSettings(any()) } just Runs
assertThat(saveAddressUseCase("192.168.10.18:8484").getOrNull()).isNotNull()
}
@Test
fun `IPアドレスの追加_失敗_portなし`() {
assertThat(saveAddressUseCase("192.168.11.4").exceptionOrNull()).isNotNull()
}
@Test
fun `IPアドレスの追加_失敗_hostなし`() {
assertThat(saveAddressUseCase(":8484").exceptionOrNull()).isNotNull()
}
@Test
fun `IPアドレスの追加_失敗_portが数値じゃない`() {
assertThat(saveAddressUseCase("192.168.10.18:not_number").exceptionOrNull()).isNotNull()
}
@Test
fun `通知送信_失敗`() {
runTest(testDispatcher) {
assertThat(notifyUseCase("通知テスト").exceptionOrNull()).isNotNull()
}
}
@Test
@LocalOnly
fun `通知送信_成功`() {
// CI環境で実行しないようにする
assumeTrue("Local only", System.getenv("CI") == null)
// テスト環境のIPアドレスに変更する
every { userSettingsRepository.getUserSettings() } returns UserSettings(
"192.168.10.18",
8484,
true,
false
)
runTest(testDispatcher) {
assertThat(notifyUseCase("通知テスト").getOrNull()).isNotNull()
}
}
}