diff --git a/README.md b/README.md index 93691abc..2bcb48c3 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Dartzee [![Build Status](https://github.com/alyssaruth/Dartzee/workflows/CI/badge.svg)](https://github.com/alyssaruth/dartzee/actions) -![Coverage: 93.17%](https://img.shields.io/badge/coverage-93.17%25-brightgreen) +![Coverage: 93.18%](https://img.shields.io/badge/coverage-93.18%25-brightgreen) All rights reserved diff --git a/build.gradle.kts b/build.gradle.kts index dad1f9f1..8b573471 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,8 +1,8 @@ +import java.net.URI import kotlinx.kover.api.KoverTaskExtension import org.gradle.api.tasks.testing.logging.TestExceptionFormat import org.gradle.api.tasks.testing.logging.TestLogEvent import org.jetbrains.kotlin.gradle.tasks.KotlinCompile -import java.net.URI plugins { kotlin("jvm") version "1.9.22" @@ -19,6 +19,7 @@ repositories { } apply(plugin = "kotlin") + apply(plugin = "application") detekt { @@ -27,9 +28,7 @@ detekt { config.setFrom("$projectDir/detekt-config.yml") } -ktfmt { - kotlinLangStyle() -} +ktfmt { kotlinLangStyle() } dependencies { implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0") @@ -54,13 +53,7 @@ dependencies { testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.9.2") } -kotlin { - sourceSets.all { - languageSettings { - languageVersion = "2.0" - } - } -} +kotlin { sourceSets.all { languageSettings { languageVersion = "2.0" } } } project.setProperty("mainClassName", "dartzee.main.DartsMainKt") @@ -86,65 +79,51 @@ compileTestKotlin.kotlinOptions { } task("runDev") { - configure(closureOf { - group = "run" - classpath = project.the()["main"].runtimeClasspath - args = listOf("devMode", "trueLaunch") - mainClass.set("dartzee.main.DartsMainKt") - }) -} - -kover { - filters { - classes { - excludes.add("dartzee.screen.TestWindow") + configure( + closureOf { + group = "run" + classpath = project.the()["main"].runtimeClasspath + args = listOf("devMode", "trueLaunch") + mainClass.set("dartzee.main.DartsMainKt") } - } + ) } +kover { filters { classes { excludes.add("dartzee.screen.TestWindow") } } } + task("unitTest") { group = "verification" - useJUnitPlatform { - excludeTags = setOf("integration", "e2e") - } + useJUnitPlatform { excludeTags = setOf("integration", "e2e") } } task("updateScreenshots") { group = "verification" - useJUnitPlatform { - includeTags = setOf("screenshot") - } + useJUnitPlatform { includeTags = setOf("screenshot") } jvmArgs = listOf("-DupdateSnapshots=true") } task("integrationAndE2E") { group = "verification" - useJUnitPlatform { - includeTags = setOf("integration", "e2e") - } + useJUnitPlatform { includeTags = setOf("integration", "e2e") } } -tasks { - named("test") { - useJUnitPlatform() - } -} +tasks { named("test") { useJUnitPlatform() } } tasks.withType { minHeapSize = "1024m" maxHeapSize = "1024m" - jvmArgs = listOf("-Dcom.sun.management.jmxremote", - "-Dcom.sun.management.jmxremote.port=9010", - "-Dcom.sun.management.jmxremote.authenticate=false", - "-Dcom.sun.management.jmxremote.ssl=false", - "-Djava.rmi.server.hostname=localhost", - "-DscreenshotOs=linux") + jvmArgs = + listOf( + "-Dcom.sun.management.jmxremote", + "-Dcom.sun.management.jmxremote.port=9010", + "-Dcom.sun.management.jmxremote.authenticate=false", + "-Dcom.sun.management.jmxremote.ssl=false", + "-Djava.rmi.server.hostname=localhost" + ) - extensions.configure { - isDisabled.set(name != "unitTest") - } + extensions.configure { isDisabled.set(name != "unitTest") } testLogging { events = mutableSetOf(TestLogEvent.STARTED, TestLogEvent.FAILED) @@ -153,12 +132,12 @@ tasks.withType { } tasks.withType { - manifest { - attributes["Main-Class"] = "dartzee.main.DartsMainKt" - } + manifest { attributes["Main-Class"] = "dartzee.main.DartsMainKt" } duplicatesStrategy = DuplicatesStrategy.EXCLUDE dependsOn(configurations.runtimeClasspath) - from(configurations.runtimeClasspath.get().filter { it.name.endsWith("jar") }.map { zipTree(it) }) + from( + configurations.runtimeClasspath.get().filter { it.name.endsWith("jar") }.map { zipTree(it) } + ) } diff --git a/src/main/kotlin/dartzee/reporting/IncludedPlayerParameters.kt b/src/main/kotlin/dartzee/reporting/IncludedPlayerParameters.kt index d3a2399d..cc98db55 100644 --- a/src/main/kotlin/dartzee/reporting/IncludedPlayerParameters.kt +++ b/src/main/kotlin/dartzee/reporting/IncludedPlayerParameters.kt @@ -3,9 +3,9 @@ package dartzee.reporting const val COMPARATOR_SCORE_UNSET = "is unset" data class IncludedPlayerParameters( - var finishingPositions: List = listOf(), - var finalScoreComparator: String = "", - var finalScore: Int = -1 + val finishingPositions: List, + val finalScoreComparator: String, + val finalScore: Int? ) { fun generateExtraWhereSql(alias: String): String { val sb = StringBuilder() @@ -16,7 +16,7 @@ data class IncludedPlayerParameters( if (finalScoreComparator.equals(COMPARATOR_SCORE_UNSET, ignoreCase = true)) { sb.append(" AND $alias.FinalScore = -1") - } else if (finalScore > -1) { + } else if (finalScore != null) { sb.append(" AND $alias.FinalScore $finalScoreComparator $finalScore") sb.append(" AND $alias.FinalScore > -1") } diff --git a/src/main/kotlin/dartzee/reporting/ReportParameters.kt b/src/main/kotlin/dartzee/reporting/ReportParameters.kt index 7e6dbcea..a62e7316 100644 --- a/src/main/kotlin/dartzee/reporting/ReportParameters.kt +++ b/src/main/kotlin/dartzee/reporting/ReportParameters.kt @@ -3,73 +3,58 @@ package dartzee.reporting import dartzee.core.util.DateStatics import dartzee.core.util.getEndOfTimeSqlString import dartzee.core.util.getSqlString -import dartzee.db.PlayerEntity import dartzee.db.SyncAuditEntity -import dartzee.game.GameType import dartzee.utils.InjectedThings.mainDatabase -import java.sql.Timestamp - -class ReportParameters { - var gameType: GameType? = null - var gameParams = "" - var unfinishedOnly = false - var dtStartFrom: Timestamp? = null - var dtStartTo: Timestamp? = null - var dtFinishFrom: Timestamp? = null - var dtFinishTo: Timestamp? = null - var hmIncludedPlayerToParms = mapOf() - var excludedPlayers: List = ArrayList() - var excludeOnlyAi: Boolean = false - var partOfMatch = MatchFilter.BOTH - var pendingChanges: Boolean? = null + +data class ReportParameters(val game: ReportParametersGame, val players: ReportParametersPlayers) { fun getExtraWhereSql(): String { val sb = StringBuilder() - if (gameType != null) { - sb.append(" AND g.GameType = '$gameType'") + if (game.gameType != null) { + sb.append(" AND g.GameType = '${game.gameType}'") } - if (!gameParams.isEmpty()) { - sb.append(" AND g.GameParams = '$gameParams'") + if (game.gameParams.isNotEmpty()) { + sb.append(" AND g.GameParams = '${game.gameParams}'") } - if (dtStartFrom != null) { + if (game.dtStartFrom != null) { sb.append(" AND g.DtCreation >= '") - sb.append(dtStartFrom) + sb.append(game.dtStartFrom) sb.append("'") } - if (dtStartTo != null) { + if (game.dtStartTo != null) { sb.append(" AND g.DtCreation <= '") - sb.append(dtStartTo) + sb.append(game.dtStartTo) sb.append("'") } - if (dtFinishFrom != null) { + if (game.dtFinishFrom != null) { sb.append(" AND g.DtFinish >= '") - sb.append(dtFinishFrom) + sb.append(game.dtFinishFrom) sb.append("'") } - if (dtFinishTo != null) { + if (game.dtFinishTo != null) { sb.append(" AND g.DtFinish <= '") - sb.append(dtFinishTo) + sb.append(game.dtFinishTo) sb.append("'") } - if (unfinishedOnly) { + if (game.unfinishedOnly) { sb.append(" AND g.DtFinish = ") sb.append(getEndOfTimeSqlString()) } - if (partOfMatch == MatchFilter.GAMES_ONLY) { + if (game.partOfMatch == MatchFilter.GAMES_ONLY) { sb.append(" AND g.DartsMatchId = ''") - } else if (partOfMatch == MatchFilter.MATCHES_ONLY) { + } else if (game.partOfMatch == MatchFilter.MATCHES_ONLY) { sb.append(" AND g.DartsMatchId <> ''") } - pendingChanges?.let { pendingChanges -> + game.pendingChanges?.let { pendingChanges -> val dtLastSynced = SyncAuditEntity.getLastSyncData(mainDatabase)?.lastSynced ?: DateStatics.START_OF_TIME @@ -80,7 +65,7 @@ class ReportParameters { } } - val it = hmIncludedPlayerToParms.entries.iterator() + val it = players.includedPlayers.entries.iterator() while (it.hasNext()) { val entry = it.next() val player = entry.key @@ -97,14 +82,14 @@ class ReportParameters { sb.append(")") } - for (player in excludedPlayers) { + for (player in players.excludedPlayers) { sb.append(" AND NOT EXISTS (") sb.append(" SELECT 1 FROM Participant z") sb.append(" WHERE z.PlayerId = '${player.rowId}'") sb.append(" AND z.GameId = g.RowId)") } - if (excludeOnlyAi) { + if (players.excludeOnlyAi) { sb.append(" AND EXISTS (") sb.append(" SELECT 1 FROM Participant z, Player p") sb.append(" WHERE z.PlayerId = p.RowId") @@ -114,13 +99,6 @@ class ReportParameters { return sb.toString() } - - override fun toString() = - "[$gameType, $gameParams, $dtStartFrom, $dtStartTo, $dtFinishFrom, $dtFinishTo]" - - fun setEnforceMatch(matches: Boolean) { - partOfMatch = if (matches) MatchFilter.MATCHES_ONLY else MatchFilter.GAMES_ONLY - } } enum class MatchFilter { diff --git a/src/main/kotlin/dartzee/reporting/ReportParametersGame.kt b/src/main/kotlin/dartzee/reporting/ReportParametersGame.kt new file mode 100644 index 00000000..1f0f9bd5 --- /dev/null +++ b/src/main/kotlin/dartzee/reporting/ReportParametersGame.kt @@ -0,0 +1,16 @@ +package dartzee.reporting + +import dartzee.game.GameType +import java.sql.Timestamp + +data class ReportParametersGame( + val gameType: GameType?, + val gameParams: String, + val dtStartFrom: Timestamp?, + val dtStartTo: Timestamp?, + val unfinishedOnly: Boolean, + val dtFinishFrom: Timestamp?, + val dtFinishTo: Timestamp?, + val partOfMatch: MatchFilter, + val pendingChanges: Boolean? +) diff --git a/src/main/kotlin/dartzee/reporting/ReportParametersPlayers.kt b/src/main/kotlin/dartzee/reporting/ReportParametersPlayers.kt new file mode 100644 index 00000000..7325717f --- /dev/null +++ b/src/main/kotlin/dartzee/reporting/ReportParametersPlayers.kt @@ -0,0 +1,9 @@ +package dartzee.reporting + +import dartzee.db.PlayerEntity + +data class ReportParametersPlayers( + val includedPlayers: Map, + val excludedPlayers: List, + val excludeOnlyAi: Boolean, +) diff --git a/src/main/kotlin/dartzee/reporting/ReportingSqlUtil.kt b/src/main/kotlin/dartzee/reporting/ReportingUtil.kt similarity index 95% rename from src/main/kotlin/dartzee/reporting/ReportingSqlUtil.kt rename to src/main/kotlin/dartzee/reporting/ReportingUtil.kt index 671653d0..40c602f0 100644 --- a/src/main/kotlin/dartzee/reporting/ReportingSqlUtil.kt +++ b/src/main/kotlin/dartzee/reporting/ReportingUtil.kt @@ -4,10 +4,13 @@ import dartzee.game.GameType import dartzee.utils.InjectedThings.mainDatabase import java.sql.ResultSet import java.sql.Timestamp +import javax.swing.JCheckBox + +fun grabIfSelected(checkbox: JCheckBox, getter: () -> T) = + if (checkbox.isSelected) getter() else null -/** Refactored from ReportingResultsScreen */ fun runReport(rp: ReportParameters?): List { - rp ?: return listOf() + rp ?: return emptyList() var sql = buildBasicSqlStatement() sql += rp.getExtraWhereSql() diff --git a/src/main/kotlin/dartzee/screen/reporting/PlayerParametersPanel.kt b/src/main/kotlin/dartzee/screen/reporting/PlayerParametersPanel.kt index 8926005e..2ee8ccfc 100644 --- a/src/main/kotlin/dartzee/screen/reporting/PlayerParametersPanel.kt +++ b/src/main/kotlin/dartzee/screen/reporting/PlayerParametersPanel.kt @@ -7,6 +7,7 @@ import dartzee.db.MAX_PLAYERS import dartzee.db.PlayerEntity import dartzee.reporting.COMPARATOR_SCORE_UNSET import dartzee.reporting.IncludedPlayerParameters +import dartzee.reporting.grabIfSelected import java.awt.event.ActionEvent import java.awt.event.ActionListener import javax.swing.JCheckBox @@ -55,22 +56,12 @@ class PlayerParametersPanel : JPanel(), ActionListener { } fun generateParameters(): IncludedPlayerParameters { - val parms = IncludedPlayerParameters() + val finalScore = grabIfSelected(chckbxFinalScore) { spinner.value as Int } + val finalScoreComparator = + grabIfSelected(chckbxFinalScore) { comboBox.selectedItem as String }.orEmpty() + val finishingPosition = grabIfSelected(chckbxPosition) { getFinishingPositions() }.orEmpty() - if (chckbxFinalScore.isSelected) { - val finalScore = spinner.value as Int - val comparator = comboBox.selectedItem as String - - parms.finalScore = finalScore - parms.finalScoreComparator = comparator - } - - if (chckbxPosition.isSelected) { - val finishingPositions = getFinishingPositions() - parms.finishingPositions = finishingPositions - } - - return parms + return IncludedPlayerParameters(finishingPosition, finalScoreComparator, finalScore) } private fun getFinishingPositions(): List { diff --git a/src/main/kotlin/dartzee/screen/reporting/ReportingGameTab.kt b/src/main/kotlin/dartzee/screen/reporting/ReportingGameTab.kt index 8aaa416a..637c08e3 100644 --- a/src/main/kotlin/dartzee/screen/reporting/ReportingGameTab.kt +++ b/src/main/kotlin/dartzee/screen/reporting/ReportingGameTab.kt @@ -8,7 +8,9 @@ import dartzee.core.bean.isSelectedAndEnabled import dartzee.core.util.addActionListenerToAllChildren import dartzee.core.util.createButtonGroup import dartzee.core.util.enableChildren -import dartzee.reporting.ReportParameters +import dartzee.reporting.MatchFilter +import dartzee.reporting.ReportParametersGame +import dartzee.reporting.grabIfSelected import dartzee.utils.getFilterPanel import java.awt.FlowLayout import java.awt.event.ActionEvent @@ -119,35 +121,36 @@ class ReportingGameTab : JPanel(), ActionListener { fun valid() = dateFilterPanelStart.valid() && dateFilterPanelFinish.valid() - fun populateReportParameters(rp: ReportParameters) { - if (checkBoxGameType.isSelected) { - rp.gameType = comboBox.getGameType() - } - - if (cbType.isSelected) { - rp.gameParams = panelGameParams.getGameParams() - } - - if (cbPartOfMatch.isSelected) { - rp.setEnforceMatch(rdbtnYes.isSelected) - } - - if (cbSyncStatus.isSelected) { - rp.pendingChanges = rdbtnPendingChanges.isSelected - } - - if (cbStartDate.isSelected) { - rp.dtStartFrom = dateFilterPanelStart.getSqlDtFrom() - rp.dtStartTo = dateFilterPanelStart.getSqlDtTo() - } - - if (cbFinishDate.isSelected) { - if (rdbtnUnfinished.isSelected) { - rp.unfinishedOnly = true - } else { - rp.dtFinishFrom = dateFilterPanelFinish.getSqlDtFrom() - rp.dtFinishTo = dateFilterPanelFinish.getSqlDtTo() + fun generateReportParameters(): ReportParametersGame { + val gameType = grabIfSelected(checkBoxGameType) { comboBox.getGameType() } + val gameParams = grabIfSelected(cbType) { panelGameParams.getGameParams() }.orEmpty() + val dtStartFrom = grabIfSelected(cbStartDate) { dateFilterPanelStart.getSqlDtFrom() } + val dtStartTo = grabIfSelected(cbStartDate) { dateFilterPanelStart.getSqlDtTo() } + val unfinishedOnly = grabIfSelected(cbFinishDate) { rdbtnUnfinished.isSelected } ?: false + val dtFinishFrom = + grabIfSelected(cbFinishDate) { + if (rdbtnUnfinished.isSelected) null else dateFilterPanelFinish.getSqlDtFrom() } - } + val dtFinishTo = + grabIfSelected(cbFinishDate) { + if (rdbtnUnfinished.isSelected) null else dateFilterPanelFinish.getSqlDtTo() + } + val enforceMatch = grabIfSelected(cbPartOfMatch) { enforceMatch() } ?: MatchFilter.BOTH + val pendingChanges = grabIfSelected(cbSyncStatus) { rdbtnPendingChanges.isSelected } + + return ReportParametersGame( + gameType, + gameParams, + dtStartFrom, + dtStartTo, + unfinishedOnly, + dtFinishFrom, + dtFinishTo, + enforceMatch, + pendingChanges + ) } + + private fun enforceMatch() = + if (rdbtnYes.isSelected) MatchFilter.MATCHES_ONLY else MatchFilter.GAMES_ONLY } diff --git a/src/main/kotlin/dartzee/screen/reporting/ReportingPlayersTab.kt b/src/main/kotlin/dartzee/screen/reporting/ReportingPlayersTab.kt index 60ba10c3..d6403e03 100644 --- a/src/main/kotlin/dartzee/screen/reporting/ReportingPlayersTab.kt +++ b/src/main/kotlin/dartzee/screen/reporting/ReportingPlayersTab.kt @@ -8,7 +8,7 @@ import dartzee.core.bean.RowSelectionListener import dartzee.core.bean.ScrollTable import dartzee.core.util.DialogUtil import dartzee.db.PlayerEntity -import dartzee.reporting.ReportParameters +import dartzee.reporting.ReportParametersPlayers import dartzee.screen.PlayerSelectDialog import dartzee.screen.ScreenCache import java.awt.BorderLayout @@ -149,14 +149,22 @@ class ReportingPlayersTab : JPanel(), ActionListener, RowSelectionListener { return true } - fun populateReportParameters(rp: ReportParameters) { - rp.excludeOnlyAi = checkBoxExcludeOnlyAi.isSelected - - if (rdbtnInclude.isSelected) { - rp.hmIncludedPlayerToParms = - hmPlayerToParametersPanel.mapValues { entry -> entry.value.generateParameters() } - } else { - rp.excludedPlayers = hmPlayerToParametersPanel.keys.toList() - } + fun generateReportParameters(): ReportParametersPlayers { + val excludeOnlyAi = checkBoxExcludeOnlyAi.isSelected + val includedPlayers = + if (rdbtnInclude.isSelected) { + hmPlayerToParametersPanel.mapValues { it.value.generateParameters() } + } else { + emptyMap() + } + + val excludedPlayers = + if (rdbtnExclude.isSelected) { + hmPlayerToParametersPanel.keys.toList() + } else { + emptyList() + } + + return ReportParametersPlayers(includedPlayers, excludedPlayers, excludeOnlyAi) } } diff --git a/src/main/kotlin/dartzee/screen/reporting/ReportingSetupScreen.kt b/src/main/kotlin/dartzee/screen/reporting/ReportingSetupScreen.kt index d066bf1a..e751e9f8 100644 --- a/src/main/kotlin/dartzee/screen/reporting/ReportingSetupScreen.kt +++ b/src/main/kotlin/dartzee/screen/reporting/ReportingSetupScreen.kt @@ -39,9 +39,8 @@ class ReportingSetupScreen : EmbeddedScreen() { } private fun generateReportParams(): ReportParameters { - val rp = ReportParameters() - gameTab.populateReportParameters(rp) - playerTab.populateReportParameters(rp) - return rp + val gameFilters = gameTab.generateReportParameters() + val playerFilters = playerTab.generateReportParameters() + return ReportParameters(gameFilters, playerFilters) } } diff --git a/src/test/kotlin/dartzee/helper/TestFactory.kt b/src/test/kotlin/dartzee/helper/TestFactory.kt index 45ceb82a..80794807 100644 --- a/src/test/kotlin/dartzee/helper/TestFactory.kt +++ b/src/test/kotlin/dartzee/helper/TestFactory.kt @@ -8,6 +8,7 @@ import dartzee.db.LocalIdGenerator import dartzee.db.ParticipantEntity import dartzee.db.PlayerEntity import dartzee.game.ClockType +import dartzee.game.GameType import dartzee.game.RoundTheClockConfig import dartzee.game.state.ClockPlayerState import dartzee.game.state.GolfPlayerState @@ -15,6 +16,11 @@ import dartzee.game.state.SingleParticipant import dartzee.game.state.X01PlayerState import dartzee.`object`.Dart import dartzee.`object`.SegmentType +import dartzee.reporting.IncludedPlayerParameters +import dartzee.reporting.MatchFilter +import dartzee.reporting.ReportParameters +import dartzee.reporting.ReportParametersGame +import dartzee.reporting.ReportParametersPlayers import dartzee.stats.GameWrapper import dartzee.utils.InjectedThings.mainDatabase import dartzee.utils.isBust @@ -255,3 +261,43 @@ fun makeClockGameWrapper( rounds.forEach(wrapper::addDart) return wrapper } + +fun makeReportParameters( + game: ReportParametersGame = makeReportParametersGame(), + players: ReportParametersPlayers = makeReportParametersPlayers() +) = ReportParameters(game, players) + +fun makeReportParametersGame( + gameType: GameType? = null, + gameParams: String = "", + dtStartFrom: Timestamp? = null, + dtStartTo: Timestamp? = null, + unfinishedOnly: Boolean = false, + dtFinishFrom: Timestamp? = null, + dtFinishTo: Timestamp? = null, + partOfMatch: MatchFilter = MatchFilter.BOTH, + pendingChanges: Boolean? = null +) = + ReportParametersGame( + gameType, + gameParams, + dtStartFrom, + dtStartTo, + unfinishedOnly, + dtFinishFrom, + dtFinishTo, + partOfMatch, + pendingChanges + ) + +fun makeReportParametersPlayers( + includedPlayers: Map = emptyMap(), + excludedPlayers: List = emptyList(), + excludeOnlyAi: Boolean = false +) = ReportParametersPlayers(includedPlayers, excludedPlayers, excludeOnlyAi) + +fun makeIncludedPlayerParameters( + finishingPositions: List = emptyList(), + finalScoreComparator: String = "", + finalScore: Int? = null +) = IncludedPlayerParameters(finishingPositions, finalScoreComparator, finalScore) diff --git a/src/test/kotlin/dartzee/reporting/TestIncludedPlayerParameters.kt b/src/test/kotlin/dartzee/reporting/TestIncludedPlayerParameters.kt index 5c67d508..02fd765b 100644 --- a/src/test/kotlin/dartzee/reporting/TestIncludedPlayerParameters.kt +++ b/src/test/kotlin/dartzee/reporting/TestIncludedPlayerParameters.kt @@ -1,10 +1,14 @@ package dartzee.reporting import dartzee.core.bean.ComboBoxNumberComparison +import dartzee.db.PlayerEntity import dartzee.helper.AbstractTest import dartzee.helper.insertGame import dartzee.helper.insertParticipant import dartzee.helper.insertPlayer +import dartzee.helper.makeIncludedPlayerParameters +import dartzee.helper.makeReportParametersGame +import dartzee.helper.makeReportParametersPlayers import io.kotest.matchers.collections.shouldContainExactlyInAnyOrder import io.kotest.matchers.collections.shouldHaveSize import io.kotest.matchers.string.shouldBeEmpty @@ -13,7 +17,7 @@ import org.junit.jupiter.api.Test class TestIncludedPlayerParameters : AbstractTest() { @Test fun `Should be blank by default`() { - val ipp = IncludedPlayerParameters() + val ipp = makeIncludedPlayerParameters() ipp.generateExtraWhereSql("foo").shouldBeEmpty() } @@ -35,12 +39,8 @@ class TestIncludedPlayerParameters : AbstractTest() { gameId = unfinishedGameId ) - val ipp = IncludedPlayerParameters() - ipp.finishingPositions = listOf(1, 3) - - val rp = ReportParameters() - rp.hmIncludedPlayerToParms = mapOf(player to ipp) - + val ipp = makeIncludedPlayerParameters(finishingPositions = listOf(1, 3)) + val rp = makeReportParameters(player, ipp) val results = runReport(rp) results shouldHaveSize 2 @@ -49,7 +49,6 @@ class TestIncludedPlayerParameters : AbstractTest() { @Test fun `Should filter by final score`() { - val rp = ReportParameters() val player = insertPlayer("Bob") val g40 = insertGame(localId = 1).rowId @@ -83,29 +82,43 @@ class TestIncludedPlayerParameters : AbstractTest() { ) // Greater than 25 - val ipp = - IncludedPlayerParameters( + val ippGt25 = + makeIncludedPlayerParameters( finalScore = 25, finalScoreComparator = ComboBoxNumberComparison.FILTER_MODE_GREATER_THAN ) - rp.hmIncludedPlayerToParms = mapOf(player to ipp) - var results = runReport(rp) + + var results = runReport(makeReportParameters(player, ippGt25)) results.map { it.localId }.shouldContainExactlyInAnyOrder(1, 2) - // Equal to 25 - ipp.finalScoreComparator = ComboBoxNumberComparison.FILTER_MODE_EQUAL_TO - results = runReport(rp) + val ippEq25 = + makeIncludedPlayerParameters( + finalScore = 25, + finalScoreComparator = ComboBoxNumberComparison.FILTER_MODE_EQUAL_TO + ) + results = runReport(makeReportParameters(player, ippEq25)) results.map { it.localId }.shouldContainExactlyInAnyOrder(4) // Undecided - ipp.finalScoreComparator = COMPARATOR_SCORE_UNSET - results = runReport(rp) + val ippUnset = makeIncludedPlayerParameters(finalScoreComparator = COMPARATOR_SCORE_UNSET) + results = runReport(makeReportParameters(player, ippUnset)) results.map { it.localId }.shouldContainExactlyInAnyOrder(3) // Less than 31 - ipp.finalScore = 31 - ipp.finalScoreComparator = ComboBoxNumberComparison.FILTER_MODE_LESS_THAN - results = runReport(rp) + val ippLt31 = + makeIncludedPlayerParameters( + finalScore = 31, + finalScoreComparator = ComboBoxNumberComparison.FILTER_MODE_LESS_THAN + ) + results = runReport(makeReportParameters(player, ippLt31)) results.map { it.localId }.shouldContainExactlyInAnyOrder(2, 4) } + + private fun makeReportParameters( + player: PlayerEntity, + ipp: IncludedPlayerParameters + ): ReportParameters { + val rpPlayers = makeReportParametersPlayers(includedPlayers = mapOf(player to ipp)) + return ReportParameters(makeReportParametersGame(), rpPlayers) + } } diff --git a/src/test/kotlin/dartzee/reporting/TestReportParameters.kt b/src/test/kotlin/dartzee/reporting/TestReportParameters.kt index b07adf75..2057a76e 100644 --- a/src/test/kotlin/dartzee/reporting/TestReportParameters.kt +++ b/src/test/kotlin/dartzee/reporting/TestReportParameters.kt @@ -12,6 +12,9 @@ import dartzee.helper.insertGame import dartzee.helper.insertGameForReport import dartzee.helper.insertParticipant import dartzee.helper.insertPlayerForGame +import dartzee.helper.makeIncludedPlayerParameters +import dartzee.helper.makeReportParametersGame +import dartzee.helper.makeReportParametersPlayers import dartzee.helper.randomGuid import dartzee.utils.InjectedThings.mainDatabase import io.kotest.matchers.collections.shouldBeEmpty @@ -26,13 +29,10 @@ class TestReportParameters : AbstractTest() { val gameOne = insertGameForReport(gameType = GameType.X01) val gameTwo = insertGameForReport(gameType = GameType.GOLF) - val rpAll = ReportParameters() - val resultsAll = runReportForTest(rpAll) + val resultsAll = runReportForTest() resultsAll.shouldContainExactlyInAnyOrder(gameOne.localId, gameTwo.localId) - val rpX01 = ReportParameters() - rpX01.gameType = GameType.X01 - + val rpX01 = makeReportParametersGame(gameType = GameType.X01) val resultsX01 = runReportForTest(rpX01) resultsX01.shouldContainExactly(gameOne.localId) } @@ -42,13 +42,10 @@ class TestReportParameters : AbstractTest() { val gameOne = insertGameForReport(gameParams = "foo") val gameTwo = insertGameForReport(gameParams = "bar") - val rpAll = ReportParameters() - val resultsAll = runReportForTest(rpAll) + val resultsAll = runReportForTest() resultsAll.shouldContainExactlyInAnyOrder(gameOne.localId, gameTwo.localId) - val rpBar = ReportParameters() - rpBar.gameParams = "bar" - + val rpBar = makeReportParametersGame(gameParams = "bar") val resultsX01 = runReportForTest(rpBar) resultsX01.shouldContainExactly(gameTwo.localId) } @@ -58,13 +55,10 @@ class TestReportParameters : AbstractTest() { val gameOne = insertGameForReport(dtFinish = DateStatics.END_OF_TIME) val gameTwo = insertGameForReport(dtFinish = getSqlDateNow()) - val rpAll = ReportParameters() - val resultsAll = runReportForTest(rpAll) + val resultsAll = runReportForTest() resultsAll.shouldContainExactlyInAnyOrder(gameOne.localId, gameTwo.localId) - val rpUnfinished = ReportParameters() - rpUnfinished.unfinishedOnly = true - + val rpUnfinished = makeReportParametersGame(unfinishedOnly = true) val resultsX01 = runReportForTest(rpUnfinished) resultsX01.shouldContainExactly(gameOne.localId) } @@ -75,23 +69,19 @@ class TestReportParameters : AbstractTest() { val gameTwo = insertGameForReport(dtCreation = Timestamp(1000)) val gameThree = insertGameForReport(dtCreation = Timestamp(1001)) - val rpAll = ReportParameters() - val resultsAll = runReportForTest(rpAll) + val resultsAll = runReportForTest() resultsAll.shouldContainExactlyInAnyOrder( gameOne.localId, gameTwo.localId, gameThree.localId ) - val rpAfter = ReportParameters() - rpAfter.dtStartFrom = Timestamp(1000) + val rpAfter = makeReportParametersGame(dtStartFrom = Timestamp(1000)) val resultsAfter = runReportForTest(rpAfter) resultsAfter.shouldContainExactlyInAnyOrder(gameTwo.localId, gameThree.localId) - val rpUpTo = ReportParameters() - rpUpTo.dtStartTo = Timestamp(1000) - + val rpUpTo = makeReportParametersGame(dtStartTo = Timestamp(1000)) val resultsUpTo = runReportForTest(rpUpTo) resultsUpTo.shouldContainExactlyInAnyOrder(gameOne.localId, gameTwo.localId) } @@ -102,23 +92,18 @@ class TestReportParameters : AbstractTest() { val gameTwo = insertGameForReport(dtFinish = Timestamp(1000)) val gameThree = insertGameForReport(dtFinish = Timestamp(1001)) - val rpAll = ReportParameters() - val resultsAll = runReportForTest(rpAll) + val resultsAll = runReportForTest() resultsAll.shouldContainExactlyInAnyOrder( gameOne.localId, gameTwo.localId, gameThree.localId ) - val rpAfter = ReportParameters() - rpAfter.dtFinishFrom = Timestamp(1000) - + val rpAfter = makeReportParametersGame(dtFinishFrom = Timestamp(1000)) val resultsAfter = runReportForTest(rpAfter) resultsAfter.shouldContainExactlyInAnyOrder(gameTwo.localId, gameThree.localId) - val rpUpTo = ReportParameters() - rpUpTo.dtFinishTo = Timestamp(1000) - + val rpUpTo = makeReportParametersGame(dtFinishTo = Timestamp(1000)) val resultsUpTo = runReportForTest(rpUpTo) resultsUpTo.shouldContainExactlyInAnyOrder(gameOne.localId, gameTwo.localId) } @@ -128,17 +113,14 @@ class TestReportParameters : AbstractTest() { val singleGame = insertGameForReport(dartsMatchId = "") val matchGame = insertGameForReport(dartsMatchId = randomGuid()) - val rpAll = ReportParameters() - val resultsAll = runReportForTest(rpAll) + val resultsAll = runReportForTest() resultsAll.shouldContainExactlyInAnyOrder(singleGame.localId, matchGame.localId) - val rpSingleGames = ReportParameters() - rpSingleGames.setEnforceMatch(false) + val rpSingleGames = makeReportParametersGame(partOfMatch = MatchFilter.GAMES_ONLY) val resultsSingleGames = runReportForTest(rpSingleGames) resultsSingleGames.shouldContainExactly(singleGame.localId) - val rpMatchGames = ReportParameters() - rpMatchGames.setEnforceMatch(true) + val rpMatchGames = makeReportParametersGame(partOfMatch = MatchFilter.MATCHES_ONLY) val resultsMatchGames = runReportForTest(rpMatchGames) resultsMatchGames.shouldContainExactly(matchGame.localId) } @@ -150,15 +132,14 @@ class TestReportParameters : AbstractTest() { val syncedGame = insertGameForReport(dtLastUpdate = getPastTime(lastSynced)) val unsyncedGame = insertGameForReport(dtLastUpdate = getFutureTime(lastSynced)) - val rpAll = ReportParameters() - val resultsAll = runReportForTest(rpAll) + val resultsAll = runReportForTest() resultsAll.shouldContainExactlyInAnyOrder(syncedGame.localId, unsyncedGame.localId) - val rpPendingChanges = ReportParameters().also { it.pendingChanges = true } + val rpPendingChanges = makeReportParametersGame(pendingChanges = true) val resultsSingleGames = runReportForTest(rpPendingChanges) resultsSingleGames.shouldContainExactly(unsyncedGame.localId) - val rpSyncedGames = ReportParameters().also { it.pendingChanges = false } + val rpSyncedGames = makeReportParametersGame(pendingChanges = false) val resultsMatchGames = runReportForTest(rpSyncedGames) resultsMatchGames.shouldContainExactly(syncedGame.localId) } @@ -169,11 +150,11 @@ class TestReportParameters : AbstractTest() { val gameOne = insertGameForReport(dtLastUpdate = getPastTime(now)) val gameTwo = insertGameForReport(dtLastUpdate = getFutureTime(now)) - val rpPendingChanges = ReportParameters().also { it.pendingChanges = true } + val rpPendingChanges = makeReportParametersGame(pendingChanges = true) val resultsSingleGames = runReportForTest(rpPendingChanges) resultsSingleGames.shouldContainExactly(gameOne.localId, gameTwo.localId) - val rpSyncedGames = ReportParameters().also { it.pendingChanges = false } + val rpSyncedGames = makeReportParametersGame(pendingChanges = false) val resultsMatchGames = runReportForTest(rpSyncedGames) resultsMatchGames.shouldBeEmpty() } @@ -203,8 +184,7 @@ class TestReportParameters : AbstractTest() { insertParticipant(playerId = clive.rowId, gameId = gCliveDaisy.rowId) insertParticipant(playerId = daisy.rowId, gameId = gCliveDaisy.rowId) - val rpAll = ReportParameters() - val resultsAll = runReportForTest(rpAll) + val resultsAll = runReportForTest() resultsAll.shouldContainExactlyInAnyOrder( gAllPlayers.localId, gAliceAndBob.localId, @@ -213,14 +193,12 @@ class TestReportParameters : AbstractTest() { gCliveDaisy.localId ) - val rpExcludeAlice = ReportParameters() - rpExcludeAlice.excludedPlayers = listOf(alice) - val resultsNoAlice = runReportForTest(rpExcludeAlice) + val rpExcludeAlice = makeReportParametersPlayers(excludedPlayers = listOf(alice)) + val resultsNoAlice = runReportForTest(player = rpExcludeAlice) resultsNoAlice.shouldContainExactlyInAnyOrder(gBobAndDaisy.localId, gCliveDaisy.localId) - val rpExcludeAliceAndBob = ReportParameters() - rpExcludeAliceAndBob.excludedPlayers = listOf(alice, bob) - val resultsNoAliceOrBob = runReportForTest(rpExcludeAliceAndBob) + val rpExcludeAliceAndBob = makeReportParametersPlayers(excludedPlayers = listOf(alice, bob)) + val resultsNoAliceOrBob = runReportForTest(player = rpExcludeAliceAndBob) resultsNoAliceOrBob.shouldContainExactly(gCliveDaisy.localId) } @@ -249,19 +227,26 @@ class TestReportParameters : AbstractTest() { insertParticipant(playerId = clive.rowId, gameId = gCliveDaisy.rowId) insertParticipant(playerId = daisy.rowId, gameId = gCliveDaisy.rowId) - val rpIncludeAlice = ReportParameters() - rpIncludeAlice.hmIncludedPlayerToParms = mapOf(alice to IncludedPlayerParameters()) - val resultsAlice = runReportForTest(rpIncludeAlice) + val rpIncludeAlice = + makeReportParametersPlayers( + includedPlayers = mapOf(alice to makeIncludedPlayerParameters()) + ) + val resultsAlice = runReportForTest(player = rpIncludeAlice) resultsAlice.shouldContainExactlyInAnyOrder( gAllPlayers.localId, gAliceAndBob.localId, gAliceCliveDaisy.localId ) - val rpIncludeAliceAndBob = ReportParameters() - rpIncludeAliceAndBob.hmIncludedPlayerToParms = - mapOf(alice to IncludedPlayerParameters(), bob to IncludedPlayerParameters()) - val resultsAliceAndBob = runReportForTest(rpIncludeAliceAndBob) + val rpIncludeAliceAndBob = + makeReportParametersPlayers( + includedPlayers = + mapOf( + alice to makeIncludedPlayerParameters(), + bob to makeIncludedPlayerParameters() + ) + ) + val resultsAliceAndBob = runReportForTest(player = rpIncludeAliceAndBob) resultsAliceAndBob.shouldContainExactly(gAllPlayers.localId, gAliceAndBob.localId) } @@ -287,17 +272,18 @@ class TestReportParameters : AbstractTest() { val gSingleAi = insertGame() insertParticipant(playerId = ai.rowId, gameId = gSingleAi.rowId) - val rp = ReportParameters() - rp.excludeOnlyAi = true - - val results = runReportForTest(rp) + val rp = makeReportParametersPlayers(excludeOnlyAi = true) + val results = runReportForTest(player = rp) results.shouldContainExactlyInAnyOrder( listOf(gAllPlayers.localId, gHumanAndBothAI.localId, gSingleHuman.localId) ) } - private fun runReportForTest(rp: ReportParameters): List { - val wrappers = runReport(rp) + private fun runReportForTest( + game: ReportParametersGame = makeReportParametersGame(), + player: ReportParametersPlayers = makeReportParametersPlayers() + ): List { + val wrappers = runReport(ReportParameters(game, player)) return wrappers.map { it.localId }.toList() } } diff --git a/src/test/kotlin/dartzee/reporting/TestReportingSqlUtil.kt b/src/test/kotlin/dartzee/reporting/TestReportingSqlUtil.kt index 82b0ce53..561de40b 100644 --- a/src/test/kotlin/dartzee/reporting/TestReportingSqlUtil.kt +++ b/src/test/kotlin/dartzee/reporting/TestReportingSqlUtil.kt @@ -9,6 +9,7 @@ import dartzee.helper.insertGame import dartzee.helper.insertParticipant import dartzee.helper.insertPlayer import dartzee.helper.insertPlayerForGame +import dartzee.helper.makeReportParameters import io.kotest.matchers.shouldBe import org.junit.jupiter.api.Test @@ -25,7 +26,7 @@ class TestReportingSqlUtil : AbstractTest() { insertParticipant(gameId = g1.rowId, playerId = bob.rowId, finishingPosition = 3) insertParticipant(gameId = g1.rowId, playerId = clive.rowId, finishingPosition = 2) - val results = runReport(ReportParameters()) + val results = runReport(makeReportParameters()) results.size shouldBe 1 val wrapper = results.first() @@ -48,7 +49,7 @@ class TestReportingSqlUtil : AbstractTest() { val g = insertGame(dartsMatchId = "", gameType = GameType.GOLF, gameParams = "18") insertParticipant(gameId = g.rowId, playerId = alice.rowId, finishingPosition = -1) - val results = runReport(ReportParameters()) + val results = runReport(makeReportParameters()) results.size shouldBe 1 val wrapper = results.first() @@ -65,7 +66,7 @@ class TestReportingSqlUtil : AbstractTest() { val gBob = insertGame(dtFinish = getSqlDateNow()) insertPlayerForGame("Bob", gBob.rowId) - val results = runReport(ReportParameters()) + val results = runReport(makeReportParameters()) results.size shouldBe 2 val rows = ReportResultWrapper.getTableRowsFromWrappers(results) @@ -86,7 +87,7 @@ class TestReportingSqlUtil : AbstractTest() { insertPlayerForGame("Bob", dartzeeGameStandalone.rowId) insertPlayerForGame("Clive", x01Game.rowId) - val results = runReport(ReportParameters()) + val results = runReport(makeReportParameters()) results.first { it.localId == 1L }.templateName shouldBe "BTBF's House Party" results.first { it.localId == 2L }.templateName shouldBe null results.first { it.localId == 3L }.templateName shouldBe null diff --git a/src/test/kotlin/dartzee/screen/reporting/TestPlayerParametersPanel.kt b/src/test/kotlin/dartzee/screen/reporting/TestPlayerParametersPanel.kt index 8c1a7339..10a3f8ee 100644 --- a/src/test/kotlin/dartzee/screen/reporting/TestPlayerParametersPanel.kt +++ b/src/test/kotlin/dartzee/screen/reporting/TestPlayerParametersPanel.kt @@ -4,8 +4,8 @@ import com.github.alyssaburlton.swingtest.clickChild import dartzee.core.bean.ComboBoxNumberComparison import dartzee.helper.AbstractTest import dartzee.helper.insertPlayer +import dartzee.helper.makeIncludedPlayerParameters import dartzee.reporting.COMPARATOR_SCORE_UNSET -import dartzee.reporting.IncludedPlayerParameters import io.kotest.matchers.collections.shouldBeEmpty import io.kotest.matchers.collections.shouldContainExactly import io.kotest.matchers.shouldBe @@ -27,7 +27,7 @@ class TestPlayerParametersPanel : AbstractTest() { panel.chckbxPosition.isSelected shouldBe false panel.chckbxFinalScore.isSelected shouldBe false - panel.generateParameters() shouldBe IncludedPlayerParameters() + panel.generateParameters() shouldBe makeIncludedPlayerParameters() } @Test diff --git a/src/test/kotlin/dartzee/screen/reporting/TestReportingGameTab.kt b/src/test/kotlin/dartzee/screen/reporting/TestReportingGameTab.kt index 98c51ab4..8ab53b97 100644 --- a/src/test/kotlin/dartzee/screen/reporting/TestReportingGameTab.kt +++ b/src/test/kotlin/dartzee/screen/reporting/TestReportingGameTab.kt @@ -18,7 +18,6 @@ import dartzee.game.X01Config import dartzee.helper.AbstractTest import dartzee.makeInvalid import dartzee.reporting.MatchFilter -import dartzee.reporting.ReportParameters import dartzee.updateSelection import io.kotest.matchers.collections.shouldContainExactly import io.kotest.matchers.shouldBe @@ -168,118 +167,93 @@ class TestReportingGameTab : AbstractTest() { /** Population */ @Test fun `Should populate game type correctly`() { - val rp = ReportParameters() val tab = ReportingGameTab() - - tab.populateReportParameters(rp) - rp.gameType shouldBe null + tab.generateReportParameters().gameType shouldBe null tab.clickChild(text = "Game") - tab.populateReportParameters(rp) - rp.gameType shouldBe GameType.X01 + tab.generateReportParameters().gameType shouldBe GameType.X01 tab.getChild().updateSelection(GameType.DARTZEE) - tab.populateReportParameters(rp) - rp.gameType shouldBe GameType.DARTZEE + tab.generateReportParameters().gameType shouldBe GameType.DARTZEE } @Test fun `Should populate gameParams correctly`() { - val rp = ReportParameters() val tab = ReportingGameTab() - - tab.populateReportParameters(rp) - rp.gameParams shouldBe "" + tab.generateReportParameters().gameParams shouldBe "" tab.clickChild(text = "Type") - tab.populateReportParameters(rp) - rp.gameParams shouldBe X01Config(501, FinishType.Doubles).toJson() + tab.generateReportParameters().gameParams shouldBe X01Config(501, FinishType.Doubles).toJson() tab.getChild().value = 701 tab.clickChild(text = "Finish on double") - tab.populateReportParameters(rp) - rp.gameParams shouldBe X01Config(701, FinishType.Any).toJson() + tab.generateReportParameters().gameParams shouldBe X01Config(701, FinishType.Any).toJson() } @Test fun `Should populate part of match correctly`() { - val rp = ReportParameters() val tab = ReportingGameTab() - - tab.populateReportParameters(rp) - rp.partOfMatch shouldBe MatchFilter.BOTH + tab.generateReportParameters().partOfMatch shouldBe MatchFilter.BOTH tab.clickChild(text = "Part of Match") - tab.populateReportParameters(rp) - rp.partOfMatch shouldBe MatchFilter.MATCHES_ONLY + tab.generateReportParameters().partOfMatch shouldBe MatchFilter.MATCHES_ONLY tab.clickChild(text = "No") - tab.populateReportParameters(rp) - rp.partOfMatch shouldBe MatchFilter.GAMES_ONLY + tab.generateReportParameters().partOfMatch shouldBe MatchFilter.GAMES_ONLY } @Test fun `Should populate sync status correctly`() { - val rp = ReportParameters() val tab = ReportingGameTab() - - tab.populateReportParameters(rp) - rp.pendingChanges shouldBe null + tab.generateReportParameters().pendingChanges shouldBe null tab.clickChild(text = "Sync Status") - tab.populateReportParameters(rp) - rp.pendingChanges shouldBe true + tab.generateReportParameters().pendingChanges shouldBe true tab.clickChild(text = "Synced") - tab.populateReportParameters(rp) - rp.pendingChanges shouldBe false + tab.generateReportParameters().pendingChanges shouldBe false } @Test fun `Should populate start date correctly`() { - val rp = ReportParameters() val tab = ReportingGameTab() - - tab.populateReportParameters(rp) - rp.dtStartFrom shouldBe null - rp.dtStartTo shouldBe null + tab.generateReportParameters().dtStartFrom shouldBe null + tab.generateReportParameters().dtStartTo shouldBe null val startDate = LocalDate.ofYearDay(2020, 20) val endDate = LocalDate.ofYearDay(2020, 30) tab.clickChild(text = "Start Date") tab.getStartDateFilterPanel().cbDateFrom.date = startDate tab.getStartDateFilterPanel().cbDateTo.date = endDate - tab.populateReportParameters(rp) - rp.dtStartFrom shouldBe Timestamp.valueOf(startDate.atTime(0, 0)) - rp.dtStartTo shouldBe Timestamp.valueOf(endDate.atTime(0, 0)) + tab.generateReportParameters().dtStartFrom shouldBe + Timestamp.valueOf(startDate.atTime(0, 0)) + tab.generateReportParameters().dtStartTo shouldBe Timestamp.valueOf(endDate.atTime(0, 0)) } @Test fun `Should populate finish date correctly`() { - var rp = ReportParameters() val tab = ReportingGameTab() - tab.populateReportParameters(rp) - rp.dtFinishFrom shouldBe null - rp.dtFinishTo shouldBe null - rp.unfinishedOnly shouldBe false + val rpDefault = tab.generateReportParameters() + rpDefault.dtFinishFrom shouldBe null + rpDefault.dtFinishTo shouldBe null + rpDefault.unfinishedOnly shouldBe false val startDate = LocalDate.ofYearDay(2020, 20) val endDate = LocalDate.ofYearDay(2020, 30) tab.clickChild(text = "Finish Date") tab.getFinishDateFilterPanel().cbDateFrom.date = startDate tab.getFinishDateFilterPanel().cbDateTo.date = endDate - tab.populateReportParameters(rp) - rp.dtFinishFrom shouldBe Timestamp.valueOf(startDate.atTime(0, 0)) - rp.dtFinishTo shouldBe Timestamp.valueOf(endDate.atTime(0, 0)) - rp.unfinishedOnly shouldBe false + val rpBetweenDates = tab.generateReportParameters() + rpBetweenDates.dtFinishFrom shouldBe Timestamp.valueOf(startDate.atTime(0, 0)) + rpBetweenDates.dtFinishTo shouldBe Timestamp.valueOf(endDate.atTime(0, 0)) + rpBetweenDates.unfinishedOnly shouldBe false - rp = ReportParameters() tab.clickChild(text = "Unfinished") - tab.populateReportParameters(rp) - rp.dtFinishFrom shouldBe null - rp.dtFinishTo shouldBe null - rp.unfinishedOnly shouldBe true + val rpUnfinished = tab.generateReportParameters() + rpUnfinished.dtFinishFrom shouldBe null + rpUnfinished.dtFinishTo shouldBe null + rpUnfinished.unfinishedOnly shouldBe true } private fun ReportingGameTab.getStartDateFilterPanel() = diff --git a/src/test/kotlin/dartzee/screen/reporting/TestReportingPlayersTab.kt b/src/test/kotlin/dartzee/screen/reporting/TestReportingPlayersTab.kt index 169a2548..f2b9f7bb 100644 --- a/src/test/kotlin/dartzee/screen/reporting/TestReportingPlayersTab.kt +++ b/src/test/kotlin/dartzee/screen/reporting/TestReportingPlayersTab.kt @@ -2,12 +2,13 @@ package dartzee.screen.reporting import dartzee.helper.AbstractTest import dartzee.helper.insertPlayer +import dartzee.helper.makeIncludedPlayerParameters import dartzee.reporting.IncludedPlayerParameters -import dartzee.reporting.ReportParameters import io.kotest.matchers.collections.shouldBeEmpty import io.kotest.matchers.collections.shouldContain import io.kotest.matchers.collections.shouldContainExactly import io.kotest.matchers.collections.shouldNotContain +import io.kotest.matchers.maps.shouldBeEmpty import io.kotest.matchers.maps.shouldContainExactly import io.kotest.matchers.shouldBe import org.junit.jupiter.api.Test @@ -88,33 +89,24 @@ class TestReportingPlayersTab : AbstractTest() { @Test fun `Should populate report parameters correctly with no players selected`() { val tab = ReportingPlayersTab() - - val rp = ReportParameters() - tab.populateReportParameters(rp) - rp.excludedPlayers.shouldBeEmpty() - rp.hmIncludedPlayerToParms.size shouldBe 0 + tab.generateReportParameters().excludedPlayers.shouldBeEmpty() + tab.generateReportParameters().includedPlayers.shouldBeEmpty() tab.rdbtnExclude.doClick() - tab.populateReportParameters(rp) - rp.excludedPlayers.shouldBeEmpty() - rp.hmIncludedPlayerToParms.size shouldBe 0 + tab.generateReportParameters().excludedPlayers.shouldBeEmpty() + tab.generateReportParameters().includedPlayers.shouldBeEmpty() } @Test fun `Should populate excludeOnlyAi correctly`() { val tab = ReportingPlayersTab() - val rp = ReportParameters() - - tab.populateReportParameters(rp) - rp.excludeOnlyAi shouldBe false + tab.generateReportParameters().excludeOnlyAi shouldBe false tab.checkBoxExcludeOnlyAi.doClick() - tab.populateReportParameters(rp) - rp.excludeOnlyAi shouldBe true + tab.generateReportParameters().excludeOnlyAi shouldBe true tab.checkBoxExcludeOnlyAi.doClick() - tab.populateReportParameters(rp) - rp.excludeOnlyAi shouldBe false + tab.generateReportParameters().excludeOnlyAi shouldBe false } @Test @@ -126,16 +118,15 @@ class TestReportingPlayersTab : AbstractTest() { tab.addPlayers(listOf(playerOne, playerTwo)) tab.includedPlayerPanel.chckbxFinalScore.doClick() - val rp = ReportParameters() - tab.populateReportParameters(rp) - - rp.excludedPlayers.shouldBeEmpty() - rp.hmIncludedPlayerToParms.shouldContainExactly( - mapOf( - playerOne to IncludedPlayerParameters(listOf(), "=", 3), - playerTwo to IncludedPlayerParameters() + tab.generateReportParameters().excludedPlayers.shouldBeEmpty() + tab.generateReportParameters() + .includedPlayers + .shouldContainExactly( + mapOf( + playerOne to IncludedPlayerParameters(listOf(), "=", 3), + playerTwo to makeIncludedPlayerParameters() + ) ) - ) } @Test @@ -148,11 +139,8 @@ class TestReportingPlayersTab : AbstractTest() { tab.includedPlayerPanel.chckbxFinalScore.doClick() tab.rdbtnExclude.doClick() - val rp = ReportParameters() - tab.populateReportParameters(rp) - - rp.excludedPlayers.shouldContainExactly(playerOne, playerTwo) - rp.hmIncludedPlayerToParms.size shouldBe 0 + tab.generateReportParameters().excludedPlayers.shouldContainExactly(playerOne, playerTwo) + tab.generateReportParameters().includedPlayers.shouldBeEmpty() } @Test diff --git a/src/test/kotlin/dartzee/screen/reporting/TestReportingResultsScreen.kt b/src/test/kotlin/dartzee/screen/reporting/TestReportingResultsScreen.kt index efffe240..f2d7f03a 100644 --- a/src/test/kotlin/dartzee/screen/reporting/TestReportingResultsScreen.kt +++ b/src/test/kotlin/dartzee/screen/reporting/TestReportingResultsScreen.kt @@ -11,8 +11,9 @@ import dartzee.getDisplayValueAt import dartzee.helper.AbstractTest import dartzee.helper.insertGame import dartzee.helper.insertPlayerForGame +import dartzee.helper.makeReportParameters +import dartzee.helper.makeReportParametersGame import dartzee.logging.CODE_SQL -import dartzee.reporting.ReportParameters import dartzee.screen.ScreenCache import io.kotest.matchers.shouldBe import io.kotest.matchers.types.shouldBeInstanceOf @@ -25,8 +26,7 @@ import org.junit.jupiter.api.Test class TestReportingResultsScreen : AbstractTest() { @Test fun `Should initialise with results based on the report parameters`() { - val rp = ReportParameters() - rp.gameType = GameType.X01 + val rp = makeReportParameters(game = makeReportParametersGame(gameType = GameType.X01)) val gX01 = insertGame( @@ -62,7 +62,7 @@ class TestReportingResultsScreen : AbstractTest() { val scrn = ReportingResultsScreen(dlg) every { dlg.excludedColumns() } returns emptyList() - scrn.rp = ReportParameters() + scrn.rp = makeReportParameters() scrn.initialise() val table = scrn.getChild() @@ -92,7 +92,7 @@ class TestReportingResultsScreen : AbstractTest() { insertPlayerForGame("Bob", g4.rowId) val scrn = ReportingResultsScreen() - scrn.rp = ReportParameters() + scrn.rp = makeReportParameters() scrn.initialise() val table = scrn.getChild() diff --git a/src/test/kotlin/dartzee/screen/reporting/TestReportingSetupScreen.kt b/src/test/kotlin/dartzee/screen/reporting/TestReportingSetupScreen.kt index 2110cf31..622c8a0f 100644 --- a/src/test/kotlin/dartzee/screen/reporting/TestReportingSetupScreen.kt +++ b/src/test/kotlin/dartzee/screen/reporting/TestReportingSetupScreen.kt @@ -65,8 +65,8 @@ class TestReportingSetupScreen : AbstractTest() { ScreenCache.currentScreen().shouldBeInstanceOf() val resultsScreen = ScreenCache.currentScreen() as ReportingResultsScreen val rp = resultsScreen.rp!! - rp.gameType shouldBe GameType.X01 - rp.excludeOnlyAi shouldBe true + rp.game.gameType shouldBe GameType.X01 + rp.players.excludeOnlyAi shouldBe true } private fun ReportingGameTab.getStartDateFilterPanel() =