add any/all features filter

feature/top10
Razmig Sarkissian 7 years ago
parent bee374991b
commit 79b93693db
  1. 100
      app/src/androidTest/java/net/pokeranalytics/android/filter/SessionFilterInstrumentedUnitTest.kt
  2. 25
      app/src/main/java/net/pokeranalytics/android/model/filter/SessionFilterable.kt

@ -1,6 +1,7 @@
package net.pokeranalytics.android.filter package net.pokeranalytics.android.filter
import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.ext.junit.runners.AndroidJUnit4
import io.realm.RealmList
import net.pokeranalytics.android.model.filter.FilterManager import net.pokeranalytics.android.model.filter.FilterManager
import net.pokeranalytics.android.model.filter.SessionFilterable import net.pokeranalytics.android.model.filter.SessionFilterable
import net.pokeranalytics.android.model.realm.* import net.pokeranalytics.android.model.realm.*
@ -354,4 +355,103 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Assert.assertTrue(result.contains((it as Session).tournamentName?.id)) Assert.assertTrue(result.contains((it as Session).tournamentName?.id))
} }
} }
@Test
fun testAllTournamentFeatureFilter() {
val realm = this.mockRealm
realm.beginTransaction()
val t1 = realm.createObject(TournamentFeature::class.java, "1")
val t2 = realm.createObject(TournamentFeature::class.java, "2")
val t3 = realm.createObject(TournamentFeature::class.java, "3")
val t4 = realm.createObject(TournamentFeature::class.java, "4")
Session.testInstance(tournamentFeatures = RealmList(t1,t2))
Session.testInstance(tournamentFeatures = RealmList(t2,t3))
Session.testInstance(tournamentFeatures = RealmList(t3,t4))
val s = Session.testInstance(tournamentFeatures = RealmList(t1,t2,t3,t4))
Session.testInstance(tournamentFeatures = RealmList(t1,t4))
Session.testInstance(tournamentFeatures = RealmList(t1,t3))
Session.testInstance(tournamentFeatures = RealmList(t2,t4, t3))
Session.testInstance(tournamentFeatures = RealmList(t1))
realm.commitTransaction()
val filter = SessionFilterable.ALL_TOURNAMENT_FEATURES
filter.valueMap = mapOf("ids" to arrayOf(t1.id, t2.id, t3.id, t4.id))
val sessions = FilterManager().filter(
realm,
Session::class.java,
arrayListOf(filter)
)
Assert.assertEquals(1, sessions.size)
(sessions[0] as Session)?.run {
Assert.assertEquals(s.id, this.id)
}
}
@Test
fun testAnyTournamentFeatureFilter() {
val realm = this.mockRealm
realm.beginTransaction()
val t1 = realm.createObject(TournamentFeature::class.java, "1")
val t2 = realm.createObject(TournamentFeature::class.java, "2")
val t3 = realm.createObject(TournamentFeature::class.java, "3")
val t4 = realm.createObject(TournamentFeature::class.java, "4")
Session.testInstance(tournamentFeatures = RealmList(t1,t2))
Session.testInstance(tournamentFeatures = RealmList(t2,t3))
Session.testInstance(tournamentFeatures = RealmList(t3,t4))
Session.testInstance(tournamentFeatures = RealmList(t1,t2,t3,t4))
Session.testInstance(tournamentFeatures = RealmList(t1,t4))
Session.testInstance(tournamentFeatures = RealmList(t1,t3))
Session.testInstance(tournamentFeatures = RealmList(t2,t4, t3))
Session.testInstance(tournamentFeatures = RealmList(t1))
realm.commitTransaction()
val filter = SessionFilterable.ANY_TOURNAMENT_FEATURES
filter.valueMap = mapOf("ids" to arrayOf(t1.id, t2.id, t3.id, t4.id))
val sessions = FilterManager().filter(
realm,
Session::class.java,
arrayListOf(filter)
)
Assert.assertEquals(8, sessions.size)
}
@Test
fun testSingleAnyTournamentFeatureFilter() {
val realm = this.mockRealm
realm.beginTransaction()
val t1 = realm.createObject(TournamentFeature::class.java, "1")
val t2 = realm.createObject(TournamentFeature::class.java, "2")
val t3 = realm.createObject(TournamentFeature::class.java, "3")
val t4 = realm.createObject(TournamentFeature::class.java, "4")
val s1 = Session.testInstance(tournamentFeatures = RealmList(t1,t2))
val s2 = Session.testInstance(tournamentFeatures = RealmList(t2,t3))
Session.testInstance(tournamentFeatures = RealmList(t3,t4))
val s3 = Session.testInstance(tournamentFeatures = RealmList(t1,t2,t3,t4))
Session.testInstance(tournamentFeatures = RealmList(t1,t4))
Session.testInstance(tournamentFeatures = RealmList(t1,t3))
val s4 = Session.testInstance(tournamentFeatures = RealmList(t2,t4, t3))
Session.testInstance(tournamentFeatures = RealmList(t1))
realm.commitTransaction()
val filter = SessionFilterable.ANY_TOURNAMENT_FEATURES
filter.valueMap = mapOf("ids" to arrayOf(t2.id))
val sessions = FilterManager().filter(
realm,
Session::class.java,
arrayListOf(filter)
)
val result = arrayListOf(s1.id, s2.id, s3.id, s4.id)
Assert.assertEquals(4, sessions.size)
sessions.forEach {
Assert.assertTrue(result.contains((it as Session).id))
}
}
} }

@ -14,8 +14,8 @@ enum class SessionFilterable(private var fieldName:String? = null): Filterable {
BANKROLL("bankroll.id"), BANKROLL("bankroll.id"),
GAME("game.id"), GAME("game.id"),
TOURNAMENT_NAME("tournamentName.id"), TOURNAMENT_NAME("tournamentName.id"),
ANY_TOURNAMENT_FEATURES("tournamentFeature.id"), ANY_TOURNAMENT_FEATURES,
ALL_TOURNAMENT_FEATURES("tournamentFeature.id"), ALL_TOURNAMENT_FEATURES,
LOCATION("location.id"), LOCATION("location.id"),
LIMIT("limit"), LIMIT("limit"),
TABLE_SIZE("tableSize"), TABLE_SIZE("tableSize"),
@ -32,6 +32,7 @@ enum class SessionFilterable(private var fieldName:String? = null): Filterable {
BIG_BLIND("cgBigBlind"), BIG_BLIND("cgBigBlind"),
SMALL_BLIND("cgSmallBlind"), SMALL_BLIND("cgSmallBlind"),
COMMENT("comment"), COMMENT("comment"),
TOURNAMENT_FEATURES("tournamentFeatures.id"),
TOURNAMENT_NUMBER_OF_PLAYER("tournamentNumberOfPlayers"), TOURNAMENT_NUMBER_OF_PLAYER("tournamentNumberOfPlayers"),
TOURNAMENT_ENTRY_FEE("tournamentEntryFee"), TOURNAMENT_ENTRY_FEE("tournamentEntryFee"),
RESULT_BUY_IN("result.buyin"), RESULT_BUY_IN("result.buyin"),
@ -61,24 +62,16 @@ enum class SessionFilterable(private var fieldName:String? = null): Filterable {
TOURNAMENT -> CASH.filter(realmQuery.not()) TOURNAMENT -> CASH.filter(realmQuery.not())
ALL_TOURNAMENT_FEATURES -> { ALL_TOURNAMENT_FEATURES -> {
val ids : Array<String> by filterValues val ids : Array<String> by filterValues
this.fieldName?.let {fieldName -> ids.forEach {
ids.forEachIndexed { index, id -> realmQuery.equalTo(Field.TOURNAMENT_FEATURES.fieldName, it)
if (index == 0) {
realmQuery.beginGroup()
}
realmQuery.`in`(fieldName, arrayOf(id))
if (index == ids.size - 1) {
realmQuery.endGroup()
} else {
realmQuery.and()
}
} }
realmQuery realmQuery
} ?: run {
throw FilterValueMapException("fieldName is missing")
} }
ANY_TOURNAMENT_FEATURES -> {
val ids : Array<String> by filterValues
realmQuery.`in`(Field.TOURNAMENT_FEATURES.fieldName, ids)
} }
BANKROLL, GAME, LOCATION, ANY_TOURNAMENT_FEATURES, TOURNAMENT_NAME -> { BANKROLL, GAME, LOCATION, TOURNAMENT_NAME -> {
val ids : Array<String> by filterValues val ids : Array<String> by filterValues
this.fieldName?.let { this.fieldName?.let {
realmQuery.`in`(it, ids) realmQuery.`in`(it, ids)

Loading…
Cancel
Save