curl_put /profile "{ \"nickname\": \"$player\" }" "-c ${!player_cookie}"
empathy_get $player events >/dev/null 2>&1 &
eval ${player_pid}=$!
+ empathy_players+=($player)
+}
+
+# Usage: empathy_player_deactivate <player_name>
+empathy_player_deactivate()
+{
+ player="$1"
+ player_pid=${player}_pid
+ if [ "${!player_pid}" != "" ]; then
+ pkill -P ${!player_pid}
+ fi
+ eval ${player_pid}=""
}
# Pulls a single named event out of the empathy event stream
test "$result" != "null"
TEST_END
+# Usage: empathy_players_judging <player_name>
+empathy_players_judging()
+{
+ empathy_get_event $1 game-state | jq .players_judging[]
+}
+
+TEST "Verify active players listed as judging"
+# echo here is to strip newlines
+result=$(echo $(empathy_players_judging alice))
+test "$result" = '"alice" "bob" "charlie"'
+TEST_END
+
TEST "Submit word groups from majority"
empathy_judged alice $prompt_id '[]' >/dev/null
result=$(empathy_judged bob $prompt_id '[]')
test "$result" != "null"
TEST_END
-pkill -P $alice_pid
-pkill -P $bob_pid
-pkill -P $charlie_pid
-pkill -P $dale_pid
+TEST_SUBSECTION "New game (no voting needed when all answered players judge)"
+
+TEST "Start 4-player game, 3 submissions"
+empathy_reset
+prompt_id=$(empathy_submit_prompt alice 4 "1 truth or dare" | jq .id)
+empathy_start alice $prompt_id
+empathy_answer alice $prompt_id '"truth"' >/dev/null
+empathy_answer bob $prompt_id '"truth"' >/dev/null
+empathy_answer charlie $prompt_id '"dare"' >/dev/null
+empathy_end_answers alice $prompt_id
+empathy_end_answers bob $prompt_id
+empathy_end_answers charlie $prompt_id
+test "$?" = "0"
+TEST_END
+
+TEST "Submit word groups from 2 players"
+empathy_judged alice $prompt_id '[]' >/dev/null
+result=$(empathy_judged bob $prompt_id '[]')
+test "$result" = '{"valid":true}'
+TEST_END
+
+TEST "Scoring hasn't started with player unsubmitted"
+result=$(echo $(empathy_scores alice))
+test "$result" = "null"
+TEST_END
+
+TEST "Submit word groups from last answering player"
+result=$(empathy_judged charlie $prompt_id '[]')
+test "$result" = '{"valid":true}'
+TEST_END
+
+TEST "Scoring has now started"
+result=$(echo $(empathy_scores alice))
+test "$result" != "null"
+TEST_END
+
+TEST_SUBSECTION "Non players don't affect judging requirements"
+
+TEST "Start 2-player game with 6 registered players"
+empathy_reset
+empathy_player_activate eric
+empathy_player_activate fred
+prompt_id=$(empathy_submit_prompt alice 4 "1 truth or dare" | jq .id)
+empathy_start alice $prompt_id
+empathy_answer alice $prompt_id '"truth"' >/dev/null
+empathy_answer bob $prompt_id '"true"' >/dev/null
+empathy_end_answers alice $prompt_id
+empathy_end_answers bob $prompt_id
+test "$?" = "0"
+TEST_END
+
+TEST "1 player votes for a match"
+empathy_judged alice $prompt_id '[["truth","true"]]' >/dev/null
+result=$(empathy_judged bob $prompt_id '[]')
+test "$result" = '{"valid":true}'
+TEST_END
+
+TEST "Verify the match passed the vote"
+# echo here is to strip newlines
+result=$(echo $(empathy_scores_names_numbers alice))
+test "$result" = '"alice" 2 "bob" 2 "charlie" 0 "dale" 0 "eric" 0 "fred" 0'
+TEST_END
+
+TEST_SUBSECTION "Inactive players don't appear in scores"
+
+TEST "Start 2-player game with 6 registered players"
+empathy_reset
+prompt_id=$(empathy_submit_prompt alice 4 "1 best pet" | jq .id)
+empathy_start alice $prompt_id
+empathy_answer alice $prompt_id '"cats"' >/dev/null
+empathy_answer bob $prompt_id '"dogs"' >/dev/null
+empathy_end_answers alice $prompt_id
+empathy_end_answers bob $prompt_id
+test "$?" = "0"
+TEST_END
+
+TEST "Deactivate 3 players"
+empathy_player_deactivate dale
+empathy_player_deactivate eric
+empathy_player_deactivate fred
+sleep 30
+test "$?" = "0"
+TEST_END
+
+TEST "Finish game with 2 active players"
+empathy_judged alice $prompt_id '[]' >/dev/null
+result=$(empathy_judged bob $prompt_id '[]')
+test "$result" = '{"valid":true}'
+TEST_END
+
+TEST "Verify scores don't include inactive players"
+# echo here is to strip newlines
+result=$(echo $(empathy_scores_names_numbers alice))
+test "$result" = '"alice" 1 "bob" 1 "charlie" 0'
+TEST_END
+
+empathy_deactivate_all()
+{
+ for player in ${empathy_players[*]}; do
+ empathy_player_deactivate $player
+ done
+}
+
+empathy_deactivate_all
TEST_REPORT