X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=test;h=d8a46ec970edf2bc40e4b382c48e1979a5ea1501;hb=2690233f317b87e7336b0404ae711837e726d5cf;hp=30dbe7f2781cd292de35b2b4112862f11af992c3;hpb=d6817ef860a230cbbb694e729a400ed37ed43d68;p=empires-server diff --git a/test b/test index 30dbe7f..d8a46ec 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 @@ -140,6 +150,24 @@ tictactoe_game_id=$(new_game tictactoe) test "$tictactoe_game_id" != "" TEST_END $tictactoe_game_id +TEST_SUBSECTION "Test redirects" + +TEST "Redirect of /GAMEID at top level" +redirect=$(curl_get $empires_game_id) +test "$redirect" = "Moved Permanently. Redirecting to /empires/$empires_game_id/" +TEST_END + +TEST "Redirect of lowercase /gameid at top level" +empires_game_id_lower=$(tr '[:upper:]' '[:lower:]' <<< $empires_game_id) +redirect=$(curl_get $empires_game_id_lower) +test "$redirect" = "Moved Permanently. Redirecting to /$empires_game_id/" +TEST_END + +TEST "Redirect of lowercase /empires/gameid" +redirect=$(curl_get empires/$empires_game_id_lower) +test "$redirect" = "Moved Permanently. Redirecting to /empires/$empires_game_id/" +TEST_END + TEST_SECTION "Empires game" empires_game_path=empires/$empires_game_id @@ -268,5 +296,108 @@ players=$(empires_players_string) test "$players" = "" TEST_END -TEST_REPORT +TEST_SECTION "Tic Tac Toe game" + +tictactoe_game_path=tictactoe/$tictactoe_game_id + +tictactoe_move() +{ + curl_post $tictactoe_game_path/move "{ \"move\": $1 }" "-b .test-cookie" +} + +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 +} + +tictactoe_player_name() +{ + curl_put $tictactoe_game_path/player "{ \"name\": \"$1\" }" "-b .test-cookie" +} + +tictactoe_player_team() +{ + curl_put $tictactoe_game_path/player "{ \"team\": \"$1\" }" "-b .test-cookie" +} + +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","team":""}' +TEST_END + +TEST_SUBSECTION "Tic Tac Toe /player" + +TEST "Change name to 'newname'" +tictactoe_player_name newname +result=$(tictactoe_player_info) +test "$result" = 'data: {"id":1,"name":"newname","team":""}' +TEST_END + +TEST "Change team to 'X'" +tictactoe_player_team X +result=$(tictactoe_player_info) +test "$result" = 'data: {"id":1,"name":"newname","team":"X"}' +TEST_END + +TEST "Change team to 'O'" +tictactoe_player_team O +result=$(tictactoe_player_info) +test "$result" = 'data: {"id":1,"name":"newname","team":"O"}' +TEST_END + +TEST "Verify cannot change team to 'Z'" +tictactoe_player_team Z +result=$(tictactoe_player_info) +test "$result" = 'data: {"id":1,"name":"newname","team":"O"}' +TEST_END +TEST "Leave current team" +tictactoe_player_team "" +result=$(tictactoe_player_info) +test "$result" = 'data: {"id":1,"name":"newname","team":""}' +TEST_END + +TEST_SUBSECTION "Tic Tac Toe /move" + +TEST "First move doesn't require a team" +result=$(tictactoe_move 0) +test "$result" = '{"legal":true}' +TEST_END + +TEST "Second move does require a team" +result=$(tictactoe_move 4) +test "$result" = '{"legal":false,"message":"It'"'"'s not your turn to move"}' +TEST_END + +TEST "Illegal to move when it's not your turn" +tictactoe_player_team X +result=$(tictactoe_move 4) +test "$result" = '{"legal":false,"message":"It'"'"'s not your turn to move"}' +TEST_END + +TEST "Legal move to center square" +tictactoe_player_team O +result=$(tictactoe_move 4) +test "$result" = '{"legal":true}' +TEST_END + +TEST "Move to center square again is now illegal" +tictactoe_player_team X +result=$(tictactoe_move 4) +test "$result" = '{"legal":false,"message":"Square is already occupied"}' +TEST_END + +TEST_REPORT