Skip to content

Commit 42d907a

Browse files
committed
Test: Replace deprecated test coroutine dispatcher and run blocking test
1 parent c477a63 commit 42d907a

File tree

7 files changed

+74
-42
lines changed

7 files changed

+74
-42
lines changed

Simplenote/src/test/java/com/automattic/simplenote/usecases/GetTagsUseCaseTest.kt

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,18 @@
11
package com.automattic.simplenote.usecases
22

33
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
4+
import com.automattic.simplenote.CoroutineTestRule
45
import com.automattic.simplenote.models.Note
56
import com.automattic.simplenote.models.Tag
67
import com.automattic.simplenote.models.TagItem
7-
import com.automattic.simplenote.repositories.CollaboratorsRepository
88
import com.automattic.simplenote.repositories.SimperiumCollaboratorsRepository
99
import com.automattic.simplenote.repositories.TagsRepository
1010
import com.simperium.client.Bucket
1111
import kotlinx.coroutines.ExperimentalCoroutinesApi
12-
import kotlinx.coroutines.test.TestCoroutineDispatcher
13-
import kotlinx.coroutines.test.runBlockingTest
12+
import kotlinx.coroutines.test.UnconfinedTestDispatcher
13+
import kotlinx.coroutines.test.runTest
1414
import org.junit.Assert.assertEquals
1515
import org.junit.Before
16-
import org.junit.Ignore
1716
import org.junit.Rule
1817
import org.junit.Test
1918
import org.mockito.Mockito.mock
@@ -23,11 +22,17 @@ import org.mockito.kotlin.stub
2322

2423
@ExperimentalCoroutinesApi
2524
class GetTagsUseCaseTest {
26-
@get:Rule val rule = InstantTaskExecutorRule()
25+
@get:Rule
26+
val rule = InstantTaskExecutorRule()
27+
@get:Rule
28+
val coroutinesTestRule = CoroutineTestRule(UnconfinedTestDispatcher())
2729

2830
private val notesBucket = mock(Bucket::class.java) as Bucket<Note>
2931
private val tagsRepository: TagsRepository = mock(TagsRepository::class.java)
30-
private val collaboratorsRepository = SimperiumCollaboratorsRepository(notesBucket, TestCoroutineDispatcher())
32+
private val collaboratorsRepository = SimperiumCollaboratorsRepository(
33+
notesBucket,
34+
coroutinesTestRule.testDispatcher
35+
)
3136
private val getTagsUseCase: GetTagsUseCase = GetTagsUseCase(tagsRepository, collaboratorsRepository)
3237
private val tagItems = listOf(
3338
TagItem(Tag("tag1"), 0),
@@ -46,7 +51,7 @@ class GetTagsUseCaseTest {
4651
}
4752

4853
@Test
49-
fun allTagsShouldFilterCollaborators() = runBlockingTest {
54+
fun allTagsShouldFilterCollaborators() = runTest {
5055
tagsRepository.stub { onBlocking { allTags() }.doReturn(tagItems) }
5156

5257

@@ -59,7 +64,7 @@ class GetTagsUseCaseTest {
5964
}
6065

6166
@Test
62-
fun searchTagsShouldFilterCollaborators() = runBlockingTest {
67+
fun searchTagsShouldFilterCollaborators() = runTest {
6368
val searchTagItems = listOf(
6469
TagItem(Tag("tag1"), 0),
6570
TagItem(Tag("tag2"), 2),

Simplenote/src/test/java/com/automattic/simplenote/usecases/ValidateTagUseCaseTest.kt

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,30 @@
11
package com.automattic.simplenote.usecases
22

3+
import com.automattic.simplenote.CoroutineTestRule
34
import com.automattic.simplenote.models.Note
45
import com.automattic.simplenote.repositories.SimperiumCollaboratorsRepository
56
import com.automattic.simplenote.repositories.TagsRepository
67
import com.automattic.simplenote.usecases.ValidateTagUseCase.TagValidationResult
78
import com.simperium.client.Bucket
89
import kotlinx.coroutines.ExperimentalCoroutinesApi
9-
import kotlinx.coroutines.test.TestCoroutineDispatcher
10+
import kotlinx.coroutines.test.UnconfinedTestDispatcher
1011
import org.junit.Assert.assertEquals
12+
import org.junit.Rule
1113
import org.junit.Test
1214
import org.mockito.Mockito
1315
import org.mockito.kotlin.any
1416
import org.mockito.kotlin.whenever
1517

1618
@ExperimentalCoroutinesApi
1719
class ValidateTagUseCaseTest {
20+
@get:Rule
21+
val coroutinesTestRule = CoroutineTestRule(UnconfinedTestDispatcher())
1822
private val notesBucket = Mockito.mock(Bucket::class.java) as Bucket<Note>
1923
private val tagsRepository: TagsRepository = Mockito.mock(TagsRepository::class.java)
20-
private val collaboratorsRepository = SimperiumCollaboratorsRepository(notesBucket, TestCoroutineDispatcher())
24+
private val collaboratorsRepository = SimperiumCollaboratorsRepository(
25+
notesBucket,
26+
coroutinesTestRule.testDispatcher
27+
)
2128
private val validateTagUseCase = ValidateTagUseCase(tagsRepository, collaboratorsRepository)
2229

2330
@Test

Simplenote/src/test/java/com/automattic/simplenote/viewmodels/AddTagViewModelTest.kt

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.automattic.simplenote.viewmodels
22

33
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
4+
import com.automattic.simplenote.CoroutineTestRule
45
import com.automattic.simplenote.R
56
import com.automattic.simplenote.models.Note
67
import com.automattic.simplenote.repositories.SimperiumCollaboratorsRepository
@@ -9,7 +10,7 @@ import com.automattic.simplenote.usecases.ValidateTagUseCase
910
import com.automattic.simplenote.utils.getLocalRandomStringOfLen
1011
import com.simperium.client.Bucket
1112
import kotlinx.coroutines.ExperimentalCoroutinesApi
12-
import kotlinx.coroutines.test.TestCoroutineDispatcher
13+
import kotlinx.coroutines.test.UnconfinedTestDispatcher
1314
import org.junit.Assert.assertEquals
1415
import org.junit.Assert.assertNull
1516
import org.junit.Rule
@@ -19,11 +20,17 @@ import org.mockito.Mockito.mock
1920

2021
@ExperimentalCoroutinesApi
2122
class AddTagViewModelTest {
22-
@get:Rule val rule = InstantTaskExecutorRule()
23+
@get:Rule
24+
val rule = InstantTaskExecutorRule()
25+
@get:Rule
26+
val coroutinesTestRule = CoroutineTestRule(UnconfinedTestDispatcher())
2327

2428
private val fakeTagsRepository = mock(TagsRepository::class.java)
2529
private val notesBucket = mock(Bucket::class.java) as Bucket<Note>
26-
private val collaboratorsRepository = SimperiumCollaboratorsRepository(notesBucket, TestCoroutineDispatcher())
30+
private val collaboratorsRepository = SimperiumCollaboratorsRepository(
31+
notesBucket,
32+
coroutinesTestRule.testDispatcher
33+
)
2734
private val validateTagUseCase = ValidateTagUseCase(fakeTagsRepository, collaboratorsRepository)
2835
private val viewModel = AddTagViewModel(fakeTagsRepository, validateTagUseCase)
2936

Simplenote/src/test/java/com/automattic/simplenote/viewmodels/CompleteMagicLinkViewModelTest.kt

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,45 @@
11
package com.automattic.simplenote.viewmodels
22

33
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
4+
import com.automattic.simplenote.CoroutineTestRule
45
import com.automattic.simplenote.repositories.MagicLinkRepository
56
import com.automattic.simplenote.repositories.MagicLinkResponseResult
67
import kotlinx.coroutines.ExperimentalCoroutinesApi
7-
import kotlinx.coroutines.test.TestCoroutineDispatcher
8-
import kotlinx.coroutines.test.runBlockingTest
8+
import kotlinx.coroutines.test.UnconfinedTestDispatcher
9+
import kotlinx.coroutines.test.runTest
910
import org.junit.Test
1011
import org.mockito.Mockito
1112

1213
import org.junit.Assert.assertEquals
13-
import org.junit.Before
1414
import org.junit.Rule
1515

1616
const val AUTH_KEY_TEST = "auth_key_test"
1717
const val AUTH_CODE_TEST = "auth_code_test"
1818

1919
@ExperimentalCoroutinesApi
2020
class CompleteMagicLinkViewModelTest {
21-
2221
@get:Rule
2322
val instantExecutorRule = InstantTaskExecutorRule()
23+
@get:Rule
24+
val coroutinesTestRule = CoroutineTestRule(UnconfinedTestDispatcher())
2425

2526
private val repository: MagicLinkRepository = Mockito.mock(MagicLinkRepository::class.java)
26-
27-
@Before
28-
fun setup() {
29-
30-
}
27+
private val viewModel = CompleteMagicLinkViewModel(
28+
repository,
29+
coroutinesTestRule.testDispatcher
30+
)
3131

3232
@Test
33-
fun instantiateViewModel() = runBlockingTest {
34-
val viewModel = CompleteMagicLinkViewModel(repository, TestCoroutineDispatcher())
33+
fun instantiateViewModel() = runTest {
3534
assertEquals(MagicLinkUiState.Waiting, viewModel.magicLinkUiState.value)
3635
}
3736

3837
@Test
39-
fun firingPostRequestShouldLeadToSuccess() = runBlockingTest {
38+
fun firingPostRequestShouldLeadToSuccess() = runTest {
4039
Mockito.`when`(
4140
repository.completeLogin(AUTH_KEY_TEST, AUTH_CODE_TEST)
4241
).thenReturn(MagicLinkResponseResult.MagicLinkCompleteSuccess(AUTH_KEY_TEST, AUTH_CODE_TEST))
4342

44-
val viewModel = CompleteMagicLinkViewModel(repository, TestCoroutineDispatcher())
4543
val states = mutableListOf<MagicLinkUiState>()
4644
viewModel.magicLinkUiState.observeForever {
4745
states.add(it)
@@ -54,12 +52,11 @@ class CompleteMagicLinkViewModelTest {
5452
}
5553

5654
@Test
57-
fun firingPostRequestShouldLeadToError() = runBlockingTest {
55+
fun firingPostRequestShouldLeadToError() = runTest {
5856
Mockito.`when`(
5957
repository.completeLogin(AUTH_KEY_TEST, AUTH_CODE_TEST)
6058
).thenReturn(MagicLinkResponseResult.MagicLinkError(code = 400))
6159

62-
val viewModel = CompleteMagicLinkViewModel(repository, TestCoroutineDispatcher())
6360
val states = mutableListOf<MagicLinkUiState>()
6461
viewModel.magicLinkUiState.observeForever {
6562
states.add(it)

Simplenote/src/test/java/com/automattic/simplenote/viewmodels/NoteEditorViewModelTest.kt

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.automattic.simplenote.viewmodels
22

33
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
4+
import com.automattic.simplenote.CoroutineTestRule
45
import com.automattic.simplenote.models.Note
56
import com.automattic.simplenote.repositories.SimperiumCollaboratorsRepository
67
import com.automattic.simplenote.repositories.TagsRepository
@@ -9,10 +10,9 @@ import com.automattic.simplenote.usecases.ValidateTagUseCase
910
import com.automattic.simplenote.viewmodels.NoteEditorViewModel.NoteEditorEvent
1011
import com.simperium.client.Bucket
1112
import kotlinx.coroutines.ExperimentalCoroutinesApi
12-
import kotlinx.coroutines.test.TestCoroutineDispatcher
13+
import kotlinx.coroutines.test.UnconfinedTestDispatcher
1314
import org.junit.Assert.assertEquals
1415
import org.junit.Before
15-
import org.junit.Ignore
1616
import org.junit.Rule
1717
import org.junit.Test
1818
import org.mockito.Mockito.mock
@@ -23,10 +23,15 @@ import org.mockito.kotlin.whenever
2323
class NoteEditorViewModelTest {
2424
@get:Rule
2525
val rule = InstantTaskExecutorRule()
26+
@get:Rule
27+
val coroutinesTestRule = CoroutineTestRule(UnconfinedTestDispatcher())
2628

2729
private val tagsRepository: TagsRepository = mock(TagsRepository::class.java)
2830
private val notesBucket = mock(Bucket::class.java) as Bucket<Note>
29-
private val collaboratorsRepository = SimperiumCollaboratorsRepository(notesBucket, TestCoroutineDispatcher())
31+
private val collaboratorsRepository = SimperiumCollaboratorsRepository(
32+
notesBucket,
33+
coroutinesTestRule.testDispatcher
34+
)
3035
private val getTagsUseCase = GetTagsUseCase(tagsRepository, collaboratorsRepository)
3136
private val validateTagUseCase = ValidateTagUseCase(tagsRepository, collaboratorsRepository)
3237
private val viewModel = NoteEditorViewModel(getTagsUseCase, validateTagUseCase)

Simplenote/src/test/java/com/automattic/simplenote/viewmodels/RequestMagicLinkViewModelTest.kt

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
package com.automattic.simplenote.viewmodels
22

33
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
4+
import com.automattic.simplenote.CoroutineTestRule
45
import com.automattic.simplenote.repositories.MagicLinkRepository
56
import com.automattic.simplenote.repositories.MagicLinkResponseResult
67
import kotlinx.coroutines.ExperimentalCoroutinesApi
7-
import kotlinx.coroutines.test.TestCoroutineDispatcher
8-
import kotlinx.coroutines.test.runBlockingTest
8+
import kotlinx.coroutines.test.UnconfinedTestDispatcher
9+
import kotlinx.coroutines.test.runTest
910
import org.junit.Test
1011
import org.mockito.Mockito
1112

@@ -18,22 +19,26 @@ const val email = "[email protected]"
1819
class RequestMagicLinkViewModelTest {
1920
@get:Rule
2021
val instantExecutorRule = InstantTaskExecutorRule()
22+
@get:Rule
23+
val coroutinesTestRule = CoroutineTestRule(UnconfinedTestDispatcher())
2124

2225
private val repository: MagicLinkRepository = Mockito.mock(MagicLinkRepository::class.java)
26+
private val viewModel = RequestMagicLinkViewModel(
27+
repository,
28+
coroutinesTestRule.testDispatcher
29+
)
2330

2431
@Test
25-
fun instantiateViewModel() = runBlockingTest {
26-
val viewModel = RequestMagicLinkViewModel(repository, TestCoroutineDispatcher())
32+
fun instantiateViewModel() = runTest {
2733
assertEquals(MagicLinkRequestUiState.Waiting, viewModel.magicLinkRequestUiState.value)
2834
}
2935

3036
@Test
31-
fun firingPostRequestShouldLeadToSuccess() = runBlockingTest {
37+
fun firingPostRequestShouldLeadToSuccess() = runTest {
3238
Mockito.`when`(
3339
repository.requestLogin(email)
3440
).thenReturn(MagicLinkResponseResult.MagicLinkRequestSuccess(code = 200))
3541

36-
val viewModel = RequestMagicLinkViewModel(repository, TestCoroutineDispatcher())
3742
val states = mutableListOf<MagicLinkRequestUiState>()
3843
viewModel.magicLinkRequestUiState.observeForever {
3944
states.add(it)
@@ -45,12 +50,11 @@ class RequestMagicLinkViewModelTest {
4550
}
4651

4752
@Test
48-
fun firingPostRequestShouldLeadToError() = runBlockingTest {
53+
fun firingPostRequestShouldLeadToError() = runTest {
4954
Mockito.`when`(
5055
repository.requestLogin(email)
5156
).thenReturn(MagicLinkResponseResult.MagicLinkError(code = 400))
5257

53-
val viewModel = RequestMagicLinkViewModel(repository, TestCoroutineDispatcher())
5458
val states = mutableListOf<MagicLinkRequestUiState>()
5559
viewModel.magicLinkRequestUiState.observeForever {
5660
states.add(it)

Simplenote/src/test/java/com/automattic/simplenote/viewmodels/TagDialogViewModelTest.kt

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.automattic.simplenote.viewmodels
22

33
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
4+
import com.automattic.simplenote.CoroutineTestRule
45
import com.automattic.simplenote.R
56
import com.automattic.simplenote.models.Note
67
import com.automattic.simplenote.models.Tag
@@ -10,7 +11,7 @@ import com.automattic.simplenote.usecases.ValidateTagUseCase
1011
import com.automattic.simplenote.utils.getLocalRandomStringOfLen
1112
import com.simperium.client.Bucket
1213
import kotlinx.coroutines.ExperimentalCoroutinesApi
13-
import kotlinx.coroutines.test.TestCoroutineDispatcher
14+
import kotlinx.coroutines.test.UnconfinedTestDispatcher
1415
import org.junit.Assert.*
1516
import org.junit.Before
1617
import org.junit.Rule
@@ -20,11 +21,17 @@ import org.mockito.Mockito.mock
2021

2122
@ExperimentalCoroutinesApi
2223
class TagDialogViewModelTest {
23-
@get:Rule val rule = InstantTaskExecutorRule()
24+
@get:Rule
25+
val rule = InstantTaskExecutorRule()
26+
@get:Rule
27+
val coroutinesTestRule = CoroutineTestRule(UnconfinedTestDispatcher())
2428

2529
private val fakeTagsRepository = mock(TagsRepository::class.java)
2630
private val notesBucket = mock(Bucket::class.java) as Bucket<Note>
27-
private val collaboratorsRepository = SimperiumCollaboratorsRepository(notesBucket, TestCoroutineDispatcher())
31+
private val collaboratorsRepository = SimperiumCollaboratorsRepository(
32+
notesBucket,
33+
coroutinesTestRule.testDispatcher
34+
)
2835
private val validateTagUseCase = ValidateTagUseCase(fakeTagsRepository, collaboratorsRepository)
2936
private val viewModel = TagDialogViewModel(fakeTagsRepository, validateTagUseCase)
3037
private val tagName = "tag1"

0 commit comments

Comments
 (0)