From 0e300d0025036d34f2a3c33996114ab3200229e4 Mon Sep 17 00:00:00 2001 From: Patrick Fairbank Date: Mon, 24 Jun 2024 17:35:59 -0700 Subject: [PATCH 1/2] Move amplified time remaining assignment above score change check for notifiction. --- field/arena.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/field/arena.go b/field/arena.go index 051dc4ed..d70eb3f5 100644 --- a/field/arena.go +++ b/field/arena.go @@ -981,6 +981,10 @@ func (arena *Arena) handlePlcInputOutput() { blueAmpSpeaker.UpdateState( blueAmpNoteCount, blueSpeakerNoteCount, blueAmplifyButton, blueCoopButton, matchStartTime, currentTime, ) + redAmplifiedTimeRemaining := redAmpSpeaker.AmplifiedTimeRemaining(currentTime) + arena.RedRealtimeScore.AmplifiedTimeRemainingSec = int(math.Ceil(redAmplifiedTimeRemaining)) + blueAmplifiedTimeRemaining := blueAmpSpeaker.AmplifiedTimeRemaining(currentTime) + arena.BlueRealtimeScore.AmplifiedTimeRemainingSec = int(math.Ceil(blueAmplifiedTimeRemaining)) if !oldRedScore.Equals(redScore) || !oldBlueScore.Equals(blueScore) || oldRedAmplifiedTimeRemainingSec != arena.RedRealtimeScore.AmplifiedTimeRemainingSec || oldBlueAmplifiedTimeRemainingSec != arena.BlueRealtimeScore.AmplifiedTimeRemainingSec { @@ -988,10 +992,6 @@ func (arena *Arena) handlePlcInputOutput() { } // Handle the amp outputs. - redAmplifiedTimeRemaining := redAmpSpeaker.AmplifiedTimeRemaining(currentTime) - arena.RedRealtimeScore.AmplifiedTimeRemainingSec = int(math.Ceil(redAmplifiedTimeRemaining)) - blueAmplifiedTimeRemaining := blueAmpSpeaker.AmplifiedTimeRemaining(currentTime) - arena.BlueRealtimeScore.AmplifiedTimeRemainingSec = int(math.Ceil(blueAmplifiedTimeRemaining)) if arena.MatchState == AutoPeriod || arena.MatchState == PausePeriod || arena.MatchState == TeleopPeriod { redLowAmpLight := redAmpSpeaker.BankedAmpNotes >= 1 redHighAmpLight := redAmpSpeaker.BankedAmpNotes >= 2 From 1b7f9530dc92101ff9d7da00312acaa95afd836b Mon Sep 17 00:00:00 2001 From: Patrick Fairbank Date: Wed, 26 Jun 2024 11:12:11 -0700 Subject: [PATCH 2/2] Disallow changing number of playoff alliances after alliance selection. --- web/setup_settings.go | 6 ++++-- web/setup_settings_test.go | 12 +++++++++--- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/web/setup_settings.go b/web/setup_settings.go index 7673e2cb..474fd7fb 100644 --- a/web/setup_settings.go +++ b/web/setup_settings.go @@ -55,14 +55,16 @@ func (web *Web) settingsPostHandler(w http.ResponseWriter, r *http.Request) { playoffType = model.DoubleEliminationPlayoff numAlliances = 8 } - if eventSettings.PlayoffType != playoffType { + if eventSettings.PlayoffType != playoffType || eventSettings.NumPlayoffAlliances != numAlliances { alliances, err := web.arena.Database.GetAllAlliances() if err != nil { handleWebErr(w, err) return } if len(alliances) > 0 { - web.renderSettings(w, r, "Cannot change playoff type after alliance selection has been finalized.") + web.renderSettings( + w, r, "Cannot change playoff type or size after alliance selection has been finalized.", + ) return } } diff --git a/web/setup_settings_test.go b/web/setup_settings_test.go index 8d040e94..4d2d87b0 100644 --- a/web/setup_settings_test.go +++ b/web/setup_settings_test.go @@ -50,15 +50,21 @@ func TestSetupSettingsDoubleElimination(t *testing.T) { func TestSetupSettingsInvalidValues(t *testing.T) { web := setupTestWeb(t) + recorder := web.postHttpResponse("/setup/settings", "playoffType=SingleEliminationPlayoff&numPlayoffAlliances=8") + assert.Equal(t, 303, recorder.Code) // Invalid number of alliances. - recorder := web.postHttpResponse("/setup/settings", "playoffType=SingleEliminationPlayoff&numAlliances=1") + recorder = web.postHttpResponse("/setup/settings", "playoffType=SingleEliminationPlayoff&numAlliances=1") assert.Contains(t, recorder.Body.String(), "must be between 2 and 16") // Changing the playoff type after alliance selection is finalized. assert.Nil(t, web.arena.Database.CreateAlliance(&model.Alliance{Id: 1})) - recorder = web.postHttpResponse("/setup/settings", "playoffType=SingleEliminationPlayoff&numPlayoffAlliances=8") - assert.Contains(t, recorder.Body.String(), "Cannot change playoff type after alliance selection") + recorder = web.postHttpResponse("/setup/settings", "playoffType=DoubleEliminationPlayoff") + assert.Contains(t, recorder.Body.String(), "Cannot change playoff type or size after alliance selection") + + // Changing the playoff size after alliance selection is finalized. + recorder = web.postHttpResponse("/setup/settings", "numPlayoffAlliances=2") + assert.Contains(t, recorder.Body.String(), "Cannot change playoff type or size after alliance selection") } func TestSetupSettingsClearDb(t *testing.T) {