From 5f00129787a1c5dddf9b725efec5bfe0fee7c793 Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Mon, 20 May 2019 14:35:02 +0200 Subject: [PATCH] add unit test for custom field filtering --- .../android/model/CriteriaTest.kt | 11 ++- .../CustomFieldFilterInstrumentedUnitTest.kt | 75 +++++++++++++++++++ .../pokeranalytics/android/model/Criteria.kt | 2 +- .../android/model/filter/Query.kt | 1 + .../android/model/filter/QueryCondition.kt | 12 ++- .../android/model/realm/Session.kt | 4 +- 6 files changed, 99 insertions(+), 6 deletions(-) create mode 100644 app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/CustomFieldFilterInstrumentedUnitTest.kt diff --git a/app/src/androidTest/java/net/pokeranalytics/android/model/CriteriaTest.kt b/app/src/androidTest/java/net/pokeranalytics/android/model/CriteriaTest.kt index 1248af55..bd0bf7ee 100644 --- a/app/src/androidTest/java/net/pokeranalytics/android/model/CriteriaTest.kt +++ b/app/src/androidTest/java/net/pokeranalytics/android/model/CriteriaTest.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)}") } } } diff --git a/app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/CustomFieldFilterInstrumentedUnitTest.kt b/app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/CustomFieldFilterInstrumentedUnitTest.kt new file mode 100644 index 00000000..b7f5a163 --- /dev/null +++ b/app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/CustomFieldFilterInstrumentedUnitTest.kt @@ -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(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(realm, Query(QueryCondition.CustomFieldNumberQuery(cf1.id, 100.0))) + + Assert.assertEquals(1, sessions.size) + sessions[0]?.run { + Assert.assertEquals(s2.id, (this).id) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/model/Criteria.kt b/app/src/main/java/net/pokeranalytics/android/model/Criteria.kt index 42ab77d2..6af0cf14 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/Criteria.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/Criteria.kt @@ -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() diff --git a/app/src/main/java/net/pokeranalytics/android/model/filter/Query.kt b/app/src/main/java/net/pokeranalytics/android/model/filter/Query.kt index b9bed8d4..c81dcfd3 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/filter/Query.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/filter/Query.kt @@ -68,6 +68,7 @@ class Query { } } + println("<<<<<< ${realmQuery.description}") val queryLast = this.conditions.filter { it is QueryCondition.Last }.firstOrNull() diff --git a/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt b/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt index 2b93ce3c..58e6e04f 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt @@ -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(), 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) { diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt index 11f87c4f..af15f84b 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt @@ -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 } } }