add unit test for custom field filtering

dev
Razmig Sarkissian 7 years ago
parent d82548a503
commit 5f00129787
  1. 11
      app/src/androidTest/java/net/pokeranalytics/android/model/CriteriaTest.kt
  2. 75
      app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/CustomFieldFilterInstrumentedUnitTest.kt
  3. 2
      app/src/main/java/net/pokeranalytics/android/model/Criteria.kt
  4. 1
      app/src/main/java/net/pokeranalytics/android/model/filter/Query.kt
  5. 12
      app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt
  6. 4
      app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt

@ -1,14 +1,15 @@
package net.pokeranalytics.android.model
import android.content.Context
import net.pokeranalytics.android.components.BaseFilterInstrumentedUnitTest
import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.model.realm.Session
import org.junit.Assert.assertEquals
import org.junit.Test
import java.util.*
import androidx.test.platform.app.InstrumentationRegistry
class CriteriaTest : BaseFilterInstrumentedUnitTest() {
@Test
fun getQueryConditions() {
@ -57,9 +58,12 @@ class CriteriaTest : BaseFilterInstrumentedUnitTest() {
val criterias = listOf(Criteria.MonthsOfYear, Criteria.DaysOfWeek)
val combined = criterias.combined()
val context = InstrumentationRegistry.getInstrumentation().context
combined.forEach {
it.conditions.forEach {qc->
println(qc.getDisplayName())
println(qc.getDisplayName(context))
}
}
}
@ -86,11 +90,12 @@ class CriteriaTest : BaseFilterInstrumentedUnitTest() {
val lastValue = firstValue + 10
realm.commitTransaction()
val context = InstrumentationRegistry.getInstrumentation().context
val allMonths = Criteria.AllMonthsUpToNow.queries
allMonths.forEach {
it.conditions.forEach { qc->
println("<<<<< ${qc.getDisplayName()}")
println("<<<<< ${qc.getDisplayName(context)}")
}
}
}

@ -0,0 +1,75 @@
package net.pokeranalytics.android.unitTests.filter
import androidx.test.ext.junit.runners.AndroidJUnit4
import io.realm.RealmList
import net.pokeranalytics.android.components.BaseFilterInstrumentedUnitTest
import net.pokeranalytics.android.model.filter.Query
import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.model.realm.*
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterSectionRow
import org.junit.Assert
import org.junit.Test
import org.junit.runner.RunWith
import java.util.*
@RunWith(AndroidJUnit4::class)
class CustomFieldFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
@Test
fun testCustomFieldListFilter() {
val realm = this.mockRealm
realm.beginTransaction()
val cf1 = CustomField()
cf1.type = CustomField.Type.LIST.ordinal
cf1.addEntry()
cf1.addEntry()
cf1.entries.first()?.value = "super"
cf1.entries.last()?.value = "nul"
val s1 = Session.testInstance(100.0, false, Date(), 1)
s1.customFieldEntries.add(cf1.entries.first())
val s2 = Session.testInstance(100.0, true, Date(), 1)
s2.customFieldEntries.add(cf1.entries.last())
realm.commitTransaction()
val sessions = Filter.queryOn<Session>(realm, Query(QueryCondition.CustomFieldListQuery(cf1.entries.first()!!)))
Assert.assertEquals(1, sessions.size)
sessions[0]?.run {
Assert.assertEquals(s1.id, (this).id)
}
}
@Test
fun testCustomFieldAmountFilter() {
val realm = this.mockRealm
realm.beginTransaction()
val cf1 = CustomField()
cf1.type = CustomField.Type.AMOUNT.ordinal
val cfe1 = CustomFieldEntry()
cfe1.customField = cf1
cfe1.value = "30.0"
val cfe2 = CustomFieldEntry()
cfe2.customField = cf1
cfe2.value = "100.0"
val s1 = Session.testInstance(100.0, false, Date(), 1)
s1.customFieldEntries.add(cfe1)
val s2 = Session.testInstance(100.0, true, Date(), 1)
s2.customFieldEntries.add(cfe2)
realm.commitTransaction()
val sessions = Filter.queryOn<Session>(realm, Query(QueryCondition.CustomFieldNumberQuery(cf1.id, 100.0)))
Assert.assertEquals(1, sessions.size)
sessions[0]?.run {
Assert.assertEquals(s2.id, (this).id)
}
}
}

@ -93,7 +93,7 @@ sealed class Criteria(override var uniqueIdentifier: Int) : IntIdentifiable, Row
distincts.distinct().forEach {
val condition: QueryCondition.CustomFieldNumberQuery = QueryCondition.CustomFieldNumberQuery().apply {
this.customFieldId = this@ListCriteria.customField.id
listOfValues = arrayListOf(it.value.toDouble())
listOfValues = arrayListOf(it.value)
}
objects.add(condition)
objects.sorted()

@ -68,6 +68,7 @@ class Query {
}
}
println("<<<<<< ${realmQuery.description}")
val queryLast = this.conditions.filter {
it is QueryCondition.Last
}.firstOrNull()

@ -498,8 +498,14 @@ sealed class QueryCondition : FilterElementRow {
var customFieldId : String?
}
class CustomFieldNumberQuery : ListOfDouble(), CustomFieldQuery {
class CustomFieldNumberQuery() : ListOfString(), CustomFieldQuery {
override var customFieldId : String? = null
override var operator: Operator = Operator.EQUALS
constructor(customFieldId: String, value: Double): this() {
this.listOfValues = arrayListOf(value.toString())
println("<<<<<< $listOfValues")
this.customFieldId = customFieldId
}
}
class CustomFieldListQuery() : QueryDataCondition<CustomFieldEntry>(), CustomFieldQuery {
@ -603,6 +609,10 @@ sealed class QueryCondition : FilterElementRow {
}
}
if (this is CustomFieldQuery) {
realmQuery.equalTo("customFieldEntries.customField.id", customFieldId)
}
return when (operator) {
Operator.EQUALS -> {
when (this) {

@ -94,7 +94,9 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat
StartedFromTime::class.java -> "startDateHourMinuteComponent"
EndedToTime::class.java -> "endDateHourMinuteComponent"
Duration::class.java -> "netDuration"
else -> null
CustomFieldListQuery::class.java -> "customFieldEntries.id"
CustomFieldNumberQuery::class.java -> "customFieldEntries.value"
else -> null
}
}
}

Loading…
Cancel
Save