Files
cheesy-arena-lite/web/audience_display_test.go
2021-05-16 11:00:29 -07:00

83 lines
2.8 KiB
Go

// Copyright 2014 Team 254. All Rights Reserved.
// Author: pat@patfairbank.com (Patrick Fairbank)
package web
import (
"github.com/Team254/cheesy-arena-lite/websocket"
gorillawebsocket "github.com/gorilla/websocket"
"github.com/stretchr/testify/assert"
"testing"
)
func TestAudienceDisplay(t *testing.T) {
web := setupTestWeb(t)
recorder := web.getHttpResponse("/displays/audience")
assert.Equal(t, 302, recorder.Code)
assert.Contains(t, recorder.Header().Get("Location"), "displayId=100")
assert.Contains(t, recorder.Header().Get("Location"), "background=%230f0")
assert.Contains(t, recorder.Header().Get("Location"), "reversed=false")
recorder = web.getHttpResponse("/displays/audience?displayId=1&background=%23000&reversed=false&overlayLocation=" +
"top")
assert.Equal(t, 200, recorder.Code)
assert.Contains(t, recorder.Body.String(), "Audience Display - Untitled Event - Cheesy Arena")
}
func TestAudienceDisplayWebsocket(t *testing.T) {
web := setupTestWeb(t)
server, wsUrl := web.startTestServer()
defer server.Close()
conn, _, err := gorillawebsocket.DefaultDialer.Dial(wsUrl+"/displays/audience/websocket?displayId=1", nil)
assert.Nil(t, err)
defer conn.Close()
ws := websocket.NewTestWebsocket(conn)
// Should get a few status updates right after connection.
readWebsocketType(t, ws, "displayConfiguration")
readWebsocketType(t, ws, "matchTiming")
readWebsocketType(t, ws, "audienceDisplayMode")
readWebsocketType(t, ws, "matchLoad")
readWebsocketType(t, ws, "matchTime")
readWebsocketType(t, ws, "realtimeScore")
readWebsocketType(t, ws, "scorePosted")
readWebsocketType(t, ws, "allianceSelection")
readWebsocketType(t, ws, "lowerThird")
// Run through a match cycle.
web.arena.MatchLoadNotifier.Notify()
readWebsocketType(t, ws, "matchLoad")
web.arena.AllianceStations["R1"].Bypass = true
web.arena.AllianceStations["R2"].Bypass = true
web.arena.AllianceStations["R3"].Bypass = true
web.arena.AllianceStations["B1"].Bypass = true
web.arena.AllianceStations["B2"].Bypass = true
web.arena.AllianceStations["B3"].Bypass = true
web.arena.StartMatch()
web.arena.Update()
web.arena.Update()
messages := readWebsocketMultiple(t, ws, 3)
screen, ok := messages["audienceDisplayMode"]
if assert.True(t, ok) {
assert.Equal(t, "match", screen)
}
sound, ok := messages["playSound"]
if assert.True(t, ok) {
assert.Equal(t, "start", sound)
}
_, ok = messages["matchTime"]
assert.True(t, ok)
web.arena.RealtimeScoreNotifier.Notify()
readWebsocketType(t, ws, "realtimeScore")
web.arena.ScorePostedNotifier.Notify()
readWebsocketType(t, ws, "scorePosted")
// Test other overlays.
web.arena.AllianceSelectionNotifier.Notify()
readWebsocketType(t, ws, "allianceSelection")
web.arena.LowerThirdNotifier.Notify()
readWebsocketType(t, ws, "lowerThird")
}