mirror of
https://github.com/danbee/chess
synced 2025-03-04 08:39:06 +00:00
Big test/factory refactor
This commit is contained in:
parent
c92b1b5aef
commit
7cec3fb1a9
@ -1,13 +1,13 @@
|
|||||||
defmodule Chess.UserTest do
|
defmodule Chess.UserTest do
|
||||||
use Chess.DataCase
|
use Chess.DataCase
|
||||||
|
|
||||||
import Chess.Factory, only: [create_user: 1]
|
import Chess.Factory
|
||||||
|
|
||||||
describe "user" do
|
describe "user" do
|
||||||
alias Chess.Auth.User
|
alias Chess.Auth.User
|
||||||
alias Chess.Repo
|
alias Chess.Repo
|
||||||
|
|
||||||
@valid_attrs %{username: "zelda", password: "password"}
|
@valid_attrs %{name: "Zelda", username: "zelda", password: "password"}
|
||||||
@invalid_attrs %{}
|
@invalid_attrs %{}
|
||||||
|
|
||||||
test "changeset with valid attributes" do
|
test "changeset with valid attributes" do
|
||||||
@ -21,7 +21,7 @@ defmodule Chess.UserTest do
|
|||||||
end
|
end
|
||||||
|
|
||||||
test "username must be unique" do
|
test "username must be unique" do
|
||||||
create_user("zelda")
|
insert(:user, %{username: "zelda"})
|
||||||
|
|
||||||
changeset = User.changeset(%User{}, @valid_attrs)
|
changeset = User.changeset(%User{}, @valid_attrs)
|
||||||
{:error, changeset} = Repo.insert(changeset)
|
{:error, changeset} = Repo.insert(changeset)
|
||||||
|
|||||||
@ -6,9 +6,9 @@ defmodule Chess.AuthTest do
|
|||||||
describe "users" do
|
describe "users" do
|
||||||
alias Chess.Auth.User
|
alias Chess.Auth.User
|
||||||
|
|
||||||
@valid_attrs %{password: "some password", username: "some username"}
|
@valid_attrs %{name: "some name", password: "some password", username: "some username"}
|
||||||
@update_attrs %{password: "some updated password", username: "some updated username"}
|
@update_attrs %{name: "some name", password: "some updated password", username: "some updated username"}
|
||||||
@invalid_attrs %{password: nil, username: nil}
|
@invalid_attrs %{name: nil, password: nil, username: nil}
|
||||||
|
|
||||||
def user_fixture(attrs \\ %{}) do
|
def user_fixture(attrs \\ %{}) do
|
||||||
{:ok, user} =
|
{:ok, user} =
|
||||||
|
|||||||
@ -5,11 +5,11 @@ defmodule Chess.GameTest do
|
|||||||
alias Chess.Repo
|
alias Chess.Repo
|
||||||
alias Chess.Store.Game
|
alias Chess.Store.Game
|
||||||
|
|
||||||
import Chess.Factory, only: [create_user: 2]
|
import Chess.Factory
|
||||||
|
|
||||||
test "game is valid with a board and user" do
|
test "game is valid with a board and user" do
|
||||||
user = create_user("link", "ilovezelda")
|
user = insert(:user, %{username: "link"})
|
||||||
opponent = create_user("zelda", "ganonsucks")
|
opponent = insert(:user, %{username: "zelda"})
|
||||||
|
|
||||||
attrs = %{
|
attrs = %{
|
||||||
board: %{},
|
board: %{},
|
||||||
@ -37,8 +37,8 @@ defmodule Chess.GameTest do
|
|||||||
end
|
end
|
||||||
|
|
||||||
test "game is invalid without a board" do
|
test "game is invalid without a board" do
|
||||||
user = create_user("link", "ilovezelda")
|
user = insert(:user, %{username: "link"})
|
||||||
opponent = create_user("zelda", "ganonsucks")
|
opponent = insert(:user, %{username: "zelda"})
|
||||||
|
|
||||||
attrs = %{board: nil, user_id: user.id, opponent_id: opponent.id}
|
attrs = %{board: nil, user_id: user.id, opponent_id: opponent.id}
|
||||||
changeset = Game.changeset(%Game{}, attrs)
|
changeset = Game.changeset(%Game{}, attrs)
|
||||||
@ -48,7 +48,7 @@ defmodule Chess.GameTest do
|
|||||||
end
|
end
|
||||||
|
|
||||||
test "game is invalid without a user" do
|
test "game is invalid without a user" do
|
||||||
opponent = create_user("zelda", "ganonsucks")
|
opponent = insert(:user, %{username: "zelda"})
|
||||||
|
|
||||||
attrs = %{board: %{}, opponent_id: opponent.id}
|
attrs = %{board: %{}, opponent_id: opponent.id}
|
||||||
changeset = Game.changeset(%Game{}, attrs)
|
changeset = Game.changeset(%Game{}, attrs)
|
||||||
@ -58,7 +58,7 @@ defmodule Chess.GameTest do
|
|||||||
end
|
end
|
||||||
|
|
||||||
test "game is invalid without an opponent" do
|
test "game is invalid without an opponent" do
|
||||||
user = create_user("link", "ilovezelda")
|
user = insert(:user, %{username: "link"})
|
||||||
|
|
||||||
attrs = %{board: %{}, user_id: user.id}
|
attrs = %{board: %{}, user_id: user.id}
|
||||||
changeset = Game.changeset(%Game{}, attrs)
|
changeset = Game.changeset(%Game{}, attrs)
|
||||||
|
|||||||
@ -3,13 +3,12 @@ defmodule Chess.ApiGameControllerTest do
|
|||||||
|
|
||||||
alias Chess.Auth.Guardian
|
alias Chess.Auth.Guardian
|
||||||
|
|
||||||
import Chess.Factory,
|
import Chess.Factory
|
||||||
only: [create_user: 0, create_user: 2, create_game_for: 2]
|
|
||||||
|
|
||||||
test "shows chosen game", %{conn: conn} do
|
test "shows chosen game", %{conn: conn} do
|
||||||
user = create_user()
|
user = insert(:user)
|
||||||
opponent = create_user("revali", "vahmedoh")
|
opponent = insert(:user, %{username: "revali"})
|
||||||
game = create_game_for(user, opponent)
|
game = insert(:game, %{user_id: user.id, opponent_id: opponent.id})
|
||||||
|
|
||||||
conn =
|
conn =
|
||||||
conn
|
conn
|
||||||
@ -20,11 +19,11 @@ defmodule Chess.ApiGameControllerTest do
|
|||||||
end
|
end
|
||||||
|
|
||||||
test "does not show a game if the user is not a player", %{conn: conn} do
|
test "does not show a game if the user is not a player", %{conn: conn} do
|
||||||
user = create_user()
|
user = insert(:user)
|
||||||
opponent = create_user("revali", "vahmedoh")
|
opponent = insert(:user, %{username: "revali"})
|
||||||
game = create_game_for(user, opponent)
|
game = insert(:game, %{user_id: user.id, opponent_id: opponent.id})
|
||||||
|
|
||||||
other_user = create_user("mipha", "ilovelink")
|
other_user = insert(:user, %{username: "mipha"})
|
||||||
|
|
||||||
conn =
|
conn =
|
||||||
conn
|
conn
|
||||||
@ -36,9 +35,9 @@ defmodule Chess.ApiGameControllerTest do
|
|||||||
end
|
end
|
||||||
|
|
||||||
test "responds with 403 if user is not logged in", %{conn: conn} do
|
test "responds with 403 if user is not logged in", %{conn: conn} do
|
||||||
user = create_user()
|
user = insert(:user)
|
||||||
opponent = create_user("revali", "vahmedoh")
|
opponent = insert(:user, %{username: "revali"})
|
||||||
game = create_game_for(user, opponent)
|
game = insert(:game, %{user_id: user.id, opponent_id: opponent.id})
|
||||||
|
|
||||||
conn =
|
conn =
|
||||||
conn
|
conn
|
||||||
@ -48,11 +47,11 @@ defmodule Chess.ApiGameControllerTest do
|
|||||||
end
|
end
|
||||||
|
|
||||||
test "does not update a game if the user is not a player", %{conn: conn} do
|
test "does not update a game if the user is not a player", %{conn: conn} do
|
||||||
user = create_user()
|
user = insert(:user)
|
||||||
opponent = create_user("revali", "vahmedoh")
|
opponent = insert(:user, %{username: "revali"})
|
||||||
game = create_game_for(user, opponent)
|
game = insert(:game, %{user_id: user.id, opponent_id: opponent.id})
|
||||||
|
|
||||||
other_user = create_user("mipha", "ilovelink")
|
other_user = insert(:user, %{username: "mipha"})
|
||||||
|
|
||||||
conn =
|
conn =
|
||||||
conn
|
conn
|
||||||
@ -68,7 +67,7 @@ defmodule Chess.ApiGameControllerTest do
|
|||||||
end
|
end
|
||||||
|
|
||||||
test "renders page not found when id is nonexistent", %{conn: conn} do
|
test "renders page not found when id is nonexistent", %{conn: conn} do
|
||||||
user = create_user()
|
user = insert(:user)
|
||||||
conn = login(conn, user)
|
conn = login(conn, user)
|
||||||
|
|
||||||
assert_error_sent 404, fn ->
|
assert_error_sent 404, fn ->
|
||||||
|
|||||||
@ -4,11 +4,10 @@ defmodule Chess.GameControllerTest do
|
|||||||
alias Chess.Store.Game
|
alias Chess.Store.Game
|
||||||
alias Chess.Auth.Guardian
|
alias Chess.Auth.Guardian
|
||||||
|
|
||||||
import Chess.Factory,
|
import Chess.Factory
|
||||||
only: [create_user: 0, create_user: 2, create_game_for: 2]
|
|
||||||
|
|
||||||
test "lists all entries on index", %{conn: conn} do
|
test "lists all entries on index", %{conn: conn} do
|
||||||
user = create_user()
|
user = insert(:user)
|
||||||
|
|
||||||
conn =
|
conn =
|
||||||
conn
|
conn
|
||||||
@ -19,10 +18,10 @@ defmodule Chess.GameControllerTest do
|
|||||||
end
|
end
|
||||||
|
|
||||||
test "creates resource and redirects when data is valid", %{conn: conn} do
|
test "creates resource and redirects when data is valid", %{conn: conn} do
|
||||||
opponent = create_user("daruk", "deathmountain")
|
opponent = insert(:user, %{username: "daruk"})
|
||||||
attrs = %{"opponent_id" => opponent.id}
|
attrs = %{"opponent_id" => opponent.id}
|
||||||
|
|
||||||
user = create_user()
|
user = insert(:user)
|
||||||
|
|
||||||
conn =
|
conn =
|
||||||
conn
|
conn
|
||||||
@ -35,9 +34,9 @@ defmodule Chess.GameControllerTest do
|
|||||||
end
|
end
|
||||||
|
|
||||||
test "shows chosen game", %{conn: conn} do
|
test "shows chosen game", %{conn: conn} do
|
||||||
user = create_user()
|
user = insert(:user)
|
||||||
opponent = create_user("revali", "vahmedoh")
|
opponent = insert(:user, %{username: "revali"})
|
||||||
game = create_game_for(user, opponent)
|
game = insert(:game, %{user_id: user.id, opponent_id: opponent.id})
|
||||||
|
|
||||||
conn =
|
conn =
|
||||||
conn
|
conn
|
||||||
@ -48,11 +47,11 @@ defmodule Chess.GameControllerTest do
|
|||||||
end
|
end
|
||||||
|
|
||||||
test "does not show a game if the user is not a player", %{conn: conn} do
|
test "does not show a game if the user is not a player", %{conn: conn} do
|
||||||
user = create_user()
|
user = insert(:user)
|
||||||
opponent = create_user("revali", "vahmedoh")
|
opponent = insert(:user, %{username: "revali"})
|
||||||
game = create_game_for(user, opponent)
|
game = insert(:game, %{user_id: user.id, opponent_id: opponent.id})
|
||||||
|
|
||||||
other_user = create_user("mipha", "ilovelink")
|
other_user = insert(:user, %{username: "mipha"})
|
||||||
|
|
||||||
conn =
|
conn =
|
||||||
conn
|
conn
|
||||||
@ -64,7 +63,7 @@ defmodule Chess.GameControllerTest do
|
|||||||
end
|
end
|
||||||
|
|
||||||
test "renders page not found when id is nonexistent", %{conn: conn} do
|
test "renders page not found when id is nonexistent", %{conn: conn} do
|
||||||
user = create_user()
|
user = insert(:user)
|
||||||
conn = login(conn, user)
|
conn = login(conn, user)
|
||||||
|
|
||||||
assert_error_sent 404, fn ->
|
assert_error_sent 404, fn ->
|
||||||
@ -74,7 +73,7 @@ defmodule Chess.GameControllerTest do
|
|||||||
|
|
||||||
test "deletes chosen resource", %{conn: conn} do
|
test "deletes chosen resource", %{conn: conn} do
|
||||||
game = Repo.insert! %Game{}
|
game = Repo.insert! %Game{}
|
||||||
user = create_user()
|
user = insert(:user)
|
||||||
conn = login(conn, user)
|
conn = login(conn, user)
|
||||||
conn = delete conn, game_path(conn, :delete, game)
|
conn = delete conn, game_path(conn, :delete, game)
|
||||||
assert redirected_to(conn) == game_path(conn, :index)
|
assert redirected_to(conn) == game_path(conn, :index)
|
||||||
|
|||||||
@ -3,7 +3,7 @@ defmodule Chess.GamesTest do
|
|||||||
|
|
||||||
import Wallaby.Query
|
import Wallaby.Query
|
||||||
|
|
||||||
import Chess.Factory, only: [create_user: 2, create_game_for: 2]
|
import Chess.Factory
|
||||||
|
|
||||||
test "visit homepage", %{session: session} do
|
test "visit homepage", %{session: session} do
|
||||||
session
|
session
|
||||||
@ -12,7 +12,7 @@ defmodule Chess.GamesTest do
|
|||||||
end
|
end
|
||||||
|
|
||||||
test "can create a new game", %{session: session} do
|
test "can create a new game", %{session: session} do
|
||||||
create_user("zelda", "ganonsucks")
|
insert(:user, %{username: "zelda", password: "ganonsucks"})
|
||||||
|
|
||||||
session
|
session
|
||||||
|> create_user_and_login()
|
|> create_user_and_login()
|
||||||
@ -27,10 +27,10 @@ defmodule Chess.GamesTest do
|
|||||||
end
|
end
|
||||||
|
|
||||||
test "can only see own games", %{session: session} do
|
test "can only see own games", %{session: session} do
|
||||||
opponent = create_user("urbosa", "gerudoqueen")
|
opponent = insert(:user, %{username: "urbosa", password: "gerudoqueen"})
|
||||||
|
|
||||||
user = create_user("zelda", "ganonsucks")
|
user = insert(:user, %{username: "zelda", password: "ganonsucks"})
|
||||||
create_game_for(user, opponent)
|
insert(:game, %{user_id: user.id, opponent_id: opponent.id})
|
||||||
|
|
||||||
session
|
session
|
||||||
|> create_user_and_login()
|
|> create_user_and_login()
|
||||||
@ -46,10 +46,10 @@ defmodule Chess.GamesTest do
|
|||||||
end
|
end
|
||||||
|
|
||||||
test "can see games as an opponent", %{session: session} do
|
test "can see games as an opponent", %{session: session} do
|
||||||
opponent = create_user("urbosa", "gerudoqueen")
|
opponent = insert(:user, %{username: "urbosa", password: "gerudoqueen"})
|
||||||
|
|
||||||
user = create_user("zelda", "ganonsucks")
|
user = insert(:user, %{username: "zelda", password: "ganonsucks"})
|
||||||
create_game_for(user, opponent)
|
insert(:game, %{user_id: user.id, opponent_id: opponent.id})
|
||||||
|
|
||||||
session
|
session
|
||||||
|> login("urbosa", "gerudoqueen")
|
|> login("urbosa", "gerudoqueen")
|
||||||
@ -66,7 +66,7 @@ defmodule Chess.GamesTest do
|
|||||||
end
|
end
|
||||||
|
|
||||||
test "can move a piece", %{session: session} do
|
test "can move a piece", %{session: session} do
|
||||||
create_user("zelda", "ganonsucks")
|
insert(:user, %{username: "zelda", password: "ganonsucks"})
|
||||||
|
|
||||||
session
|
session
|
||||||
|> create_user_and_login()
|
|> create_user_and_login()
|
||||||
@ -87,7 +87,7 @@ defmodule Chess.GamesTest do
|
|||||||
end
|
end
|
||||||
|
|
||||||
test "cannot move the opponents pieces", %{session: session} do
|
test "cannot move the opponents pieces", %{session: session} do
|
||||||
create_user("zelda", "ganonsucks")
|
insert(:user, %{username: "zelda", password: "ganonsucks"})
|
||||||
|
|
||||||
session
|
session
|
||||||
|> create_user_and_login()
|
|> create_user_and_login()
|
||||||
@ -102,8 +102,8 @@ defmodule Chess.GamesTest do
|
|||||||
end
|
end
|
||||||
|
|
||||||
test "cannot move pieces when it's the opponents turn", %{session: session} do
|
test "cannot move pieces when it's the opponents turn", %{session: session} do
|
||||||
create_user("link", "ilovezelda")
|
insert(:user, %{username: "link", password: "ilovezelda"})
|
||||||
create_user("zelda", "ganonsucks")
|
insert(:user, %{username: "zelda", password: "ganonsucks"})
|
||||||
|
|
||||||
session
|
session
|
||||||
|> login("link", "ilovezelda")
|
|> login("link", "ilovezelda")
|
||||||
@ -123,8 +123,8 @@ defmodule Chess.GamesTest do
|
|||||||
end
|
end
|
||||||
|
|
||||||
test "move is reflected on opponents screen", %{session: session} do
|
test "move is reflected on opponents screen", %{session: session} do
|
||||||
create_user("link", "ilovezelda")
|
insert(:user, %{username: "link", password: "ilovezelda"})
|
||||||
create_user("zelda", "ganonsucks")
|
insert(:user, %{username: "zelda", password: "ganonsucks"})
|
||||||
|
|
||||||
session
|
session
|
||||||
|> login("link", "ilovezelda")
|
|> login("link", "ilovezelda")
|
||||||
@ -149,7 +149,7 @@ defmodule Chess.GamesTest do
|
|||||||
end
|
end
|
||||||
|
|
||||||
defp create_user_and_login(session) do
|
defp create_user_and_login(session) do
|
||||||
create_user("link", "ilovezelda")
|
insert(:user, %{username: "link", password: "ilovezelda"})
|
||||||
|
|
||||||
session
|
session
|
||||||
|> login("link", "ilovezelda")
|
|> login("link", "ilovezelda")
|
||||||
|
|||||||
@ -2,10 +2,10 @@ defmodule Chess.SessionTest do
|
|||||||
use ChessWeb.FeatureCase
|
use ChessWeb.FeatureCase
|
||||||
|
|
||||||
import Wallaby.Query, only: [text_field: 1, link: 1, button: 1]
|
import Wallaby.Query, only: [text_field: 1, link: 1, button: 1]
|
||||||
import Chess.Factory, only: [create_user: 2]
|
import Chess.Factory
|
||||||
|
|
||||||
test "user cannot log in with incorrect username", %{session: session} do
|
test "user cannot log in with incorrect username", %{session: session} do
|
||||||
create_user("link@hyrule.kingdom", "ilovezelda")
|
insert(:user, %{username: "link@hyrule.kingdom", password: "ilovezelda"})
|
||||||
|
|
||||||
session
|
session
|
||||||
|> visit("/")
|
|> visit("/")
|
||||||
@ -18,7 +18,7 @@ defmodule Chess.SessionTest do
|
|||||||
end
|
end
|
||||||
|
|
||||||
test "user cannot log in with incorrect password", %{session: session} do
|
test "user cannot log in with incorrect password", %{session: session} do
|
||||||
create_user("link@hyrule.kingdom", "ilovezelda")
|
insert(:user, %{username: "link@hyrule.kingdom", password: "ilovezelda"})
|
||||||
|
|
||||||
session
|
session
|
||||||
|> visit("/")
|
|> visit("/")
|
||||||
@ -31,7 +31,7 @@ defmodule Chess.SessionTest do
|
|||||||
end
|
end
|
||||||
|
|
||||||
test "user can log in with correct details", %{session: session} do
|
test "user can log in with correct details", %{session: session} do
|
||||||
create_user("link@hyrule.kingdom", "ilovezelda")
|
insert(:user, %{username: "link@hyrule.kingdom", password: "ilovezelda"})
|
||||||
|
|
||||||
session
|
session
|
||||||
|> visit("/")
|
|> visit("/")
|
||||||
@ -46,7 +46,7 @@ defmodule Chess.SessionTest do
|
|||||||
end
|
end
|
||||||
|
|
||||||
test "user can log out", %{session: session} do
|
test "user can log out", %{session: session} do
|
||||||
create_user("link@hyrule.kingdom", "ilovezelda")
|
insert(:user, %{username: "link@hyrule.kingdom", password: "ilovezelda"})
|
||||||
|
|
||||||
session
|
session
|
||||||
|> visit("/")
|
|> visit("/")
|
||||||
|
|||||||
@ -1,21 +1,28 @@
|
|||||||
defmodule Chess.Factory do
|
defmodule Chess.Factory do
|
||||||
|
@moduledoc false
|
||||||
|
|
||||||
alias Chess.Auth.User
|
alias Chess.Auth.User
|
||||||
alias Chess.Store.Game
|
alias Chess.Store.Game
|
||||||
alias Chess.Repo
|
alias Chess.Repo
|
||||||
|
|
||||||
def create_user(username \\ "link", password \\ "ilovezelda") do
|
def insert(_resource, _params \\ %{})
|
||||||
User.changeset(
|
|
||||||
%User{},
|
def insert(:user, params) do
|
||||||
%{username: username, password: password}
|
attrs = %{
|
||||||
)
|
name: "Zelda",
|
||||||
|
username: "zelda",
|
||||||
|
password: "ilovelink"
|
||||||
|
}
|
||||||
|
|> Map.merge(params)
|
||||||
|
|
||||||
|
%User{}
|
||||||
|
|> User.changeset(attrs)
|
||||||
|> Repo.insert!
|
|> Repo.insert!
|
||||||
end
|
end
|
||||||
|
|
||||||
def create_game_for(user, opponent) do
|
def insert(:game, params) do
|
||||||
Game.changeset(
|
%Game{}
|
||||||
%Game{},
|
|> Game.changeset(params)
|
||||||
%{user_id: user.id, opponent_id: opponent.id}
|
|
||||||
)
|
|
||||||
|> Repo.insert!
|
|> Repo.insert!
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user