From 8fb1176fb345a5a76610bb79192fa1e84496c08c Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Thu, 11 Jun 2020 12:11:45 -0700 Subject: [PATCH] test: Add initial testing for the Empathy game 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 | 146 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) diff --git a/test b/test index 8d01515..26a5770 100755 --- 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 -- 2.43.0