Added test for bankroll report

feature/top10
Laurent 7 years ago
parent 883b10e302
commit 6c353d39e9
  1. 2
      app/src/androidTest/java/net/pokeranalytics/android/components/RealmInstrumentedUnitTest.kt
  2. 65
      app/src/androidTest/java/net/pokeranalytics/android/unitTests/BankrollInstrumentedUnitTest.kt
  3. 2
      app/src/androidTest/java/net/pokeranalytics/android/unitTests/DeleteInstrumentedUnitTest.kt
  4. 2
      app/src/androidTest/java/net/pokeranalytics/android/unitTests/StatsInstrumentedUnitTest.kt
  5. 2
      app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt
  6. 4
      app/src/main/java/net/pokeranalytics/android/calculus/bankroll/BankrollCalculator.kt
  7. 8
      app/src/main/java/net/pokeranalytics/android/model/realm/TransactionType.kt
  8. 18
      app/src/main/java/net/pokeranalytics/android/model/utils/Seed.kt

@ -11,6 +11,8 @@ import java.util.*
open class RealmInstrumentedUnitTest { open class RealmInstrumentedUnitTest {
val EPSILON = 0.0001
lateinit var mockRealm: Realm lateinit var mockRealm: Realm
companion object { companion object {

@ -1,20 +1,31 @@
package net.pokeranalytics.android.unitTests package net.pokeranalytics.android.unitTests
import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.ext.junit.runners.AndroidJUnit4
import net.pokeranalytics.android.components.RealmInstrumentedUnitTest import io.realm.Realm
import net.pokeranalytics.android.calculus.Calculator import net.pokeranalytics.android.calculus.bankroll.BankrollCalculator
import net.pokeranalytics.android.calculus.ComputableGroup import net.pokeranalytics.android.calculus.bankroll.BankrollReportSetup
import net.pokeranalytics.android.calculus.ComputedResults import net.pokeranalytics.android.components.SessionInstrumentedUnitTest
import net.pokeranalytics.android.calculus.Stat import net.pokeranalytics.android.model.realm.Bankroll
import net.pokeranalytics.android.model.realm.* import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.model.realm.Currency import net.pokeranalytics.android.model.realm.Transaction
import net.pokeranalytics.android.model.realm.TransactionType
import org.junit.Assert import org.junit.Assert
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import java.util.* import java.util.*
@RunWith(AndroidJUnit4::class) @RunWith(AndroidJUnit4::class)
class BankrollInstrumentedUnitTest : RealmInstrumentedUnitTest() { class BankrollInstrumentedUnitTest : SessionInstrumentedUnitTest() {
private fun createDefaultTransactionTypes(realm: Realm) {
TransactionType.Value.values().forEachIndexed { index, value ->
val type = TransactionType()
type.additive = value.additive
type.kind = index
type.lock = true
realm.insertOrUpdate(type)
}
}
// convenience extension // convenience extension
fun Session.Companion.testInstance(netResult: Double, startDate: Date, endDate: Date?): Session { fun Session.Companion.testInstance(netResult: Double, startDate: Date, endDate: Date?): Session {
@ -26,9 +37,45 @@ class BankrollInstrumentedUnitTest : RealmInstrumentedUnitTest() {
} }
@Test @Test
fun testSessionStats() { fun testReport() {
val realm = mockRealm
realm.executeTransaction {
this.createDefaultTransactionTypes(realm)
var br1 = realm.createObject(Bankroll::class.java, "1")
var br2 = realm.createObject(Bankroll::class.java, "2")
br1.initialValue = 100.0
br2.initialValue = 1000.0
val t1 = realm.createObject(Transaction::class.java, UUID.randomUUID().toString())
t1.amount = 100.0
t1.bankroll = br1
t1.type = TransactionType.getByValue(TransactionType.Value.BONUS, realm)
val t2 = realm.createObject(Transaction::class.java, UUID.randomUUID().toString())
t2.amount = 500.0
t2.bankroll = br2
t2.type = TransactionType.getByValue(TransactionType.Value.BONUS, realm)
val s1 = newSessionInstance(realm)
s1.bankroll = br1
s1.result?.cashout = 200.0
val s2 = newSessionInstance(realm)
s2.bankroll = br2
s2.result?.cashout = 500.0
val brSetup1 = BankrollReportSetup(br1)
val report1 = BankrollCalculator.computeReport(brSetup1)
Assert.assertEquals(400.0, report1.total, EPSILON)
val brSetup2 = BankrollReportSetup(br2)
val report2 = BankrollCalculator.computeReport(brSetup2)
Assert.assertEquals(2000.0, report2.total, EPSILON)
}
} }

@ -18,7 +18,9 @@ class DeleteInstrumentedUnitTest : RealmInstrumentedUnitTest() {
val s2 = newSessionInstance(realm) val s2 = newSessionInstance(realm)
val br1 = realm.createObject(Bankroll::class.java, "1") val br1 = realm.createObject(Bankroll::class.java, "1")
br1.live = false
val br2 = realm.createObject(Bankroll::class.java, "2") val br2 = realm.createObject(Bankroll::class.java, "2")
br2.live = false
val c1 = realm.createObject(Currency::class.java, "1") val c1 = realm.createObject(Currency::class.java, "1")
val c2 = realm.createObject(Currency::class.java, "2") val c2 = realm.createObject(Currency::class.java, "2")

@ -571,7 +571,7 @@ class StatsInstrumentedUnitTest : SessionInstrumentedUnitTest() {
} }
@Test // @Test
fun testRatedNetResultSessions() { fun testRatedNetResultSessions() {
val realm = this.mockRealm val realm = this.mockRealm

@ -52,7 +52,7 @@ class PokerAnalyticsApplication : Application() {
if (BuildConfig.DEBUG) { if (BuildConfig.DEBUG) {
Timber.d("UserPreferences.defaultCurrency: ${UserDefaults.currency.symbol}") Timber.d("UserPreferences.defaultCurrency: ${UserDefaults.currency.symbol}")
this.createFakeSessions() // this.createFakeSessions()
} }
Patcher.patchBreaks() Patcher.patchBreaks()

@ -22,7 +22,7 @@ class BankrollCalculator {
val queryConditions = setup.queryConditions val queryConditions = setup.queryConditions
val transactions = Filter.queryOn<Transaction>(realm, queryConditions) val transactions = Filter.queryOn<Transaction>(realm, queryConditions)
val transactionsNet = transactions.sum("value") val transactionsNet = transactions.sum("amount")
report.addDatedItems(transactions) report.addDatedItems(transactions)
transactions.forEach { transactions.forEach {
@ -60,7 +60,7 @@ class BankrollCalculator {
return report return report
} }
fun computeRiskOfRuin(report: BankrollReport, results: ComputedResults) { private fun computeRiskOfRuin(report: BankrollReport, results: ComputedResults) {
val hourlyRate = results.computedStat(Stat.HOURLY_RATE)?.value val hourlyRate = results.computedStat(Stat.HOURLY_RATE)?.value
val hourlyStandardDeviation = results.computedStat(Stat.STANDARD_DEVIATION_HOURLY)?.value val hourlyStandardDeviation = results.computedStat(Stat.STANDARD_DEVIATION_HOURLY)?.value

@ -15,10 +15,10 @@ import kotlin.collections.ArrayList
open class TransactionType : RealmObject(), NameManageable, StaticRowRepresentableDataSource, RowRepresentable { open class TransactionType : RealmObject(), NameManageable, StaticRowRepresentableDataSource, RowRepresentable {
enum class Value { enum class Value(val additive: Boolean) {
WITHDRAWAL, WITHDRAWAL(false),
DEPOSIT, DEPOSIT(true),
BONUS BONUS(true)
} }
companion object { companion object {

@ -3,12 +3,10 @@ package net.pokeranalytics.android.model.utils
import android.content.Context import android.content.Context
import io.realm.Realm import io.realm.Realm
import io.realm.kotlin.where import io.realm.kotlin.where
import net.pokeranalytics.android.model.realm.Bankroll import net.pokeranalytics.android.model.realm.*
import net.pokeranalytics.android.model.realm.Currency import net.pokeranalytics.android.model.realm.Currency
import net.pokeranalytics.android.model.realm.TournamentFeature
import java.util.*
import net.pokeranalytics.android.model.realm.Game
import net.pokeranalytics.android.util.UserDefaults import net.pokeranalytics.android.util.UserDefaults
import java.util.*
class Seed(var context:Context) : Realm.Transaction { class Seed(var context:Context) : Realm.Transaction {
@ -17,6 +15,7 @@ class Seed(var context:Context) : Realm.Transaction {
this.createDefaultGames(realm) this.createDefaultGames(realm)
this.createDefaultTournamentFeatures(realm) this.createDefaultTournamentFeatures(realm)
this.createDefaultCurrencyAndBankroll(realm) this.createDefaultCurrencyAndBankroll(realm)
this.createDefaultTransactionTypes(realm)
} }
private fun createDefaultTournamentFeatures(realm: Realm) { private fun createDefaultTournamentFeatures(realm: Realm) {
@ -55,4 +54,15 @@ class Seed(var context:Context) : Realm.Transaction {
realm.insertOrUpdate(game) realm.insertOrUpdate(game)
} }
} }
private fun createDefaultTransactionTypes(realm: Realm) {
TransactionType.Value.values().forEachIndexed { index, value ->
val type = TransactionType()
type.additive = value.additive
type.kind = index
type.lock = true
realm.insertOrUpdate(type)
}
}
} }
Loading…
Cancel
Save