134f575b4b17fe635684e76e02685978477538622Florina Muntenescu/* 234f575b4b17fe635684e76e02685978477538622Florina Muntenescu * Copyright (C) 2017 The Android Open Source Project 334f575b4b17fe635684e76e02685978477538622Florina Muntenescu * 434f575b4b17fe635684e76e02685978477538622Florina Muntenescu * Licensed under the Apache License, Version 2.0 (the "License"); 534f575b4b17fe635684e76e02685978477538622Florina Muntenescu * you may not use this file except in compliance with the License. 634f575b4b17fe635684e76e02685978477538622Florina Muntenescu * You may obtain a copy of the License at 734f575b4b17fe635684e76e02685978477538622Florina Muntenescu * 834f575b4b17fe635684e76e02685978477538622Florina Muntenescu * http://www.apache.org/licenses/LICENSE-2.0 934f575b4b17fe635684e76e02685978477538622Florina Muntenescu * 1034f575b4b17fe635684e76e02685978477538622Florina Muntenescu * Unless required by applicable law or agreed to in writing, software 1134f575b4b17fe635684e76e02685978477538622Florina Muntenescu * distributed under the License is distributed on an "AS IS" BASIS, 1234f575b4b17fe635684e76e02685978477538622Florina Muntenescu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1334f575b4b17fe635684e76e02685978477538622Florina Muntenescu * See the License for the specific language governing permissions and 1434f575b4b17fe635684e76e02685978477538622Florina Muntenescu * limitations under the License. 1534f575b4b17fe635684e76e02685978477538622Florina Muntenescu */ 1634f575b4b17fe635684e76e02685978477538622Florina Muntenescu 17ba069d50913c3fb250bb60ec310439db36895337Alan Viverettepackage androidx.room.integration.kotlintestapp.test 1834f575b4b17fe635684e76e02685978477538622Florina Muntenescu 197167222ccd7a916d7e286352c1399c60f85c090dFlorina Muntenescuimport android.database.sqlite.SQLiteConstraintException 200e87fcf7a6a7df8d169c73a6b6b83009e70e17f3Aurimas Liutikasimport android.support.test.filters.SdkSuppress 2133e1a32a869ef4b296ab616acb47896a32ec5eb5Florina Muntenescuimport android.support.test.filters.SmallTest 22ddee2b5170ae257a7b2494f8aaa8459ebed806dcAurimas Liutikasimport androidx.arch.core.executor.ArchTaskExecutor 23ba069d50913c3fb250bb60ec310439db36895337Alan Viveretteimport androidx.room.integration.kotlintestapp.vo.Author 24ba069d50913c3fb250bb60ec310439db36895337Alan Viveretteimport androidx.room.integration.kotlintestapp.vo.Book 25ba069d50913c3fb250bb60ec310439db36895337Alan Viveretteimport androidx.room.integration.kotlintestapp.vo.BookWithPublisher 26ba069d50913c3fb250bb60ec310439db36895337Alan Viveretteimport androidx.room.integration.kotlintestapp.vo.Lang 27ba069d50913c3fb250bb60ec310439db36895337Alan Viveretteimport androidx.room.integration.kotlintestapp.vo.Publisher 2867ff17da9546803a38f8144b7a466a116e622866Tyson Henningimport com.google.common.base.Optional 2967ff17da9546803a38f8144b7a466a116e622866Tyson Henningimport io.reactivex.Flowable 3067ff17da9546803a38f8144b7a466a116e622866Tyson Henningimport io.reactivex.schedulers.Schedulers 3167ff17da9546803a38f8144b7a466a116e622866Tyson Henningimport io.reactivex.subscribers.TestSubscriber 320d59e251a0d971be43cefa8e3907f4332dc7a3c5Florina Muntenescuimport org.hamcrest.CoreMatchers 3334f575b4b17fe635684e76e02685978477538622Florina Muntenescuimport org.hamcrest.CoreMatchers.`is` 3426549cc5374db3cbd1c1553069a3cfff02ea37adYuichi Arakiimport org.hamcrest.CoreMatchers.equalTo 357167222ccd7a916d7e286352c1399c60f85c090dFlorina Muntenescuimport org.hamcrest.CoreMatchers.instanceOf 3626549cc5374db3cbd1c1553069a3cfff02ea37adYuichi Arakiimport org.hamcrest.CoreMatchers.notNullValue 3734f575b4b17fe635684e76e02685978477538622Florina Muntenescuimport org.hamcrest.MatcherAssert.assertThat 387167222ccd7a916d7e286352c1399c60f85c090dFlorina Muntenescuimport org.junit.Assert.assertNotNull 3934f575b4b17fe635684e76e02685978477538622Florina Muntenescuimport org.junit.Test 400d59e251a0d971be43cefa8e3907f4332dc7a3c5Florina Muntenescuimport java.util.Date 4134f575b4b17fe635684e76e02685978477538622Florina Muntenescu 4233e1a32a869ef4b296ab616acb47896a32ec5eb5Florina Muntenescu@SmallTest 4334f575b4b17fe635684e76e02685978477538622Florina Muntenescuclass BooksDaoTest : TestDatabaseTest() { 4434f575b4b17fe635684e76e02685978477538622Florina Muntenescu 4534f575b4b17fe635684e76e02685978477538622Florina Muntenescu @Test 4634f575b4b17fe635684e76e02685978477538622Florina Muntenescu fun bookById() { 4734f575b4b17fe635684e76e02685978477538622Florina Muntenescu booksDao.addAuthors(TestUtil.AUTHOR_1) 4834f575b4b17fe635684e76e02685978477538622Florina Muntenescu booksDao.addPublishers(TestUtil.PUBLISHER) 4934f575b4b17fe635684e76e02685978477538622Florina Muntenescu booksDao.addBooks(TestUtil.BOOK_1) 5034f575b4b17fe635684e76e02685978477538622Florina Muntenescu 5134f575b4b17fe635684e76e02685978477538622Florina Muntenescu assertThat(booksDao.getBook(TestUtil.BOOK_1.bookId), `is`<Book>(TestUtil.BOOK_1)) 5234f575b4b17fe635684e76e02685978477538622Florina Muntenescu } 5334f575b4b17fe635684e76e02685978477538622Florina Muntenescu 540e87fcf7a6a7df8d169c73a6b6b83009e70e17f3Aurimas Liutikas @SdkSuppress(minSdkVersion = 24) 5534f575b4b17fe635684e76e02685978477538622Florina Muntenescu @Test 56c1fa1f4c9d1d61e344d4310928014132cb4fa4f4Tyson Henning fun bookByIdJavaOptional() { 57c1fa1f4c9d1d61e344d4310928014132cb4fa4f4Tyson Henning booksDao.addAuthors(TestUtil.AUTHOR_1) 58c1fa1f4c9d1d61e344d4310928014132cb4fa4f4Tyson Henning booksDao.addPublishers(TestUtil.PUBLISHER) 59c1fa1f4c9d1d61e344d4310928014132cb4fa4f4Tyson Henning booksDao.addBooks(TestUtil.BOOK_1) 60c1fa1f4c9d1d61e344d4310928014132cb4fa4f4Tyson Henning 61c1fa1f4c9d1d61e344d4310928014132cb4fa4f4Tyson Henning assertThat( 62c1fa1f4c9d1d61e344d4310928014132cb4fa4f4Tyson Henning booksDao.getBookJavaOptional(TestUtil.BOOK_1.bookId), 63c1fa1f4c9d1d61e344d4310928014132cb4fa4f4Tyson Henning `is`<java.util.Optional<Book>>(java.util.Optional.of(TestUtil.BOOK_1))) 64c1fa1f4c9d1d61e344d4310928014132cb4fa4f4Tyson Henning } 65c1fa1f4c9d1d61e344d4310928014132cb4fa4f4Tyson Henning 660e87fcf7a6a7df8d169c73a6b6b83009e70e17f3Aurimas Liutikas @SdkSuppress(minSdkVersion = 24) 67c1fa1f4c9d1d61e344d4310928014132cb4fa4f4Tyson Henning @Test 68c1fa1f4c9d1d61e344d4310928014132cb4fa4f4Tyson Henning fun bookByIdJavaOptionalEmpty() { 69c1fa1f4c9d1d61e344d4310928014132cb4fa4f4Tyson Henning assertThat( 70c1fa1f4c9d1d61e344d4310928014132cb4fa4f4Tyson Henning booksDao.getBookJavaOptional(TestUtil.BOOK_1.bookId), 71c1fa1f4c9d1d61e344d4310928014132cb4fa4f4Tyson Henning `is`<java.util.Optional<Book>>(java.util.Optional.empty())) 72c1fa1f4c9d1d61e344d4310928014132cb4fa4f4Tyson Henning } 73c1fa1f4c9d1d61e344d4310928014132cb4fa4f4Tyson Henning 74c1fa1f4c9d1d61e344d4310928014132cb4fa4f4Tyson Henning @Test 75f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning fun bookByIdListenableFuture() { 76f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning booksDao.addAuthors(TestUtil.AUTHOR_1) 77f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning booksDao.addPublishers(TestUtil.PUBLISHER) 78f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning booksDao.addBooks(TestUtil.BOOK_1) 79f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning 80f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning assertThat( 81f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning booksDao.getBookListenableFuture(TestUtil.BOOK_1.bookId).get(), 82f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning `is`<Book>(TestUtil.BOOK_1)) 83f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning } 84f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning 85f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning @Test 8667ff17da9546803a38f8144b7a466a116e622866Tyson Henning fun bookByIdOptional() { 8767ff17da9546803a38f8144b7a466a116e622866Tyson Henning booksDao.addAuthors(TestUtil.AUTHOR_1) 8867ff17da9546803a38f8144b7a466a116e622866Tyson Henning booksDao.addPublishers(TestUtil.PUBLISHER) 8967ff17da9546803a38f8144b7a466a116e622866Tyson Henning booksDao.addBooks(TestUtil.BOOK_1) 9067ff17da9546803a38f8144b7a466a116e622866Tyson Henning 9167ff17da9546803a38f8144b7a466a116e622866Tyson Henning assertThat( 9267ff17da9546803a38f8144b7a466a116e622866Tyson Henning booksDao.getBookOptional(TestUtil.BOOK_1.bookId), 9367ff17da9546803a38f8144b7a466a116e622866Tyson Henning `is`<Optional<Book>>(Optional.of(TestUtil.BOOK_1))) 9467ff17da9546803a38f8144b7a466a116e622866Tyson Henning } 9567ff17da9546803a38f8144b7a466a116e622866Tyson Henning 9667ff17da9546803a38f8144b7a466a116e622866Tyson Henning @Test 97f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning fun bookByIdOptionalListenableFuture() { 98f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning booksDao.addAuthors(TestUtil.AUTHOR_1) 99f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning booksDao.addPublishers(TestUtil.PUBLISHER) 100f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning booksDao.addBooks(TestUtil.BOOK_1) 101f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning 102f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning assertThat( 103f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning booksDao.getBookOptionalListenableFuture(TestUtil.BOOK_1.bookId).get(), 104f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning `is`<Optional<Book>>(Optional.of(TestUtil.BOOK_1))) 105f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning } 106f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning 107f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning @Test 108f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning fun bookByIdOptionalListenableFutureAbsent() { 109f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning assertThat( 110f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning booksDao.getBookOptionalListenableFuture(TestUtil.BOOK_1.bookId).get(), 111f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning `is`<Optional<Book>>(Optional.absent())) 112f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning } 113f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning 114f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning @Test 11567ff17da9546803a38f8144b7a466a116e622866Tyson Henning fun bookByIdOptionalAbsent() { 11667ff17da9546803a38f8144b7a466a116e622866Tyson Henning assertThat( 11767ff17da9546803a38f8144b7a466a116e622866Tyson Henning booksDao.getBookOptional(TestUtil.BOOK_1.bookId), 11867ff17da9546803a38f8144b7a466a116e622866Tyson Henning `is`<Optional<Book>>(Optional.absent())) 11967ff17da9546803a38f8144b7a466a116e622866Tyson Henning } 12067ff17da9546803a38f8144b7a466a116e622866Tyson Henning 12167ff17da9546803a38f8144b7a466a116e622866Tyson Henning @Test 12267ff17da9546803a38f8144b7a466a116e622866Tyson Henning fun bookByIdOptionalFlowable() { 12367ff17da9546803a38f8144b7a466a116e622866Tyson Henning booksDao.addAuthors(TestUtil.AUTHOR_1) 12467ff17da9546803a38f8144b7a466a116e622866Tyson Henning booksDao.addPublishers(TestUtil.PUBLISHER) 12567ff17da9546803a38f8144b7a466a116e622866Tyson Henning booksDao.addBooks(TestUtil.BOOK_1) 12667ff17da9546803a38f8144b7a466a116e622866Tyson Henning 12767ff17da9546803a38f8144b7a466a116e622866Tyson Henning val subscriber = TestSubscriber<Optional<Book>>() 12867ff17da9546803a38f8144b7a466a116e622866Tyson Henning val flowable: Flowable<Optional<Book>> = 12967ff17da9546803a38f8144b7a466a116e622866Tyson Henning booksDao.getBookOptionalFlowable(TestUtil.BOOK_1.bookId) 13067ff17da9546803a38f8144b7a466a116e622866Tyson Henning flowable.observeOn(Schedulers.from(ArchTaskExecutor.getMainThreadExecutor())) 13167ff17da9546803a38f8144b7a466a116e622866Tyson Henning .subscribeWith(subscriber) 13267ff17da9546803a38f8144b7a466a116e622866Tyson Henning 13367ff17da9546803a38f8144b7a466a116e622866Tyson Henning assertThat(subscriber.values().size, `is`(1)) 13467ff17da9546803a38f8144b7a466a116e622866Tyson Henning assertThat(subscriber.values()[0], `is`(Optional.of(TestUtil.BOOK_1))) 13567ff17da9546803a38f8144b7a466a116e622866Tyson Henning } 13667ff17da9546803a38f8144b7a466a116e622866Tyson Henning 13767ff17da9546803a38f8144b7a466a116e622866Tyson Henning @Test 13867ff17da9546803a38f8144b7a466a116e622866Tyson Henning fun bookByIdOptionalFlowableAbsent() { 13967ff17da9546803a38f8144b7a466a116e622866Tyson Henning val subscriber = TestSubscriber<Optional<Book>>() 14067ff17da9546803a38f8144b7a466a116e622866Tyson Henning val flowable: Flowable<Optional<Book>> = 14167ff17da9546803a38f8144b7a466a116e622866Tyson Henning booksDao.getBookOptionalFlowable(TestUtil.BOOK_1.bookId) 14267ff17da9546803a38f8144b7a466a116e622866Tyson Henning flowable.observeOn(Schedulers.from(ArchTaskExecutor.getMainThreadExecutor())) 14367ff17da9546803a38f8144b7a466a116e622866Tyson Henning .subscribeWith(subscriber) 14467ff17da9546803a38f8144b7a466a116e622866Tyson Henning 14567ff17da9546803a38f8144b7a466a116e622866Tyson Henning assertThat(subscriber.values().size, `is`(1)) 14667ff17da9546803a38f8144b7a466a116e622866Tyson Henning assertThat(subscriber.values()[0], `is`(Optional.absent())) 14767ff17da9546803a38f8144b7a466a116e622866Tyson Henning } 14867ff17da9546803a38f8144b7a466a116e622866Tyson Henning 14967ff17da9546803a38f8144b7a466a116e622866Tyson Henning @Test 15034f575b4b17fe635684e76e02685978477538622Florina Muntenescu fun bookWithPublisher() { 15134f575b4b17fe635684e76e02685978477538622Florina Muntenescu booksDao.addAuthors(TestUtil.AUTHOR_1) 15234f575b4b17fe635684e76e02685978477538622Florina Muntenescu booksDao.addPublishers(TestUtil.PUBLISHER) 15334f575b4b17fe635684e76e02685978477538622Florina Muntenescu booksDao.addBooks(TestUtil.BOOK_1) 15434f575b4b17fe635684e76e02685978477538622Florina Muntenescu 155bfc7aac93a790e446a867f203263868c9a93fd4cYigit Boyar val expected = BookWithPublisher(TestUtil.BOOK_1.bookId, TestUtil.BOOK_1.title, 15634f575b4b17fe635684e76e02685978477538622Florina Muntenescu TestUtil.PUBLISHER) 157bfc7aac93a790e446a867f203263868c9a93fd4cYigit Boyar val expectedList = ArrayList<BookWithPublisher>() 15834f575b4b17fe635684e76e02685978477538622Florina Muntenescu expectedList.add(expected) 15934f575b4b17fe635684e76e02685978477538622Florina Muntenescu 16034f575b4b17fe635684e76e02685978477538622Florina Muntenescu assertThat(database.booksDao().getBooksWithPublisher(), 16134f575b4b17fe635684e76e02685978477538622Florina Muntenescu `is`<List<BookWithPublisher>>(expectedList)) 162f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning } 163f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning 164f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning @Test 165f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning fun bookWithPublisherListenableFuture() { 166f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning booksDao.addAuthors(TestUtil.AUTHOR_1) 167f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning booksDao.addPublishers(TestUtil.PUBLISHER) 168f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning booksDao.addBooks(TestUtil.BOOK_1) 169f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning 170f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning val expected = BookWithPublisher(TestUtil.BOOK_1.bookId, TestUtil.BOOK_1.title, 171f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning TestUtil.PUBLISHER) 172f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning val expectedList = ArrayList<BookWithPublisher>() 173f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning expectedList.add(expected) 174f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning 175f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning assertThat(database.booksDao().getBooksWithPublisherListenableFuture().get(), 176f1ae0061c85cdb02bd124f8f8c7a934aa75e62feTyson Henning `is`<List<BookWithPublisher>>(expectedList)) 17734f575b4b17fe635684e76e02685978477538622Florina Muntenescu } 17834f575b4b17fe635684e76e02685978477538622Florina Muntenescu 17934f575b4b17fe635684e76e02685978477538622Florina Muntenescu @Test 1807167222ccd7a916d7e286352c1399c60f85c090dFlorina Muntenescu fun updateBookWithNullTitle() { 1817167222ccd7a916d7e286352c1399c60f85c090dFlorina Muntenescu booksDao.addPublishers(TestUtil.PUBLISHER) 1827167222ccd7a916d7e286352c1399c60f85c090dFlorina Muntenescu booksDao.addBooks(TestUtil.BOOK_1) 1837167222ccd7a916d7e286352c1399c60f85c090dFlorina Muntenescu 1847167222ccd7a916d7e286352c1399c60f85c090dFlorina Muntenescu var throwable: Throwable? = null 1857167222ccd7a916d7e286352c1399c60f85c090dFlorina Muntenescu try { 1867167222ccd7a916d7e286352c1399c60f85c090dFlorina Muntenescu booksDao.updateBookTitle(TestUtil.BOOK_1.bookId, null) 1877167222ccd7a916d7e286352c1399c60f85c090dFlorina Muntenescu } catch (t: Throwable) { 1887167222ccd7a916d7e286352c1399c60f85c090dFlorina Muntenescu throwable = t 1897167222ccd7a916d7e286352c1399c60f85c090dFlorina Muntenescu } 1907167222ccd7a916d7e286352c1399c60f85c090dFlorina Muntenescu assertNotNull(throwable) 1917167222ccd7a916d7e286352c1399c60f85c090dFlorina Muntenescu assertThat<Throwable>(throwable, instanceOf<Throwable>(SQLiteConstraintException::class 1927167222ccd7a916d7e286352c1399c60f85c090dFlorina Muntenescu .java)) 1937167222ccd7a916d7e286352c1399c60f85c090dFlorina Muntenescu } 1947167222ccd7a916d7e286352c1399c60f85c090dFlorina Muntenescu 1957167222ccd7a916d7e286352c1399c60f85c090dFlorina Muntenescu @Test 19634f575b4b17fe635684e76e02685978477538622Florina Muntenescu fun publisherWithBooks() { 19734f575b4b17fe635684e76e02685978477538622Florina Muntenescu booksDao.addAuthors(TestUtil.AUTHOR_1) 19834f575b4b17fe635684e76e02685978477538622Florina Muntenescu booksDao.addPublishers(TestUtil.PUBLISHER) 19934f575b4b17fe635684e76e02685978477538622Florina Muntenescu booksDao.addBooks(TestUtil.BOOK_1, TestUtil.BOOK_2) 20034f575b4b17fe635684e76e02685978477538622Florina Muntenescu 2013ea1d11500fdfe07866c1d6fcc970159d0f04f3aYigit Boyar val actualPublisherWithBooks = booksDao.getPublisherWithBooks( 20234f575b4b17fe635684e76e02685978477538622Florina Muntenescu TestUtil.PUBLISHER.publisherId) 20334f575b4b17fe635684e76e02685978477538622Florina Muntenescu 20434f575b4b17fe635684e76e02685978477538622Florina Muntenescu assertThat(actualPublisherWithBooks.publisher, `is`<Publisher>(TestUtil.PUBLISHER)) 20534f575b4b17fe635684e76e02685978477538622Florina Muntenescu assertThat(actualPublisherWithBooks.books?.size, `is`(2)) 20634f575b4b17fe635684e76e02685978477538622Florina Muntenescu assertThat(actualPublisherWithBooks.books?.get(0), `is`<Book>(TestUtil.BOOK_1)) 20734f575b4b17fe635684e76e02685978477538622Florina Muntenescu assertThat(actualPublisherWithBooks.books?.get(1), `is`<Book>(TestUtil.BOOK_2)) 20834f575b4b17fe635684e76e02685978477538622Florina Muntenescu } 2090d59e251a0d971be43cefa8e3907f4332dc7a3c5Florina Muntenescu 2103ea1d11500fdfe07866c1d6fcc970159d0f04f3aYigit Boyar @Test // b/68077506 2113ea1d11500fdfe07866c1d6fcc970159d0f04f3aYigit Boyar fun publisherWithBookSales() { 2123ea1d11500fdfe07866c1d6fcc970159d0f04f3aYigit Boyar booksDao.addAuthors(TestUtil.AUTHOR_1) 2133ea1d11500fdfe07866c1d6fcc970159d0f04f3aYigit Boyar booksDao.addPublishers(TestUtil.PUBLISHER) 2143ea1d11500fdfe07866c1d6fcc970159d0f04f3aYigit Boyar booksDao.addBooks(TestUtil.BOOK_1, TestUtil.BOOK_2) 2153ea1d11500fdfe07866c1d6fcc970159d0f04f3aYigit Boyar val actualPublisherWithBooks = booksDao.getPublisherWithBookSales( 2163ea1d11500fdfe07866c1d6fcc970159d0f04f3aYigit Boyar TestUtil.PUBLISHER.publisherId) 2173ea1d11500fdfe07866c1d6fcc970159d0f04f3aYigit Boyar 2183ea1d11500fdfe07866c1d6fcc970159d0f04f3aYigit Boyar assertThat(actualPublisherWithBooks.publisher, `is`<Publisher>(TestUtil.PUBLISHER)) 2193ea1d11500fdfe07866c1d6fcc970159d0f04f3aYigit Boyar assertThat(actualPublisherWithBooks.sales, `is`(listOf(TestUtil.BOOK_1.salesCnt, 2203ea1d11500fdfe07866c1d6fcc970159d0f04f3aYigit Boyar TestUtil.BOOK_2.salesCnt))) 2213ea1d11500fdfe07866c1d6fcc970159d0f04f3aYigit Boyar } 2223ea1d11500fdfe07866c1d6fcc970159d0f04f3aYigit Boyar 2230d59e251a0d971be43cefa8e3907f4332dc7a3c5Florina Muntenescu @Test 2240d59e251a0d971be43cefa8e3907f4332dc7a3c5Florina Muntenescu fun insertAuthorWithAllFields() { 2250d59e251a0d971be43cefa8e3907f4332dc7a3c5Florina Muntenescu val author = Author("id", "name", Date(), ArrayList()) 2260d59e251a0d971be43cefa8e3907f4332dc7a3c5Florina Muntenescu database.booksDao().addAuthors(author) 2270d59e251a0d971be43cefa8e3907f4332dc7a3c5Florina Muntenescu 2280d59e251a0d971be43cefa8e3907f4332dc7a3c5Florina Muntenescu val authorDb = database.booksDao().getAuthor(author.authorId) 2290d59e251a0d971be43cefa8e3907f4332dc7a3c5Florina Muntenescu 2300d59e251a0d971be43cefa8e3907f4332dc7a3c5Florina Muntenescu assertThat(authorDb, CoreMatchers.`is`<Author>(author)) 2310d59e251a0d971be43cefa8e3907f4332dc7a3c5Florina Muntenescu } 2320d59e251a0d971be43cefa8e3907f4332dc7a3c5Florina Muntenescu 2330d59e251a0d971be43cefa8e3907f4332dc7a3c5Florina Muntenescu @Test 2340d59e251a0d971be43cefa8e3907f4332dc7a3c5Florina Muntenescu fun insertInInheritedDao() { 2350d59e251a0d971be43cefa8e3907f4332dc7a3c5Florina Muntenescu database.derivedDao().insert(TestUtil.AUTHOR_1) 2360d59e251a0d971be43cefa8e3907f4332dc7a3c5Florina Muntenescu 2370d59e251a0d971be43cefa8e3907f4332dc7a3c5Florina Muntenescu val author = database.derivedDao().getAuthor(TestUtil.AUTHOR_1.authorId) 2380d59e251a0d971be43cefa8e3907f4332dc7a3c5Florina Muntenescu 2390d59e251a0d971be43cefa8e3907f4332dc7a3c5Florina Muntenescu assertThat(author, CoreMatchers.`is`<Author>(TestUtil.AUTHOR_1)) 2400d59e251a0d971be43cefa8e3907f4332dc7a3c5Florina Muntenescu } 2410348c0148cc4433b787c606e5d658d94ec058e95Yigit Boyar 2420348c0148cc4433b787c606e5d658d94ec058e95Yigit Boyar @Test 2430348c0148cc4433b787c606e5d658d94ec058e95Yigit Boyar fun findBooksInMultiLineQuery() { 2440348c0148cc4433b787c606e5d658d94ec058e95Yigit Boyar booksDao.addPublishers(TestUtil.PUBLISHER) 2450348c0148cc4433b787c606e5d658d94ec058e95Yigit Boyar booksDao.addBooks(TestUtil.BOOK_1) 2460348c0148cc4433b787c606e5d658d94ec058e95Yigit Boyar booksDao.addBooks(TestUtil.BOOK_2) 2470348c0148cc4433b787c606e5d658d94ec058e95Yigit Boyar 2480348c0148cc4433b787c606e5d658d94ec058e95Yigit Boyar val books = database.booksDao().getBooksMultiLineQuery(arrayListOf( 2490348c0148cc4433b787c606e5d658d94ec058e95Yigit Boyar TestUtil.BOOK_1.bookId, 2500348c0148cc4433b787c606e5d658d94ec058e95Yigit Boyar TestUtil.BOOK_2.bookId)) 2510348c0148cc4433b787c606e5d658d94ec058e95Yigit Boyar assertThat(books, `is`(listOf(TestUtil.BOOK_2, TestUtil.BOOK_1))) 2520348c0148cc4433b787c606e5d658d94ec058e95Yigit Boyar } 2532fb00f11f2e6d90edf678daaa921a3ef1b55a51bYigit Boyar 2542fb00f11f2e6d90edf678daaa921a3ef1b55a51bYigit Boyar @Test 2552fb00f11f2e6d90edf678daaa921a3ef1b55a51bYigit Boyar fun findBooksByLanguage() { 2562fb00f11f2e6d90edf678daaa921a3ef1b55a51bYigit Boyar booksDao.addPublishers(TestUtil.PUBLISHER) 2572fb00f11f2e6d90edf678daaa921a3ef1b55a51bYigit Boyar val book1 = TestUtil.BOOK_1.copy(languages = setOf(Lang.TR)) 2582fb00f11f2e6d90edf678daaa921a3ef1b55a51bYigit Boyar val book2 = TestUtil.BOOK_2.copy(languages = setOf(Lang.ES, Lang.TR)) 2592fb00f11f2e6d90edf678daaa921a3ef1b55a51bYigit Boyar val book3 = TestUtil.BOOK_3.copy(languages = setOf(Lang.EN)) 2602fb00f11f2e6d90edf678daaa921a3ef1b55a51bYigit Boyar booksDao.addBooks(book1, book2, book3) 2612fb00f11f2e6d90edf678daaa921a3ef1b55a51bYigit Boyar 2622fb00f11f2e6d90edf678daaa921a3ef1b55a51bYigit Boyar assertThat(booksDao.findByLanguages(setOf(Lang.EN, Lang.TR)), 2632fb00f11f2e6d90edf678daaa921a3ef1b55a51bYigit Boyar `is`(listOf(book1, book2, book3))) 2642fb00f11f2e6d90edf678daaa921a3ef1b55a51bYigit Boyar 2652fb00f11f2e6d90edf678daaa921a3ef1b55a51bYigit Boyar assertThat(booksDao.findByLanguages(setOf(Lang.TR)), 2662fb00f11f2e6d90edf678daaa921a3ef1b55a51bYigit Boyar `is`(listOf(book1, book2))) 2672fb00f11f2e6d90edf678daaa921a3ef1b55a51bYigit Boyar 2682fb00f11f2e6d90edf678daaa921a3ef1b55a51bYigit Boyar assertThat(booksDao.findByLanguages(setOf(Lang.ES)), 2692fb00f11f2e6d90edf678daaa921a3ef1b55a51bYigit Boyar `is`(listOf(book2))) 2702fb00f11f2e6d90edf678daaa921a3ef1b55a51bYigit Boyar 2712fb00f11f2e6d90edf678daaa921a3ef1b55a51bYigit Boyar assertThat(booksDao.findByLanguages(setOf(Lang.EN)), 2722fb00f11f2e6d90edf678daaa921a3ef1b55a51bYigit Boyar `is`(listOf(book3))) 2732fb00f11f2e6d90edf678daaa921a3ef1b55a51bYigit Boyar } 274bfc7aac93a790e446a867f203263868c9a93fd4cYigit Boyar 275bfc7aac93a790e446a867f203263868c9a93fd4cYigit Boyar @Test 276bfc7aac93a790e446a867f203263868c9a93fd4cYigit Boyar fun insertVarargInInheritedDao() { 277bfc7aac93a790e446a867f203263868c9a93fd4cYigit Boyar database.derivedDao().insertAllArg(TestUtil.AUTHOR_1, TestUtil.AUTHOR_2) 278bfc7aac93a790e446a867f203263868c9a93fd4cYigit Boyar 279bfc7aac93a790e446a867f203263868c9a93fd4cYigit Boyar val author = database.derivedDao().getAuthor(TestUtil.AUTHOR_1.authorId) 280bfc7aac93a790e446a867f203263868c9a93fd4cYigit Boyar 281bfc7aac93a790e446a867f203263868c9a93fd4cYigit Boyar assertThat(author, CoreMatchers.`is`<Author>(TestUtil.AUTHOR_1)) 282bfc7aac93a790e446a867f203263868c9a93fd4cYigit Boyar } 283bfc7aac93a790e446a867f203263868c9a93fd4cYigit Boyar 284bfc7aac93a790e446a867f203263868c9a93fd4cYigit Boyar @Test 285bfc7aac93a790e446a867f203263868c9a93fd4cYigit Boyar fun insertListInInheritedDao() { 286bfc7aac93a790e446a867f203263868c9a93fd4cYigit Boyar database.derivedDao().insertAll(listOf(TestUtil.AUTHOR_1)) 287bfc7aac93a790e446a867f203263868c9a93fd4cYigit Boyar 288bfc7aac93a790e446a867f203263868c9a93fd4cYigit Boyar val author = database.derivedDao().getAuthor(TestUtil.AUTHOR_1.authorId) 289bfc7aac93a790e446a867f203263868c9a93fd4cYigit Boyar 290bfc7aac93a790e446a867f203263868c9a93fd4cYigit Boyar assertThat(author, CoreMatchers.`is`<Author>(TestUtil.AUTHOR_1)) 291bfc7aac93a790e446a867f203263868c9a93fd4cYigit Boyar } 29226549cc5374db3cbd1c1553069a3cfff02ea37adYuichi Araki 29326549cc5374db3cbd1c1553069a3cfff02ea37adYuichi Araki @Test 29426549cc5374db3cbd1c1553069a3cfff02ea37adYuichi Araki fun deleteAndAddPublisher() { 29526549cc5374db3cbd1c1553069a3cfff02ea37adYuichi Araki booksDao.addPublishers(TestUtil.PUBLISHER) 29626549cc5374db3cbd1c1553069a3cfff02ea37adYuichi Araki booksDao.getPublishers().run { 29726549cc5374db3cbd1c1553069a3cfff02ea37adYuichi Araki assertThat(this.size, `is`(1)) 29826549cc5374db3cbd1c1553069a3cfff02ea37adYuichi Araki assertThat(this.first(), `is`(equalTo(TestUtil.PUBLISHER))) 29926549cc5374db3cbd1c1553069a3cfff02ea37adYuichi Araki } 30026549cc5374db3cbd1c1553069a3cfff02ea37adYuichi Araki booksDao.deleteAndAddPublisher(TestUtil.PUBLISHER, TestUtil.PUBLISHER2) 30126549cc5374db3cbd1c1553069a3cfff02ea37adYuichi Araki booksDao.getPublishers().run { 30226549cc5374db3cbd1c1553069a3cfff02ea37adYuichi Araki assertThat(this.size, `is`(1)) 30326549cc5374db3cbd1c1553069a3cfff02ea37adYuichi Araki assertThat(this.first(), `is`(equalTo(TestUtil.PUBLISHER2))) 30426549cc5374db3cbd1c1553069a3cfff02ea37adYuichi Araki } 30526549cc5374db3cbd1c1553069a3cfff02ea37adYuichi Araki } 30626549cc5374db3cbd1c1553069a3cfff02ea37adYuichi Araki 30726549cc5374db3cbd1c1553069a3cfff02ea37adYuichi Araki @Test 30826549cc5374db3cbd1c1553069a3cfff02ea37adYuichi Araki fun deleteAndAddPublisher_failure() { 30926549cc5374db3cbd1c1553069a3cfff02ea37adYuichi Araki booksDao.addPublishers(TestUtil.PUBLISHER) 31026549cc5374db3cbd1c1553069a3cfff02ea37adYuichi Araki booksDao.getPublishers().run { 31126549cc5374db3cbd1c1553069a3cfff02ea37adYuichi Araki assertThat(this.size, `is`(1)) 31226549cc5374db3cbd1c1553069a3cfff02ea37adYuichi Araki assertThat(this.first(), `is`(equalTo(TestUtil.PUBLISHER))) 31326549cc5374db3cbd1c1553069a3cfff02ea37adYuichi Araki } 31426549cc5374db3cbd1c1553069a3cfff02ea37adYuichi Araki var throwable: Throwable? = null 31526549cc5374db3cbd1c1553069a3cfff02ea37adYuichi Araki try { 31626549cc5374db3cbd1c1553069a3cfff02ea37adYuichi Araki booksDao.deleteAndAddPublisher(TestUtil.PUBLISHER, TestUtil.PUBLISHER2, true) 31726549cc5374db3cbd1c1553069a3cfff02ea37adYuichi Araki } catch (e: RuntimeException) { 31826549cc5374db3cbd1c1553069a3cfff02ea37adYuichi Araki throwable = e 31926549cc5374db3cbd1c1553069a3cfff02ea37adYuichi Araki } 32026549cc5374db3cbd1c1553069a3cfff02ea37adYuichi Araki assertThat(throwable, `is`(notNullValue())) 32126549cc5374db3cbd1c1553069a3cfff02ea37adYuichi Araki booksDao.getPublishers().run { 32226549cc5374db3cbd1c1553069a3cfff02ea37adYuichi Araki assertThat(this.size, `is`(1)) 32326549cc5374db3cbd1c1553069a3cfff02ea37adYuichi Araki assertThat(this.first(), `is`(equalTo(TestUtil.PUBLISHER))) 32426549cc5374db3cbd1c1553069a3cfff02ea37adYuichi Araki } 32526549cc5374db3cbd1c1553069a3cfff02ea37adYuichi Araki } 32634f575b4b17fe635684e76e02685978477538622Florina Muntenescu} 327