@@ -3,23 +3,18 @@ package com.raghav.mynotes.ui
3
3
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
4
4
import com.google.common.truth.Truth.assertThat
5
5
import com.raghav.mynotes.models.TaskEntity
6
- import com.raghav.mynotes.repository.TasksRepository
7
- import com.raghav.mynotes.utils.Resource
6
+ import com.raghav.mynotes.utils.FakeTaskRepositoryImpl
8
7
import com.raghav.mynotes.utils.TestDispatchers
9
8
import getOrAwaitValueTest
10
9
import kotlinx.coroutines.ExperimentalCoroutinesApi
11
- import kotlinx.coroutines.flow.flow
12
- import kotlinx.coroutines.runBlocking
10
+ import kotlinx.coroutines.test.UnconfinedTestDispatcher
11
+ import kotlinx.coroutines.test.runTest
12
+ import org.junit.After
13
13
import org.junit.Before
14
14
import org.junit.Rule
15
15
import org.junit.Test
16
- import org.junit.runner.RunWith
17
- import org.mockito.Mock
18
- import org.mockito.Mockito.`when`
19
- import org.mockito.junit.MockitoJUnitRunner
20
16
21
17
@ExperimentalCoroutinesApi
22
- @RunWith(MockitoJUnitRunner ::class )
23
18
class AllTasksVMTest {
24
19
25
20
/* *
@@ -29,11 +24,9 @@ class AllTasksVMTest {
29
24
@get:Rule
30
25
var instantTaskExecutorRule = InstantTaskExecutorRule ()
31
26
private lateinit var allTasksVM: AllTasksVM
32
-
33
- @Mock
34
- private lateinit var mockRepository: TasksRepository
27
+ private val fakeTaskRepositoryImpl = FakeTaskRepositoryImpl ()
35
28
private val dispatchers = TestDispatchers ()
36
- private val tasksList: List < TaskEntity > = listOf (
29
+ private val tasksList = mutableListOf (
37
30
TaskEntity (
38
31
id = 0 ,
39
32
title = " task1" ,
@@ -45,38 +38,60 @@ class AllTasksVMTest {
45
38
title = " task2" ,
46
39
description = " des2" ,
47
40
deadLine = " Friday, 29 April 2022"
48
- ),
41
+ )
49
42
)
43
+ private val sampleTask = tasksList[0 ]
50
44
51
45
@Before
52
- fun setUp () {
53
- allTasksVM = AllTasksVM (mockRepository, dispatchers)
46
+ fun setupViewModel () {
47
+ allTasksVM = AllTasksVM (fakeTaskRepositoryImpl, dispatchers)
48
+ }
49
+
50
+ @After
51
+ fun clearViewModel () {
52
+ allTasksVM.clear()
54
53
}
55
54
56
55
/* *
57
56
* Test cases follow naming convention:
58
57
* unitUnderTest_inputProvidedToUnit_resultExpected
59
58
* */
60
59
@Test
61
- fun getTasks_notSortedByDeadline_returnsUnSortedTasksList () = runBlocking {
62
- val testFlow = flow { emit(tasksList) }
60
+ fun getTasks_notSortedByDeadline_returnsUnSortedTasksList () =
61
+ runTest(UnconfinedTestDispatcher ()) {
62
+ allTasksVM.getTasks(false )
63
+ val receivedList = allTasksVM.tasks.getOrAwaitValueTest().data
64
+ assertThat(receivedList).isEqualTo(tasksList)
65
+ }
63
66
64
- ` when `(mockRepository.getAllTasks()).thenReturn(testFlow)
65
- allTasksVM.getTasks()
66
- val value = allTasksVM.tasks.getOrAwaitValueTest( )
67
-
68
- assertThat(value.data ).isEqualTo(Resource . Success (tasksList).data )
67
+ @Test
68
+ fun getTasks_sortedByDeadline_returnsSortedTasksList () = runTest( UnconfinedTestDispatcher ()) {
69
+ allTasksVM.getTasks( true )
70
+ val receivedList = allTasksVM.tasks.getOrAwaitValueTest().data
71
+ assertThat(receivedList ).isEqualTo(tasksList.reversed() )
69
72
}
70
73
71
74
@Test
72
- fun getTasks_sortedByDeadline_returnsSortedTasksList () = runBlocking {
73
- val testFlow = flow { emit(tasksList) }
75
+ fun deleteTask_task_taskDeleted () = runTest(UnconfinedTestDispatcher ()) {
76
+ allTasksVM.deleteTask(sampleTask)
77
+ allTasksVM.getTasks()
78
+ val receivedList = allTasksVM.tasks.getOrAwaitValueTest().data
79
+ assertThat(receivedList).doesNotContain(sampleTask)
80
+ }
74
81
75
- `when `(mockRepository.getAllTasks()).thenReturn(testFlow)
76
- allTasksVM.getTasks(true )
77
- val value = allTasksVM.tasks.getOrAwaitValueTest()
82
+ @Test
83
+ fun getSortCheckBoxState_returnsFalseIfNull () = runTest(UnconfinedTestDispatcher ()) {
84
+ allTasksVM.getSortCheckBoxState()
85
+ val state = allTasksVM.checkBoxState.getOrAwaitValueTest()
86
+ assertThat(state).isFalse()
87
+ }
78
88
79
- assertThat(value.data).isEqualTo(Resource .Success (tasksList).data?.reversed())
89
+ @Test
90
+ fun saveSortCheckBoxState_true_stateSaved () = runTest(UnconfinedTestDispatcher ()) {
91
+ allTasksVM.saveSortCheckBoxState(true )
92
+ allTasksVM.getSortCheckBoxState()
93
+ val state = allTasksVM.checkBoxState.getOrAwaitValueTest()
94
+ assertThat(state).isTrue()
80
95
}
81
96
}
82
97
0 commit comments