diff --git a/test/chess_web/channels/game_channel_test.exs b/test/chess_web/channels/game_channel_test.exs new file mode 100644 index 0000000..e4c0d23 --- /dev/null +++ b/test/chess_web/channels/game_channel_test.exs @@ -0,0 +1,43 @@ +defmodule ChessWeb.GameChannelTest do + use ChessWeb.ChannelCase + + alias ChessWeb.UserSocket + + import Chess.Factory + # import Chess.AuthenticationHelpers + + test "assigns game_id to the socket after join" do + user = insert(:user) + game = insert(:game, %{ + user_id: user.id, + opponent_id: insert(:opponent).id + }) + + token = Phoenix.Token.sign(@endpoint, "game socket", user.id) + {:ok, socket} = connect(UserSocket, %{"token" => token}) + + {:ok, _, socket} = subscribe_and_join(socket, "game:#{game.id}", %{}) + + assert socket.assigns.game_id == Integer.to_string(game.id) + end + + test "returns the game state after join" do + user = insert(:user) + opponent = insert(:opponent, %{name: "Daruk"}) + game = insert(:game, %{ + user_id: user.id, + opponent_id: opponent.id + }) + + token = Phoenix.Token.sign(@endpoint, "game socket", user.id) + {:ok, socket} = connect(UserSocket, %{"token" => token}) + + {:ok, _, _} = subscribe_and_join(socket, "game:#{game.id}", %{}) + + assert_push "game:update", %{ + player: "white", + opponent: "Daruk", + turn: "white", + } + end +end diff --git a/test/support/factory.ex b/test/support/factory.ex index 046b724..3b8a14c 100644 --- a/test/support/factory.ex +++ b/test/support/factory.ex @@ -11,7 +11,17 @@ defmodule Chess.Factory do %User{ name: "Zelda", email: "zelda@hyrule.com", - password: "ilovelink" + password: "ganonsucks" + } + |> User.changeset(params) + |> Repo.insert! + end + + def insert(:opponent, params) do + %User{ + name: "Link", + email: "link@hyrule.com", + password: "ilovezelda" } |> User.changeset(params) |> Repo.insert!