aboutsummaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorAllan Wang <me@allanwang.ca>2019-03-07 04:00:20 -0500
committerAllan Wang <me@allanwang.ca>2019-03-07 04:00:20 -0500
commitf1878133d8af686ce8c27acffe28f26e9dda5165 (patch)
tree5d0d31d0581cb23495eea84437bdf74272081e20 /app
parenteabc8e3393cbd6b3dba5c70a5920075b8158d84e (diff)
downloadfrost-f1878133d8af686ce8c27acffe28f26e9dda5165.tar.gz
frost-f1878133d8af686ce8c27acffe28f26e9dda5165.tar.bz2
frost-f1878133d8af686ce8c27acffe28f26e9dda5165.zip
Add koin test
Diffstat (limited to 'app')
-rw-r--r--app/build.gradle1
-rw-r--r--app/src/androidTest/kotlin/com/pitchedapps/frost/db/DatabaseTest.kt38
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/db/CacheDb.kt3
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/db/Database.kt2
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/db/FbTabsDb.kt5
-rw-r--r--app/src/schemas/com.pitchedapps.frost.db.FrostPrivateDatabase/1.json36
6 files changed, 77 insertions, 8 deletions
diff --git a/app/build.gradle b/app/build.gradle
index d5dcf87e..74e8015c 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -178,6 +178,7 @@ dependencies {
androidTestImplementation kauDependency.espresso
androidTestImplementation kauDependency.testRules
androidTestImplementation kauDependency.testRunner
+ androidTestImplementation "org.jetbrains.kotlin:kotlin-reflect:${KOTLIN}"
testImplementation kauDependency.kotlinTest
testImplementation "org.jetbrains.kotlin:kotlin-reflect:${KOTLIN}"
diff --git a/app/src/androidTest/kotlin/com/pitchedapps/frost/db/DatabaseTest.kt b/app/src/androidTest/kotlin/com/pitchedapps/frost/db/DatabaseTest.kt
new file mode 100644
index 00000000..1f1a201b
--- /dev/null
+++ b/app/src/androidTest/kotlin/com/pitchedapps/frost/db/DatabaseTest.kt
@@ -0,0 +1,38 @@
+package com.pitchedapps.frost.db
+
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import org.junit.runner.RunWith
+import org.koin.error.NoBeanDefFoundException
+import org.koin.standalone.get
+import org.koin.test.KoinTest
+import kotlin.reflect.KClass
+import kotlin.reflect.full.functions
+import kotlin.test.Test
+import kotlin.test.assertTrue
+
+@RunWith(AndroidJUnit4::class)
+class DatabaseTest : KoinTest {
+
+ inline fun <reified T : Any> hasKoin() = hasKoin(T::class)
+
+ fun <T : Any> hasKoin(klazz: KClass<T>): Boolean =
+ try {
+ get<T>(clazz = klazz)
+ true
+ } catch (e: NoBeanDefFoundException) {
+ false
+ }
+
+ /**
+ * Database and all daos should be loaded as components
+ */
+ @Test
+ fun testKoins() {
+ hasKoin<FrostDatabase>()
+ val members = FrostDatabase::class.java.kotlin.functions.filter { it.name.endsWith("Dao") }
+ .mapNotNull { it.returnType.classifier as? KClass<*> }
+ assertTrue(members.isNotEmpty(), "Failed to find dao interfaces")
+ val missingKoins = (members + FrostDatabase::class).filter { !hasKoin(it) }
+ assertTrue(missingKoins.isEmpty(), "Missing koins: $missingKoins")
+ }
+} \ No newline at end of file
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/db/CacheDb.kt b/app/src/main/kotlin/com/pitchedapps/frost/db/CacheDb.kt
index bd6bff4b..4d6bc938 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/db/CacheDb.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/db/CacheDb.kt
@@ -53,4 +53,5 @@ interface CacheDao {
suspend fun deleteById(id: Long)
}
-suspend fun CacheDao.save(id: String, contents: String) = insertCache(CacheEntity(id, System.currentTimeMillis(), contents)) \ No newline at end of file
+suspend fun CacheDao.save(id: String, contents: String) =
+ insertCache(CacheEntity(id, System.currentTimeMillis(), contents)) \ No newline at end of file
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/db/Database.kt b/app/src/main/kotlin/com/pitchedapps/frost/db/Database.kt
index b83fce52..29296494 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/db/Database.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/db/Database.kt
@@ -71,6 +71,8 @@ class FrostDatabase(private val privateDb: FrostPrivateDatabase, private val pub
single { create(context) }
single { get<FrostDatabase>().cookieDao() }
single { get<FrostDatabase>().tabDao() }
+ single { get<FrostDatabase>().cacheDao() }
+ single { get<FrostDatabase>().notifDao() }
}
/**
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/db/FbTabsDb.kt b/app/src/main/kotlin/com/pitchedapps/frost/db/FbTabsDb.kt
index c2bb0837..f4e74509 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/db/FbTabsDb.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/db/FbTabsDb.kt
@@ -24,14 +24,9 @@ import androidx.room.Query
import androidx.room.Transaction
import com.pitchedapps.frost.facebook.FbItem
import com.pitchedapps.frost.facebook.defaultTabs
-import com.pitchedapps.frost.utils.L
import com.raizlabs.android.dbflow.annotation.Database
import com.raizlabs.android.dbflow.annotation.PrimaryKey
import com.raizlabs.android.dbflow.annotation.Table
-import com.raizlabs.android.dbflow.kotlinextensions.database
-import com.raizlabs.android.dbflow.kotlinextensions.fastSave
-import com.raizlabs.android.dbflow.kotlinextensions.from
-import com.raizlabs.android.dbflow.kotlinextensions.select
import com.raizlabs.android.dbflow.structure.BaseModel
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
diff --git a/app/src/schemas/com.pitchedapps.frost.db.FrostPrivateDatabase/1.json b/app/src/schemas/com.pitchedapps.frost.db.FrostPrivateDatabase/1.json
index c382bce7..72b86db3 100644
--- a/app/src/schemas/com.pitchedapps.frost.db.FrostPrivateDatabase/1.json
+++ b/app/src/schemas/com.pitchedapps.frost.db.FrostPrivateDatabase/1.json
@@ -2,7 +2,7 @@
"formatVersion": 1,
"database": {
"version": 1,
- "identityHash": "77eff76407f59b690b8877cc22fac42f",
+ "identityHash": "099ffebd0f0fe80199c0f6413a549ebb",
"entities": [
{
"tableName": "cookies",
@@ -127,12 +127,44 @@
]
}
]
+ },
+ {
+ "tableName": "frost_cache",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `lastUpdated` INTEGER NOT NULL, `contents` TEXT NOT NULL, PRIMARY KEY(`id`))",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "id",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "lastUpdated",
+ "columnName": "lastUpdated",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "contents",
+ "columnName": "contents",
+ "affinity": "TEXT",
+ "notNull": true
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "id"
+ ],
+ "autoGenerate": false
+ },
+ "indices": [],
+ "foreignKeys": []
}
],
"views": [],
"setupQueries": [
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
- "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, \"77eff76407f59b690b8877cc22fac42f\")"
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, \"099ffebd0f0fe80199c0f6413a549ebb\")"
]
}
} \ No newline at end of file