mirror of
https://github.com/danbee/chess
synced 2025-03-04 08:39:06 +00:00
120 lines
2.9 KiB
Elixir
120 lines
2.9 KiB
Elixir
defmodule Chess.GamesTest do
|
|
use ChessWeb.FeatureCase
|
|
|
|
import Wallaby.Query
|
|
|
|
import Chess.Factory, only: [create_user: 2, create_game_for: 2]
|
|
|
|
test "visit homepage", %{session: session} do
|
|
session
|
|
|> visit("/")
|
|
|> assert_has(css("header h1", text: "Chess"))
|
|
end
|
|
|
|
test "can create a new game", %{session: session} do
|
|
create_user("zelda", "ganonsucks")
|
|
|
|
session
|
|
|> create_user_and_login()
|
|
|> visit("/games")
|
|
|> click(link("New game"))
|
|
|> select("game[opponent_id]", option: "zelda")
|
|
|> click(button("Create game"))
|
|
|
|
session
|
|
|> assert_has(css("h2", text: "Game with zelda"))
|
|
|> assert_has(css(".board"))
|
|
end
|
|
|
|
test "can only see own games", %{session: session} do
|
|
opponent = create_user("urbosa", "gerudoqueen")
|
|
|
|
user = create_user("zelda", "ganonsucks")
|
|
create_game_for(user, opponent)
|
|
|
|
session
|
|
|> create_user_and_login()
|
|
|> visit("/games")
|
|
|> click(link("New game"))
|
|
|> select("game[opponent_id]", option: "urbosa")
|
|
|> click(button("Create game"))
|
|
|> click(link("Back to games"))
|
|
|
|
session
|
|
|> assert_has(css(".table tr", count: 1))
|
|
|> assert_has(link("Game with urbosa"))
|
|
end
|
|
|
|
test "can see games as an opponent", %{session: session} do
|
|
opponent = create_user("urbosa", "gerudoqueen")
|
|
|
|
user = create_user("zelda", "ganonsucks")
|
|
create_game_for(user, opponent)
|
|
|
|
session
|
|
|> login("urbosa", "gerudoqueen")
|
|
|
|
session
|
|
|> assert_has(css(".table tr", count: 1))
|
|
|> assert_has(link("Game with zelda"))
|
|
|
|
session
|
|
|> click(link("Game with zelda"))
|
|
|
|
session
|
|
|> assert_has(css("h2", text: "Game with zelda"))
|
|
end
|
|
|
|
test "can move a piece", %{session: session} do
|
|
create_user("zelda", "ganonsucks")
|
|
|
|
session
|
|
|> create_user_and_login()
|
|
|> visit("/games")
|
|
|> click(link("New game"))
|
|
|> select("game[opponent_id]", option: "zelda")
|
|
|> click(button("Create game"))
|
|
|
|
session
|
|
|> click(css("#f4-r1"))
|
|
|> assert_has(square_selected("f4-r1"))
|
|
|> assert_has(square_containing("f4-r1", "white.pawn"))
|
|
|
|
session
|
|
|> click(css("#f4-r3"))
|
|
|> refute_has(square_containing("f4-r1", "white.pawn"))
|
|
|> assert_has(square_containing("f4-r3", "white.pawn"))
|
|
end
|
|
|
|
defp create_user_and_login(session) do
|
|
create_user("link", "ilovezelda")
|
|
|
|
session
|
|
|> login("link", "ilovezelda")
|
|
end
|
|
|
|
defp login(session, username, password) do
|
|
session
|
|
|> visit("/session/new")
|
|
|> fill_in(text_field("Username"), with: username)
|
|
|> fill_in(text_field("Password"), with: password)
|
|
|> click(button("Log in"))
|
|
end
|
|
|
|
def select(session, name, [option: option]) do
|
|
session
|
|
|> find(css("[name='#{name}']"))
|
|
|> click(option(option))
|
|
|
|
session
|
|
end
|
|
|
|
defp square_selected(square) do
|
|
css("##{square}.selected")
|
|
end
|
|
|
|
defp square_containing(square, piece) do
|
|
css("##{square}.#{piece}")
|
|
end
|
|
end
|