]> git.cworth.org Git - empires-server/commitdiff
Add a new player-info event to the stream
authorCarl Worth <cworth@cworth.org>
Fri, 5 Jun 2020 12:41:40 +0000 (05:41 -0700)
committerCarl Worth <cworth@cworth.org>
Fri, 5 Jun 2020 14:28:57 +0000 (07:28 -0700)
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.

.gitignore
game.js
test

index f2f8bda64d160c78c812349f14e72228f4038661..bed72fb6c8a56c92ed8d87728578b3d784d743d8 100644 (file)
@@ -1,3 +1,4 @@
 node_modules
 game.html
 lmno-config.json
+.test-cookie
diff --git a/game.js b/game.js
index baf1e557df502cc28f775f3540fa5f14d55102c8..b2193363b92dd1d1e7ac2227ce43456111200eee 100644 (file)
--- 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 55a4c2956318b04c5ac1e0c7c830cb4b358bfa0f..9ba61855248404a144bb44dfeaca9b38e83ec550 100755 (executable)
--- 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 <ENDPOINT> [data]
+# curl_post <ENDPOINT> [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 <ENDPOINT>
+# curl_post <ENDPOINT> [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 <ENDPOINT> [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"