From cbf72ddcfe6f5ffdab489f27d34962e1d2697eb6 Mon Sep 17 00:00:00 2001 From: Iiro Krankka Date: Wed, 8 Feb 2017 19:33:00 +0200 Subject: [PATCH] Extracted the duplicate test Realm setup to a test rule. --- .../data/local/CoffeeEventRepositoryTest.kt | 21 ++------- .../koffeemate/data/local/MigrationTest.kt | 3 +- .../koffeemate/data/local/RealmTestRule.kt | 44 +++++++++++++++++++ .../data/local/UserRepositoryTest.kt | 22 ++-------- 4 files changed, 54 insertions(+), 36 deletions(-) create mode 100644 app/src/androidTest/java/com/codemate/koffeemate/data/local/RealmTestRule.kt diff --git a/app/src/androidTest/java/com/codemate/koffeemate/data/local/CoffeeEventRepositoryTest.kt b/app/src/androidTest/java/com/codemate/koffeemate/data/local/CoffeeEventRepositoryTest.kt index 975ac5e..c427f0c 100644 --- a/app/src/androidTest/java/com/codemate/koffeemate/data/local/CoffeeEventRepositoryTest.kt +++ b/app/src/androidTest/java/com/codemate/koffeemate/data/local/CoffeeEventRepositoryTest.kt @@ -19,36 +19,23 @@ package com.codemate.koffeemate.data.local import com.codemate.koffeemate.data.models.CoffeeBrewingEvent import com.codemate.koffeemate.data.models.User import io.realm.Realm -import io.realm.RealmConfiguration import org.hamcrest.core.IsEqual.equalTo -import org.junit.After import org.junit.Assert.assertThat import org.junit.Before +import org.junit.Rule import org.junit.Test class CoffeeEventRepositoryTest { - val testConfig: RealmConfiguration = RealmConfiguration.Builder() - .name("test.realm") - .build() - lateinit var coffeeEventRepository: RealmCoffeeEventRepository + @Rule @JvmField + val realmRule: RealmTestRule = RealmTestRule() + @Before fun setUp() { - Realm.setDefaultConfiguration(testConfig) - - val realm = Realm.getDefaultInstance() - realm.executeTransaction(Realm::deleteAll) - realm.close() - coffeeEventRepository = RealmCoffeeEventRepository() } - @After - fun tearDown() { - Realm.deleteRealm(testConfig) - } - @Test fun recordBrewingEvent_PersistsEventsInDatabase() { coffeeEventRepository.recordBrewingEvent() diff --git a/app/src/androidTest/java/com/codemate/koffeemate/data/local/MigrationTest.kt b/app/src/androidTest/java/com/codemate/koffeemate/data/local/MigrationTest.kt index 67cb152..ec949ac 100644 --- a/app/src/androidTest/java/com/codemate/koffeemate/data/local/MigrationTest.kt +++ b/app/src/androidTest/java/com/codemate/koffeemate/data/local/MigrationTest.kt @@ -43,7 +43,7 @@ class MigrationTest { @Test fun testMigrationFromVersionZeroToOne() { val config = RealmConfiguration.Builder() - .name("migration-test.realm") + .name("test.realm") .schemaVersion(1) .migration(Migration()) .build() @@ -82,6 +82,7 @@ class MigrationTest { assertThat(brewingEventWithUserId.user!!.last_updated, equalTo(brewingAccident.user!!.last_updated)) realm.close() + Realm.deleteRealm(config) } @Throws(IOException::class) diff --git a/app/src/androidTest/java/com/codemate/koffeemate/data/local/RealmTestRule.kt b/app/src/androidTest/java/com/codemate/koffeemate/data/local/RealmTestRule.kt new file mode 100644 index 0000000..9699110 --- /dev/null +++ b/app/src/androidTest/java/com/codemate/koffeemate/data/local/RealmTestRule.kt @@ -0,0 +1,44 @@ +package com.codemate.koffeemate.data.local + +import io.realm.Realm +import io.realm.RealmConfiguration +import org.junit.rules.ExternalResource +import org.junit.runner.Description +import org.junit.runners.model.Statement + +/** + * A JUnit Rule that sets up a test Realm database before each test, + * clears all data from it, and deletes the whole database file alltogether + * after the test completes. + * + * Usage: + * + * @Rule @JvmField + * val realmRule: RealmTestRule = RealmTestRule() + * + * The above assumes that your application logic that uses Realm always uses + * the default instance. Meaning that your code calls Realm.getDefaultInstance() + * and uses that for all database logic. + */ +class RealmTestRule : ExternalResource() { + val testConfig: RealmConfiguration = RealmConfiguration.Builder() + .name("test.realm") + .build() + + override fun before() { + Realm.setDefaultConfiguration(testConfig) + + with (Realm.getDefaultInstance()) { + executeTransaction(Realm::deleteAll) + close() + } + } + + override fun apply(base: Statement?, description: Description?): Statement { + return super.apply(base, description) + } + + override fun after() { + Realm.deleteRealm(testConfig) + } +} \ No newline at end of file diff --git a/app/src/androidTest/java/com/codemate/koffeemate/data/local/UserRepositoryTest.kt b/app/src/androidTest/java/com/codemate/koffeemate/data/local/UserRepositoryTest.kt index 3cc7663..4c8d465 100644 --- a/app/src/androidTest/java/com/codemate/koffeemate/data/local/UserRepositoryTest.kt +++ b/app/src/androidTest/java/com/codemate/koffeemate/data/local/UserRepositoryTest.kt @@ -17,40 +17,26 @@ package com.codemate.koffeemate.data.local import com.codemate.koffeemate.data.models.User -import io.realm.Realm -import io.realm.RealmConfiguration import org.hamcrest.core.IsEqual.equalTo -import org.junit.After import org.junit.Assert.assertThat import org.junit.Before +import org.junit.Rule import org.junit.Test class UserRepositoryTest { - val testConfig: RealmConfiguration = RealmConfiguration.Builder() - .name("test.realm") - .build() - val TEST_USERS_UNIQUE = listOf(User(id = "abc123"), User(id = "123abc"), User(id = "a1b2c3")) val TEST_USERS_DUPLICATE = listOf(User(id = "abc123"), User(id = "abc123"), User(id = "abc123")) lateinit var userRepository: UserRepository + @Rule @JvmField + val realmRule = RealmTestRule() + @Before fun setUp() { - Realm.setDefaultConfiguration(testConfig) - - val realm = Realm.getDefaultInstance() - realm.executeTransaction(Realm::deleteAll) - realm.close() - userRepository = RealmUserRepository() } - @After - fun tearDown() { - Realm.deleteRealm(testConfig) - } - @Test fun addAll_WhenUsersAreUnique_PersistsAllInDatabase() { userRepository.addAll(TEST_USERS_UNIQUE)