mirror of
https://github.com/afollestad/nock-nock.git
synced 2025-08-03 06:38:38 +00:00
Groundwork for tags
This commit is contained in:
parent
67aa54ac22
commit
2756fc9fc7
10 changed files with 77 additions and 23 deletions
|
@ -66,6 +66,9 @@ dependencies {
|
||||||
// afollestad
|
// afollestad
|
||||||
implementation 'com.afollestad.material-dialogs:core:' + versions.materialDialogs
|
implementation 'com.afollestad.material-dialogs:core:' + versions.materialDialogs
|
||||||
|
|
||||||
|
// Misc
|
||||||
|
implementation 'com.github.okdroid:checkablechipview:' + versions.chipView
|
||||||
|
|
||||||
// Debugging
|
// Debugging
|
||||||
implementation 'com.jakewharton.timber:timber:' + versions.timber
|
implementation 'com.jakewharton.timber:timber:' + versions.timber
|
||||||
implementation("com.crashlytics.sdk.android:crashlytics:${versions.fabric}") {
|
implementation("com.crashlytics.sdk.android:crashlytics:${versions.fabric}") {
|
||||||
|
|
|
@ -23,6 +23,7 @@ import android.content.Context.NOTIFICATION_SERVICE
|
||||||
import androidx.room.Room.databaseBuilder
|
import androidx.room.Room.databaseBuilder
|
||||||
import com.afollestad.nocknock.data.AppDatabase
|
import com.afollestad.nocknock.data.AppDatabase
|
||||||
import com.afollestad.nocknock.data.Database1to2Migration
|
import com.afollestad.nocknock.data.Database1to2Migration
|
||||||
|
import com.afollestad.nocknock.data.Database2to3Migration
|
||||||
import com.afollestad.nocknock.notifications.Qualifiers.MAIN_ACTIVITY_CLASS
|
import com.afollestad.nocknock.notifications.Qualifiers.MAIN_ACTIVITY_CLASS
|
||||||
import com.afollestad.nocknock.ui.main.MainActivity
|
import com.afollestad.nocknock.ui.main.MainActivity
|
||||||
import com.afollestad.nocknock.utilities.ext.systemService
|
import com.afollestad.nocknock.utilities.ext.systemService
|
||||||
|
@ -38,7 +39,10 @@ val mainModule = module {
|
||||||
|
|
||||||
single {
|
single {
|
||||||
databaseBuilder(get(), AppDatabase::class.java, "NockNock.db")
|
databaseBuilder(get(), AppDatabase::class.java, "NockNock.db")
|
||||||
.addMigrations(Database1to2Migration())
|
.addMigrations(
|
||||||
|
Database1to2Migration(),
|
||||||
|
Database2to3Migration()
|
||||||
|
)
|
||||||
.build()
|
.build()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -83,6 +83,7 @@ fun fakeModel(id: Long) = Site(
|
||||||
id = id,
|
id = id,
|
||||||
name = "Test",
|
name = "Test",
|
||||||
url = "https://test.com",
|
url = "https://test.com",
|
||||||
|
tags = "",
|
||||||
settings = fakeSettingsModel(id),
|
settings = fakeSettingsModel(id),
|
||||||
lastResult = fakeResultModel(id),
|
lastResult = fakeResultModel(id),
|
||||||
retryPolicy = fakeRetryPolicy(id)
|
retryPolicy = fakeRetryPolicy(id)
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
<application>
|
<application>
|
||||||
<uses-library
|
<uses-library
|
||||||
android:name="android.test.runner"
|
android:name="androidx.test.runner"
|
||||||
android:required="false"/>
|
android:required="false"/>
|
||||||
</application>
|
</application>
|
||||||
</manifest>
|
</manifest>
|
||||||
|
|
|
@ -59,9 +59,7 @@ class AppDatabaseTest() {
|
||||||
|
|
||||||
@After
|
@After
|
||||||
@Throws(IOException::class)
|
@Throws(IOException::class)
|
||||||
fun destroy() {
|
fun destroy() = db.close()
|
||||||
db.close()
|
|
||||||
}
|
|
||||||
|
|
||||||
// SiteDao
|
// SiteDao
|
||||||
|
|
||||||
|
@ -69,6 +67,7 @@ class AppDatabaseTest() {
|
||||||
val model1 = Site(
|
val model1 = Site(
|
||||||
name = "Test 1",
|
name = "Test 1",
|
||||||
url = "https://test1.com",
|
url = "https://test1.com",
|
||||||
|
tags = "",
|
||||||
settings = null,
|
settings = null,
|
||||||
lastResult = null,
|
lastResult = null,
|
||||||
retryPolicy = null
|
retryPolicy = null
|
||||||
|
@ -79,6 +78,7 @@ class AppDatabaseTest() {
|
||||||
val model2 = Site(
|
val model2 = Site(
|
||||||
name = "Test 2",
|
name = "Test 2",
|
||||||
url = "https://test2.com",
|
url = "https://test2.com",
|
||||||
|
tags = "",
|
||||||
settings = null,
|
settings = null,
|
||||||
lastResult = null,
|
lastResult = null,
|
||||||
retryPolicy = null
|
retryPolicy = null
|
||||||
|
@ -96,6 +96,7 @@ class AppDatabaseTest() {
|
||||||
val model = Site(
|
val model = Site(
|
||||||
name = "Test",
|
name = "Test",
|
||||||
url = "https://test.com",
|
url = "https://test.com",
|
||||||
|
tags = "",
|
||||||
settings = null,
|
settings = null,
|
||||||
lastResult = null,
|
lastResult = null,
|
||||||
retryPolicy = null
|
retryPolicy = null
|
||||||
|
@ -111,6 +112,7 @@ class AppDatabaseTest() {
|
||||||
val initialModel = Site(
|
val initialModel = Site(
|
||||||
name = "Test 1",
|
name = "Test 1",
|
||||||
url = "https://test1.com",
|
url = "https://test1.com",
|
||||||
|
tags = "",
|
||||||
settings = null,
|
settings = null,
|
||||||
lastResult = null,
|
lastResult = null,
|
||||||
retryPolicy = null
|
retryPolicy = null
|
||||||
|
@ -135,6 +137,7 @@ class AppDatabaseTest() {
|
||||||
val model1 = Site(
|
val model1 = Site(
|
||||||
name = "Test 1",
|
name = "Test 1",
|
||||||
url = "https://test1.com",
|
url = "https://test1.com",
|
||||||
|
tags = "",
|
||||||
settings = null,
|
settings = null,
|
||||||
lastResult = null,
|
lastResult = null,
|
||||||
retryPolicy = null
|
retryPolicy = null
|
||||||
|
@ -145,6 +148,7 @@ class AppDatabaseTest() {
|
||||||
val model2 = Site(
|
val model2 = Site(
|
||||||
name = "Test 2",
|
name = "Test 2",
|
||||||
url = "https://test2.com",
|
url = "https://test2.com",
|
||||||
|
tags = "",
|
||||||
settings = null,
|
settings = null,
|
||||||
lastResult = null,
|
lastResult = null,
|
||||||
retryPolicy = null
|
retryPolicy = null
|
||||||
|
@ -292,7 +296,7 @@ class AppDatabaseTest() {
|
||||||
val newId = retryDao.insert(model)
|
val newId = retryDao.insert(model)
|
||||||
assertThat(newId).isEqualTo(1)
|
assertThat(newId).isEqualTo(1)
|
||||||
|
|
||||||
val finalModel = resultsDao.forSite(newId)
|
val finalModel = retryDao.forSite(newId)
|
||||||
.single()
|
.single()
|
||||||
assertThat(finalModel).isEqualTo(model.copy(siteId = newId))
|
assertThat(finalModel).isEqualTo(model.copy(siteId = newId))
|
||||||
}
|
}
|
||||||
|
@ -348,6 +352,25 @@ class AppDatabaseTest() {
|
||||||
assertThat(allSites[2]).isEqualTo(MOCK_MODEL_3)
|
assertThat(allSites[2]).isEqualTo(MOCK_MODEL_3)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test fun extension_put_and_allSites_withTag() {
|
||||||
|
val model1 = MOCK_MODEL_1.copy(tags = "one,two,three")
|
||||||
|
val model2 = MOCK_MODEL_2.copy(tags = "four,five,six")
|
||||||
|
val model3 = MOCK_MODEL_3.copy(tags = "seven,eight,nine")
|
||||||
|
|
||||||
|
db.putSite(model1)
|
||||||
|
db.putSite(model2)
|
||||||
|
db.putSite(model3)
|
||||||
|
|
||||||
|
val allSites1 = db.allSites(forTag = "one")
|
||||||
|
assertThat(allSites1.single()).isEqualTo(model1)
|
||||||
|
|
||||||
|
val allSites2 = db.allSites(forTag = "five")
|
||||||
|
assertThat(allSites2.single()).isEqualTo(model2)
|
||||||
|
|
||||||
|
val allSites3 = db.allSites(forTag = "nine")
|
||||||
|
assertThat(allSites3.single()).isEqualTo(model3)
|
||||||
|
}
|
||||||
|
|
||||||
@Test fun extension_put_getSite() {
|
@Test fun extension_put_getSite() {
|
||||||
db.putSite(MOCK_MODEL_1)
|
db.putSite(MOCK_MODEL_1)
|
||||||
db.putSite(MOCK_MODEL_2)
|
db.putSite(MOCK_MODEL_2)
|
||||||
|
|
|
@ -62,6 +62,7 @@ fun fakeModel(id: Long) = Site(
|
||||||
id = id,
|
id = id,
|
||||||
name = "Test",
|
name = "Test",
|
||||||
url = "https://test.com",
|
url = "https://test.com",
|
||||||
|
tags = "",
|
||||||
settings = fakeSettingsModel(id),
|
settings = fakeSettingsModel(id),
|
||||||
lastResult = fakeResultModel(id),
|
lastResult = fakeResultModel(id),
|
||||||
retryPolicy = fakeRetryPolicy(id)
|
retryPolicy = fakeRetryPolicy(id)
|
||||||
|
|
|
@ -52,21 +52,28 @@ abstract class AppDatabase : RoomDatabase() {
|
||||||
*
|
*
|
||||||
* @author Aidan Follestad (@afollestad)
|
* @author Aidan Follestad (@afollestad)
|
||||||
*/
|
*/
|
||||||
fun AppDatabase.allSites(): List<Site> {
|
fun AppDatabase.allSites(forTag: String = ""): List<Site> {
|
||||||
return siteDao().all()
|
val lowercaseTag = forTag.toLowerCase()
|
||||||
.map {
|
var all = siteDao().all()
|
||||||
val settings = siteSettingsDao().forSite(it.id)
|
if (!forTag.isEmpty()) {
|
||||||
.single()
|
all = all.filter {
|
||||||
val lastResult = validationResultsDao().forSite(it.id)
|
forTag.isEmpty() ||
|
||||||
.singleOrNull()
|
it.tags.toLowerCase().split(",").contains(lowercaseTag)
|
||||||
val retryPolicy = retryPolicyDao().forSite(it.id)
|
}
|
||||||
.singleOrNull()
|
}
|
||||||
return@map it.copy(
|
return all.map {
|
||||||
settings = settings,
|
val settings = siteSettingsDao().forSite(it.id)
|
||||||
lastResult = lastResult,
|
.single()
|
||||||
retryPolicy = retryPolicy
|
val lastResult = validationResultsDao().forSite(it.id)
|
||||||
)
|
.singleOrNull()
|
||||||
}
|
val retryPolicy = retryPolicyDao().forSite(it.id)
|
||||||
|
.singleOrNull()
|
||||||
|
return@map it.copy(
|
||||||
|
settings = settings,
|
||||||
|
lastResult = lastResult,
|
||||||
|
retryPolicy = retryPolicy
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -31,3 +31,15 @@ class Database1to2Migration : Migration(1, 2) {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Migrates the database from version 2 to 3.
|
||||||
|
*
|
||||||
|
* @author Aidan Follestad (@afollestad)
|
||||||
|
*/
|
||||||
|
class Database2to3Migration : Migration(1, 2) {
|
||||||
|
|
||||||
|
override fun migrate(database: SupportSQLiteDatabase) {
|
||||||
|
database.execSQL("ALTER TABLE `sites` ADD COLUMN tags TEXT NOT NULL")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -31,8 +31,10 @@ data class Site(
|
||||||
@PrimaryKey(autoGenerate = true) var id: Long = 0,
|
@PrimaryKey(autoGenerate = true) var id: Long = 0,
|
||||||
/** The site's user-given name. */
|
/** The site's user-given name. */
|
||||||
var name: String,
|
var name: String,
|
||||||
/** The URl at which validation attempts are made to. */
|
/** The URL at which validation attempts are made to. */
|
||||||
var url: String,
|
var url: String,
|
||||||
|
/** Comma separated tags for this site. */
|
||||||
|
var tags: String,
|
||||||
/** Settings for the site. */
|
/** Settings for the site. */
|
||||||
@Ignore var settings: SiteSettings?,
|
@Ignore var settings: SiteSettings?,
|
||||||
/** The last validation attempt result for the site, if any. */
|
/** The last validation attempt result for the site, if any. */
|
||||||
|
@ -41,7 +43,7 @@ data class Site(
|
||||||
@Ignore var retryPolicy: RetryPolicy?
|
@Ignore var retryPolicy: RetryPolicy?
|
||||||
) : CanNotifyModel {
|
) : CanNotifyModel {
|
||||||
|
|
||||||
constructor() : this(0, "", "", null, null, null)
|
constructor() : this(0, "", "", "", null, null, null)
|
||||||
|
|
||||||
override fun notifyId(): Int = id.toInt()
|
override fun notifyId(): Int = id.toInt()
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,7 @@ ext.versions = [
|
||||||
// Misc
|
// Misc
|
||||||
okHttp : '3.12.1',
|
okHttp : '3.12.1',
|
||||||
rhino : '1.7.10',
|
rhino : '1.7.10',
|
||||||
|
chipView : '1.0.3',
|
||||||
|
|
||||||
// Kotlin
|
// Kotlin
|
||||||
kotlin : '1.3.11',
|
kotlin : '1.3.11',
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue