// 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") }