From: Carl Worth Date: Fri, 5 Jun 2020 12:41:40 +0000 (-0700) Subject: Add a new player-info event to the stream X-Git-Url: https://git.cworth.org/git?p=empires-server;a=commitdiff_plain;h=c5bdd36586eaa0235fb6822cb4ccb7620e1bb0aa Add a new player-info event to the stream This event informs the player what their ID and their name is. It's significant to tell them their own name because it may be provided from the server session (obtained by a cookie from the client). This commit includes a test case which uses the existing /profile endpoint to set a name, and then verifies that that name is returned in the player-info event. --- diff --git a/.gitignore b/.gitignore index f2f8bda..bed72fb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ node_modules game.html lmno-config.json +.test-cookie diff --git a/game.js b/game.js index baf1e55..b219336 100644 --- a/game.js +++ b/game.js @@ -151,6 +151,9 @@ class Game { }); response.write(`event: game-info\ndata: ${game_info_json}\n\n`); + /* And the player-info event. */ + response.write(`event: player-info\ndata: ${player.info_json()}\n\n`); + /* Finally, if this game class has a "state" property, stream that * current state to the client. */ if (this.state) { diff --git a/test b/test index 55a4c29..9ba6185 100755 --- a/test +++ b/test @@ -85,24 +85,34 @@ contains() grep -q "$2" <<< $1 } -# Post to a URL endpoint with optional JSON data +# POST to a URL endpoint with optional JSON data # # Usage: # -# curl_post [data] +# curl_post [data] [CURL_OPTIONS] curl_post() { - $CURL -X POST ${2:+-H 'Content-Type: application/json' -d "$2"} $URL/$1 + $CURL ${3:-} -X POST ${2:+-H 'Content-Type: application/json' -d "$2"} $URL/$1 } -# Get form a URL endpoint +# PUT to a URL endpoint with optional JSON data # # Usage: # -# curl_get +# curl_post [data] [CURL_OPTIONS] +curl_put() +{ + $CURL ${3:-} -X PUT ${2:+-H 'Content-Type: application/json' -d "$2"} $URL/$1 +} + +# GET from a URL endpoint +# +# Usage: +# +# curl_get [CURL_OPTIONS] curl_get() { - $CURL $URL/$1 + $CURL ${2:-} $URL/$1 } # Create a new game of the specified engine type @@ -295,6 +305,29 @@ tictactoe_move() curl_post $tictactoe_game_path/move "{ \"move\": $1 }" } +lmno_profile() +{ + curl_put /profile "{ \"nickname\": \"$1\" }" "-c .test-cookie" +} + +tictactoe_player_info() +{ + curl_get $tictactoe_game_path/events "-m 0.1 -b .test-cookie" 2>&1 \ + | grep player-info -A 1 \ + | grep ^data +} + +TEST_SUBSECTION "Tic Tac Toe player-info" + +TEST "Hit LMNO /profile to set name to 'curl'" +lmno_profile curl +TEST_END + +TEST "Verify player-info event reports 'curl' name" +result=$(tictactoe_player_info) +test "$result" = 'data: {"id":1,"name":"curl"}' +TEST_END + TEST_SUBSECTION "Tic Tac Toe /move" TEST "Move to the center square"