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