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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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