]> git.cworth.org Git - empires-server/commitdiff
test: Add initial testing for the Empathy game
authorCarl Worth <cworth@cworth.org>
Thu, 11 Jun 2020 19:11:45 +0000 (12:11 -0700)
committerCarl Worth <cworth@cworth.org>
Thu, 11 Jun 2020 19:11:45 +0000 (12:11 -0700)
Two general techniques that are introduced here that will be useful
for testing of other games:

  * Registration of multiple user and events sent from each (see
    multiple cookies and a player-cookie parameter for many empathy_*
    functions)

  * Fishing events out of the event stream in response to client
    requests (see curl_get_event)

This testing gets as far as is currently implemented in the server:
Multiple player join, a category is submitted and voted one, the game
starts, all players submit answers, players receive words to judge,
and players submit word groups to capture the results of their
judging.

What's not yet tested is the next phase that's also not implemented
yet: The server using the submitted word groups to affect the scoring.

test

diff --git a/test b/test
index 8d01515418720f7d185854fa25cbc67a5c761179..26a57707a6637ab94a8ec3927087646b18e1b074 100755 (executable)
--- a/test
+++ b/test
@@ -400,4 +400,150 @@ result=$(tictactoe_move 4)
 test "$result" = '{"legal":false,"message":"Square is already occupied"}'
 TEST_END
 
+TEST_SECTION "Empathy game"
+
+TEST_SUBSECTION "Create a game and register 3 players"
+
+TEST "Create the game"
+empathy_game_id=$(new_game empathy)
+test "$empathy_game_id" != ""
+TEST_END $empathy_game_id
+
+empathy_game_path=empathy/$empathy_game_id
+
+empathy_profile()
+{
+    cookie_file=".cookie-empathy-$1"
+    curl_put /profile "{ \"nickname\": \"$1\" }" "-c $cookie_file"
+    echo $cookie_file
+}
+
+curl_get_event()
+{
+    curl_get $1 "-m 0.1 $3" 2>&1 \
+        | grep "^event: $2" -A 1 \
+        | grep ^data: \
+        | sed -e 's,^data: *,,'
+}
+
+empathy_player_name()
+{
+    curl_get_event $empathy_game_path/events player-info "-b $1" | jq -r .name
+}
+
+TEST "Set 'alice' in session"
+alice=$(empathy_profile alice)
+test "$alice" = ".cookie-empathy-alice"
+TEST_END
+
+TEST "Register alice and verify name"
+result=$(empathy_player_name $alice)
+test "$result" = "alice"
+TEST_END
+
+TEST "Register bob"
+bob=$(empathy_profile bob)
+result=$(empathy_player_name $bob)
+test "$result" = "bob"
+TEST_END
+
+TEST "Register charlie"
+charlie=$(empathy_profile charlie)
+result=$(empathy_player_name $charlie)
+test "$result" = "charlie"
+TEST_END
+
+TEST_SUBSECTION "Category selection"
+
+empathy_submit_prompt()
+{
+    curl_post $empathy_game_path/prompts "{ \"items\": $2, \"prompt\": \"$3\"}" "-b $1"
+}
+
+TEST "Submit a category"
+prompt_id=$(empathy_submit_prompt $alice 3 "3 things on a beach" | jq .id)
+test "$prompt_id" = "1"
+TEST_END
+
+empathy_vote()
+{
+    curl_post $empathy_game_path/vote/$2 "" "-b $1"
+}
+
+TEST "Vote on this category"
+empathy_vote $alice $prompt_id
+test "$?" = "0"
+TEST_END
+
+empathy_start()
+{
+    curl_post $empathy_game_path/start/$2 "" "-b $1"
+}
+
+TEST "Start the game with this category"
+empathy_start $alice $prompt_id
+test "$?" = "0"
+TEST_END
+
+empathy_answer()
+{
+    curl_post $empathy_game_path/answer/$2 "{ \"answers\": [$3]}" "-b $1"
+}
+
+TEST_SUBSECTION "Submitting answers"
+
+TEST "Submit from a non-player fails"
+result=$(empathy_answer bogus $prompt_id '"sun", "sand", "water"')
+test "$result" = '{"valid":false,"message":"Player not found"}'
+TEST_END
+
+TEST "Submit from alice succeeds"
+result=$(empathy_answer $alice $prompt_id '"sun", "sand", "water"')
+test "$result" = '{"valid":true}'
+TEST_END
+
+TEST "Submit from bob succeeds"
+result=$(empathy_answer $bob $prompt_id '"people", "sands", "sunlight"')
+test "$result" = '{"valid":true}'
+TEST_END
+
+TEST "Submit from charlie succeeds"
+result=$(empathy_answer $charlie $prompt_id '"sunshine", "sand", "wafer"')
+test "$result" = '{"valid":true}'
+TEST_END
+
+empathy_judging()
+{
+    curl_post $empathy_game_path/judging/$2 "{ \"word_groups\": $3}" "-b $1"
+}
+
+TEST_SUBSECTION "Judging answers"
+
+empathy_ambiguities()
+{
+    curl_get_event $empathy_game_path/events game-state "-b $1" \
+        | jq -r .ambiguities[]
+}
+
+TEST "Received all unique words"
+# echo here is to strip newlines
+result=$(echo $(empathy_ambiguities $alice))
+test "$result" = "sun sand water people sands sunlight sunshine wafer"
+TEST_END
+
+TEST "Submit word groups from alice"
+result=$(empathy_judging $alice $prompt_id '[["sun","sunlight","sunshine"],["sand","sands"],["water","wafer"]]')
+test "$result" = '{"valid":true}'
+TEST_END
+
+TEST "Submit word groups from bob"
+result=$(empathy_judging $bob $prompt_id '[["sand","sands"],["water","wafer"]]')
+test "$result" = '{"valid":true}'
+TEST_END
+
+TEST "Submit word groups from charlie"
+result=$(empathy_judging $charlie $prompt_id '[["sunlight","sunshine"],["sand","sands"]]')
+test "$result" = '{"valid":true}'
+TEST_END
+
 TEST_REPORT