19e828633846e3c3ff9738dbc567fe16c05e5d1b4Yigit Boyar/*
29e828633846e3c3ff9738dbc567fe16c05e5d1b4Yigit Boyar * Copyright (C) 2018 The Android Open Source Project
39e828633846e3c3ff9738dbc567fe16c05e5d1b4Yigit Boyar *
49e828633846e3c3ff9738dbc567fe16c05e5d1b4Yigit Boyar * Licensed under the Apache License, Version 2.0 (the "License");
59e828633846e3c3ff9738dbc567fe16c05e5d1b4Yigit Boyar * you may not use this file except in compliance with the License.
69e828633846e3c3ff9738dbc567fe16c05e5d1b4Yigit Boyar * You may obtain a copy of the License at
79e828633846e3c3ff9738dbc567fe16c05e5d1b4Yigit Boyar *
89e828633846e3c3ff9738dbc567fe16c05e5d1b4Yigit Boyar *      http://www.apache.org/licenses/LICENSE-2.0
99e828633846e3c3ff9738dbc567fe16c05e5d1b4Yigit Boyar *
109e828633846e3c3ff9738dbc567fe16c05e5d1b4Yigit Boyar * Unless required by applicable law or agreed to in writing, software
119e828633846e3c3ff9738dbc567fe16c05e5d1b4Yigit Boyar * distributed under the License is distributed on an "AS IS" BASIS,
129e828633846e3c3ff9738dbc567fe16c05e5d1b4Yigit Boyar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139e828633846e3c3ff9738dbc567fe16c05e5d1b4Yigit Boyar * See the License for the specific language governing permissions and
149e828633846e3c3ff9738dbc567fe16c05e5d1b4Yigit Boyar * limitations under the License.
159e828633846e3c3ff9738dbc567fe16c05e5d1b4Yigit Boyar */
16bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viverettepackage androidx.room.integration.kotlintestapp.test
179e828633846e3c3ff9738dbc567fe16c05e5d1b4Yigit Boyar
1883d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyarimport android.os.Build
1983d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyarimport android.support.test.filters.SdkSuppress
209e828633846e3c3ff9738dbc567fe16c05e5d1b4Yigit Boyarimport android.support.test.runner.AndroidJUnit4
21bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viveretteimport androidx.room.integration.kotlintestapp.dao.DependencyDao
22bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viveretteimport androidx.room.integration.kotlintestapp.vo.DataClassFromDependency
23bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viveretteimport androidx.room.integration.kotlintestapp.vo.EmbeddedFromDependency
24bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viveretteimport androidx.room.integration.kotlintestapp.vo.PojoFromDependency
259e828633846e3c3ff9738dbc567fe16c05e5d1b4Yigit Boyarimport org.hamcrest.CoreMatchers.`is`
2683d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyarimport org.hamcrest.CoreMatchers.notNullValue
2783d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyarimport org.hamcrest.CoreMatchers.nullValue
289e828633846e3c3ff9738dbc567fe16c05e5d1b4Yigit Boyarimport org.hamcrest.MatcherAssert.assertThat
2983d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyarimport org.junit.Before
309e828633846e3c3ff9738dbc567fe16c05e5d1b4Yigit Boyarimport org.junit.Test
319e828633846e3c3ff9738dbc567fe16c05e5d1b4Yigit Boyarimport org.junit.runner.RunWith
329e828633846e3c3ff9738dbc567fe16c05e5d1b4Yigit Boyar
339e828633846e3c3ff9738dbc567fe16c05e5d1b4Yigit Boyar@RunWith(AndroidJUnit4::class)
349e828633846e3c3ff9738dbc567fe16c05e5d1b4Yigit Boyarclass DependencyDaoTest : TestDatabaseTest() {
3583d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar    lateinit var dao: DependencyDao
3683d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar    @Before
3783d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar    fun init() {
3883d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar        dao = database.dependencyDao()
3983d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar    }
4083d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar
419e828633846e3c3ff9738dbc567fe16c05e5d1b4Yigit Boyar    @Test
429e828633846e3c3ff9738dbc567fe16c05e5d1b4Yigit Boyar    fun insertAndGet() {
4383d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar        val data = insertSample(3)
4483d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar        assertThat(dao.selectAll(), `is`(listOf(data)))
4583d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar    }
4683d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar
4783d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar    @Test
4883d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar    fun insertAndGetByQuery() {
4983d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar        val data = insertSample(3)
5083d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar        assertThat(dao.findById(3), `is`(data))
5183d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar        assertThat(dao.findById(5), `is`(nullValue()))
5283d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar    }
5383d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar
5483d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar    @Test
5583d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar    fun insertAndGetByQuery_embedded() {
5683d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar        val data = insertSample(3)
5783d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar        assertThat(dao.findEmbedded(3), `is`(EmbeddedFromDependency(data)))
5883d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar        assertThat(dao.findEmbedded(5), `is`(nullValue()))
5983d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar    }
6083d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar
6183d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar    @Test
6283d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar    fun insertAndGetByQuery_pojo() {
6383d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar        val data = insertSample(3)
6483d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar        assertThat(dao.findPojo(3), `is`(PojoFromDependency(
6583d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar                id = data.id,
6683d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar                name = data.name)))
6783d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar        assertThat(dao.findPojo(5), `is`(nullValue()))
6883d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar    }
6983d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar
7083d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.LOLLIPOP)
7183d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar    @Test
7283d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar    fun getRelation() {
7383d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar        val foo1 = DataClassFromDependency(
749e828633846e3c3ff9738dbc567fe16c05e5d1b4Yigit Boyar                id = 3,
759e828633846e3c3ff9738dbc567fe16c05e5d1b4Yigit Boyar                name = "foo"
769e828633846e3c3ff9738dbc567fe16c05e5d1b4Yigit Boyar        )
7783d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar        val foo2 = DataClassFromDependency(
7883d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar                id = 4,
7983d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar                name = "foo"
8083d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar        )
8183d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar        val bar = DataClassFromDependency(
8283d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar                id = 5,
8383d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar                name = "bar"
8483d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar        )
8583d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar        dao.insert(foo1, foo2, bar)
8683d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar        val fooList = dao.relation("foo")
8783d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar        assertThat(fooList.sharedName, `is`("foo"))
8883d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar        assertThat(fooList, `is`(notNullValue()))
8983d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar        assertThat(fooList.dataItems, `is`(listOf(foo1, foo2)))
9083d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar
9183d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar        val barList = dao.relation("bar")
9283d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar        assertThat(barList.sharedName, `is`("bar"))
9383d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar        assertThat(barList, `is`(notNullValue()))
9483d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar        assertThat(barList.dataItems, `is`(listOf(bar)))
9583d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar
9683d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar        val bazList = dao.relation("baz")
9783d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar        assertThat(bazList.sharedName, `is`("baz"))
9883d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar        assertThat(bazList, `is`(notNullValue()))
9983d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar        assertThat(bazList.dataItems, `is`(emptyList()))
10083d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar    }
10183d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar
10283d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar    private fun insertSample(id: Int): DataClassFromDependency {
10383d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar        val data = DataClassFromDependency(
10483d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar                id = id,
10583d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar                name = "foo"
10683d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar        )
1079e828633846e3c3ff9738dbc567fe16c05e5d1b4Yigit Boyar        dao.insert(data)
10883d1d1ecd4ec87a0fa90e3e8367c7a48e8bf6e33Yigit Boyar        return data
1099e828633846e3c3ff9738dbc567fe16c05e5d1b4Yigit Boyar    }
110bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viverette}
111