From 5b42082aa06fd01602c3e20a009bbe5c521c3d5d Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Tue, 9 Apr 2019 15:40:14 +0200 Subject: [PATCH] add dynamic date queryCondition and unitTests --- .../filter/DateFilterInstrumentedUnitTest.kt | 218 ++++++++++++++++++ .../android/model/filter/QueryCondition.kt | 41 +++- .../android/model/realm/Session.kt | 1 + 3 files changed, 258 insertions(+), 2 deletions(-) diff --git a/app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/DateFilterInstrumentedUnitTest.kt b/app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/DateFilterInstrumentedUnitTest.kt index 7f347618..2fd4b380 100644 --- a/app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/DateFilterInstrumentedUnitTest.kt +++ b/app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/DateFilterInstrumentedUnitTest.kt @@ -8,6 +8,7 @@ import net.pokeranalytics.android.model.realm.FilterCondition import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.ui.view.rowrepresentable.FilterElementRow import net.pokeranalytics.android.ui.view.rowrepresentable.FilterSectionRow +import net.pokeranalytics.android.util.extensions.startOfDay import org.junit.Assert import org.junit.Test import org.junit.runner.RunWith @@ -150,6 +151,223 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { } } + @Test + fun testTodayFilter() { + + val realm = this.mockRealm + realm.beginTransaction() + + val s1 = Session.testInstance(100.0, false) + + val cal = Calendar.getInstance() + cal.time = Date() + cal.add(Calendar.HOUR_OF_DAY, -72) + Session.testInstance(100.0, false, cal.time) + + realm.commitTransaction() + + Assert.assertTrue(realm.where(Session::class.java).findAll().count() == 2) + + val sessions = Filter.queryOn(realm, arrayListOf(QueryCondition.TODAY)) + + Assert.assertEquals(1, sessions.size) + sessions[0]?.run { + Assert.assertEquals(s1.id, this.id) + } + } + + @Test + fun testTodayNoonFilter() { + + val realm = this.mockRealm + realm.beginTransaction() + + val cal = Calendar.getInstance() + cal.time = Date().startOfDay() + val s1 = Session.testInstance(100.0, false, cal.time) + + cal.add(Calendar.HOUR_OF_DAY, -72) + Session.testInstance(100.0, false, cal.time) + + realm.commitTransaction() + + Assert.assertTrue(realm.where(Session::class.java).findAll().count() == 2) + + val sessions = Filter.queryOn(realm, arrayListOf(QueryCondition.TODAY)) + + Assert.assertEquals(1, sessions.size) + sessions[0]?.run { + Assert.assertEquals(s1.id, this.id) + } + } + + + @Test + fun testYesterdayFilter() { + + val realm = this.mockRealm + realm.beginTransaction() + val cal = Calendar.getInstance() + cal.time = Date() + cal.add(Calendar.HOUR_OF_DAY, -24) + val s1 = Session.testInstance(100.0, false, cal.time) + + Session.testInstance(100.0, false) + + cal.add(Calendar.HOUR_OF_DAY, -72) + Session.testInstance(100.0, false, cal.time) + + realm.commitTransaction() + + Assert.assertTrue(realm.where(Session::class.java).findAll().count() == 3) + + val sessions = Filter.queryOn(realm, arrayListOf(QueryCondition.YESTERDAY)) + + Assert.assertEquals(1, sessions.size) + sessions[0]?.run { + Assert.assertEquals(s1.id, this.id) + } + } + + @Test + fun testYesterdayNoonFilter() { + + val realm = this.mockRealm + realm.beginTransaction() + val cal = Calendar.getInstance() + cal.time = Date() + cal.add(Calendar.HOUR_OF_DAY, -24) + val s1 = Session.testInstance(100.0, false, cal.time.startOfDay()) + + Session.testInstance(100.0, false) + + cal.add(Calendar.HOUR_OF_DAY, -72) + Session.testInstance(100.0, false, cal.time) + + realm.commitTransaction() + + Assert.assertTrue(realm.where(Session::class.java).findAll().count() == 3) + + val sessions = Filter.queryOn(realm, arrayListOf(QueryCondition.YESTERDAY)) + + Assert.assertEquals(1, sessions.size) + sessions[0]?.run { + Assert.assertEquals(s1.id, this.id) + } + } + + @Test + fun testTodayAndYesterdayFilter() { + + val realm = this.mockRealm + realm.beginTransaction() + val cal = Calendar.getInstance() + cal.time = Date() + cal.add(Calendar.HOUR_OF_DAY, -24) + val s1 = Session.testInstance(100.0, false, cal.time) + + val s2 = Session.testInstance(100.0, false) + + cal.add(Calendar.HOUR_OF_DAY, -72) + Session.testInstance(100.0, false, cal.time) + + realm.commitTransaction() + + Assert.assertTrue(realm.where(Session::class.java).findAll().count() == 3) + + val sessions = Filter.queryOn(realm, arrayListOf(QueryCondition.TODAY_AND_YESTERDAY)) + + Assert.assertEquals(2, sessions.size) + Assert.assertTrue(sessions.containsAll(arrayListOf(s1,s2))) + } + + @Test + fun testThisYear() { + + val realm = this.mockRealm + realm.beginTransaction() + val s1 = Session.testInstance(100.0, false) + + val cal = Calendar.getInstance() + cal.time = Date() + cal.add(Calendar.HOUR_OF_DAY, -24) + val s2 = Session.testInstance(100.0, false, cal.time) + + cal.add(Calendar.HOUR_OF_DAY, -72) + val s3 = Session.testInstance(100.0, false, cal.time) + + cal.add(Calendar.YEAR, -4) + Session.testInstance(100.0, false, cal.time) + + cal.add(Calendar.YEAR, -1) + Session.testInstance(100.0, false, cal.time) + + realm.commitTransaction() + + Assert.assertTrue(realm.where(Session::class.java).findAll().count() == 5) + + val sessions = Filter.queryOn(realm, arrayListOf(QueryCondition.THIS_YEAR)) + + Assert.assertEquals(3, sessions.size) + Assert.assertTrue(sessions.containsAll(arrayListOf(s1,s2, s3))) + } + + @Test + fun testThisMonth() { + + val realm = this.mockRealm + realm.beginTransaction() + val s1 = Session.testInstance(100.0, false) + + val cal = Calendar.getInstance() + cal.time = Date() + cal.set(Calendar.DAY_OF_MONTH, 1) + cal.time = cal.time.startOfDay() + val s2 = Session.testInstance(100.0, false, cal.time) + + cal.add(Calendar.HOUR_OF_DAY, -1) + Session.testInstance(100.0, false, cal.time) + + cal.add(Calendar.MONTH, -1) + Session.testInstance(100.0, false, cal.time) + + cal.add(Calendar.YEAR, -1) + Session.testInstance(100.0, false, cal.time) + + realm.commitTransaction() + + Assert.assertTrue(realm.where(Session::class.java).findAll().count() == 5) + + val sessions = Filter.queryOn(realm, arrayListOf(QueryCondition.THIS_MONTH)) + + Assert.assertEquals(2, sessions.size) + Assert.assertTrue(sessions.containsAll(arrayListOf(s1,s2))) + } + + @Test + fun testThisWeek() { + + val realm = this.mockRealm + realm.beginTransaction() + val s1 = Session.testInstance(100.0, false) + + val cal = Calendar.getInstance() + cal.time = Date() + cal.set(Calendar.DAY_OF_WEEK_IN_MONTH, 1) + cal.time = cal.time.startOfDay() + cal.add(Calendar.HOUR_OF_DAY, -1) + Session.testInstance(100.0, false, cal.time) + + realm.commitTransaction() + + Assert.assertTrue(realm.where(Session::class.java).findAll().count() == 2) + + val sessions = Filter.queryOn(realm, arrayListOf(QueryCondition.THIS_WEEK)) + + Assert.assertEquals(1, sessions.size) + Assert.assertTrue(sessions.containsAll(arrayListOf(s1))) + } + @Test fun testStartedFomDateFilter() { 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 0ad656f7..c3f2e6aa 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 @@ -6,6 +6,8 @@ import net.pokeranalytics.android.exceptions.PokerAnalyticsException import net.pokeranalytics.android.model.realm.FilterCondition import net.pokeranalytics.android.model.realm.FilterElementBlind import net.pokeranalytics.android.model.realm.Session +import net.pokeranalytics.android.util.extensions.endOfDay +import net.pokeranalytics.android.util.extensions.startOfDay import java.time.* import java.util.* import java.time.temporal.TemporalQueries.zoneId @@ -242,8 +244,43 @@ enum class QueryCondition(var operator: Operator? = null) { } query.`in`(fieldName, arrayOf(Calendar.SATURDAY, Calendar.SUNDAY)) } - TODAY, YESTERDAY, TODAY_AND_YESTERDAY, THIS_WEEK, THIS_MONTH, THIS_YEAR -> { - realmQuery + TODAY -> { + val startDate = Date() + realmQuery.between(fieldName, startDate.startOfDay(), startDate.endOfDay()) + } + TODAY_AND_YESTERDAY-> { + val startDate = Date() + val calendar = Calendar.getInstance() + calendar.time = startDate + calendar.add(Calendar.HOUR_OF_DAY, -24) + realmQuery.between(fieldName, calendar.time.startOfDay(), startDate.endOfDay()) + } + YESTERDAY -> { + val calendar = Calendar.getInstance() + calendar.time = Date() + calendar.add(Calendar.HOUR_OF_DAY, -24) + realmQuery.between(fieldName, calendar.time.startOfDay(), calendar.time.endOfDay()) + } + THIS_WEEK -> { + val startDate = Date() + val calendar = Calendar.getInstance() + calendar.time = startDate + calendar.set(Calendar.DAY_OF_WEEK_IN_MONTH, Calendar.SUNDAY) + realmQuery.between(fieldName, calendar.time.startOfDay(), startDate.endOfDay()) + } + THIS_MONTH -> { + val startDate = Date() + val calendar = Calendar.getInstance() + calendar.time = startDate + calendar.set(Calendar.DAY_OF_MONTH, 1) + realmQuery.between(fieldName, calendar.time.startOfDay(), startDate.endOfDay()) + } + THIS_YEAR -> { + val startDate = Date() + val calendar = Calendar.getInstance() + calendar.time = startDate + calendar.set(Calendar.DAY_OF_YEAR, 1) + realmQuery.between(fieldName, calendar.time.startOfDay(), startDate.endOfDay()) } else -> { throw PokerAnalyticsException.QueryTypeUnhandled 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 a2bc23e0..076649d4 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 @@ -90,6 +90,7 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat DAY_OF_WEEK, WEEK_END, WEEK_DAY -> "dayOfWeek" MONTH -> "month" YEAR -> "year" + TODAY, YESTERDAY, TODAY_AND_YESTERDAY, THIS_YEAR, THIS_MONTH, THIS_WEEK -> "startDate" else -> null } }