-
Notifications
You must be signed in to change notification settings - Fork 666
/
TasksDaoTest.kt
94 lines (81 loc) · 3.32 KB
/
TasksDaoTest.kt
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
/*
* Copyright 2019, 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.example.android.architecture.blueprints.todoapp.data.source.local
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
import androidx.room.Room
import androidx.test.core.app.ApplicationProvider.getApplicationContext
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.example.android.architecture.blueprints.todoapp.data.Task
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.runBlockingTest
import org.hamcrest.CoreMatchers.`is`
import org.hamcrest.CoreMatchers.notNullValue
import org.hamcrest.MatcherAssert.assertThat
import org.junit.After
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
@ExperimentalCoroutinesApi
@RunWith(AndroidJUnit4::class)
@SmallTest
class TasksDaoTest {
private lateinit var database: ToDoDatabase
// Executes each task synchronously using Architecture Components.
@get:Rule
var instantExecutorRule = InstantTaskExecutorRule()
@Before
fun initDb() {
// using an in-memory database because the information stored here disappears when the
// process is killed
database = Room.inMemoryDatabaseBuilder(
getApplicationContext(),
ToDoDatabase::class.java
).build()
}
@After
fun closeDb() = database.close()
@Test
fun insertTaskAndGetById() = runBlockingTest {
// GIVEN - insert a task
val task = Task("title", "description")
database.taskDao().insertTask(task)
// WHEN - Get the task by id from the database
val loaded = database.taskDao().getTaskById(task.id)
// THEN - The loaded data contains the expected values
assertThat<Task>(loaded as Task, notNullValue())
assertThat(loaded.id, `is`(task.id))
assertThat(loaded.title, `is`(task.title))
assertThat(loaded.description, `is`(task.description))
assertThat(loaded.isCompleted, `is`(task.isCompleted))
}
@Test
fun updateTaskAndGetById() = runBlockingTest {
// When inserting a task
val originalTask = Task("title", "description")
database.taskDao().insertTask(originalTask)
// When the task is updated
val updatedTask = Task("new title", "new description", true, originalTask.id)
database.taskDao().updateTask(updatedTask)
// THEN - The loaded data contains the expected values
val loaded = database.taskDao().getTaskById(originalTask.id)
assertThat(loaded?.id, `is`(originalTask.id))
assertThat(loaded?.title, `is`("new title"))
assertThat(loaded?.description, `is`("new description"))
assertThat(loaded?.isCompleted, `is`(true))
}
}