1
0
mirror of https://github.com/danbee/chess synced 2025-03-04 08:39:06 +00:00
chess/test/chess_web/controllers/api/game_controller_test.exs

84 lines
2.0 KiB
Elixir

defmodule Chess.ApiGameControllerTest do
use ChessWeb.ConnCase
alias Chess.Auth.Guardian
import Chess.Factory
test "shows chosen game", %{conn: conn} do
user = insert(:user)
opponent = insert(:user, %{email: "revali@rito.village"})
game = insert(:game, %{user_id: user.id, opponent_id: opponent.id})
conn =
conn
|> login(user)
|> get(api_game_path(conn, :show, game))
assert json_response(conn, 200)
end
test "does not show a game if the user is not a player", %{conn: conn} do
user = insert(:user)
opponent = insert(:user, %{email: "revali@rito.village"})
game = insert(:game, %{user_id: user.id, opponent_id: opponent.id})
other_user = insert(:user, %{email: "mipha@zora.domain"})
conn =
conn
|> login(other_user)
assert_error_sent 404, fn ->
get(conn, api_game_path(conn, :show, game.id))
end
end
test "responds with 403 if user is not logged in", %{conn: conn} do
user = insert(:user)
opponent = insert(:user, %{email: "revali@rito.village"})
game = insert(:game, %{user_id: user.id, opponent_id: opponent.id})
conn =
conn
|> get(api_game_path(conn, :show, game.id))
assert json_response(conn, 403)
end
test "does not update a game if the user is not a player", %{conn: conn} do
user = insert(:user)
opponent = insert(:user, %{email: "revali@rito.village"})
game = insert(:game, %{user_id: user.id, opponent_id: opponent.id})
other_user = insert(:user, %{email: "mipha@zora.domain"})
conn =
conn
|> login(other_user)
assert_error_sent 404, fn ->
patch(
conn,
api_game_path(conn, :update, game.id),
%{move: %{from: [1, 1], to: [2, 1]}}
)
end
end
test "renders page not found when id is nonexistent", %{conn: conn} do
user = insert(:user)
conn = login(conn, user)
assert_error_sent 404, fn ->
get(conn, api_game_path(conn, :show, -1))
end
end
defp login(conn, user) do
conn
|> Guardian.Plug.sign_in(user)
end
end