1
0
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:
Daniel Barber 2018-03-02 17:46:25 -05:00
parent c92b1b5aef
commit 7cec3fb1a9
Signed by: danbarber
GPG Key ID: 931D8112E0103DD8
8 changed files with 79 additions and 74 deletions

View File

@ -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)

View File

@ -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} =

View File

@ -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)

View File

@ -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 ->

View File

@ -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)

View File

@ -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")

View File

@ -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("/")

View File

@ -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