From 7cec3fb1a95af039250a76a3014978d506db9ed7 Mon Sep 17 00:00:00 2001 From: Dan Barber Date: Fri, 2 Mar 2018 17:46:25 -0500 Subject: [PATCH] Big test/factory refactor --- test/chess/auth/user_test.exs | 6 ++-- test/chess/auth_test.exs | 6 ++-- test/chess/store/game_test.exs | 14 ++++---- .../controllers/api/game_controller_test.exs | 33 +++++++++---------- .../controllers/game_controller_test.exs | 27 ++++++++------- test/features/games_test.exs | 30 ++++++++--------- test/features/session_test.exs | 10 +++--- test/support/factory.ex | 27 +++++++++------ 8 files changed, 79 insertions(+), 74 deletions(-) diff --git a/test/chess/auth/user_test.exs b/test/chess/auth/user_test.exs index 594a372..186ad20 100644 --- a/test/chess/auth/user_test.exs +++ b/test/chess/auth/user_test.exs @@ -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) diff --git a/test/chess/auth_test.exs b/test/chess/auth_test.exs index b6154e7..a2a58a7 100644 --- a/test/chess/auth_test.exs +++ b/test/chess/auth_test.exs @@ -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} = diff --git a/test/chess/store/game_test.exs b/test/chess/store/game_test.exs index 7d17615..187c743 100644 --- a/test/chess/store/game_test.exs +++ b/test/chess/store/game_test.exs @@ -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) diff --git a/test/chess_web/controllers/api/game_controller_test.exs b/test/chess_web/controllers/api/game_controller_test.exs index 539390c..e9edc6c 100644 --- a/test/chess_web/controllers/api/game_controller_test.exs +++ b/test/chess_web/controllers/api/game_controller_test.exs @@ -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 -> diff --git a/test/chess_web/controllers/game_controller_test.exs b/test/chess_web/controllers/game_controller_test.exs index 38462ab..b027b06 100644 --- a/test/chess_web/controllers/game_controller_test.exs +++ b/test/chess_web/controllers/game_controller_test.exs @@ -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) diff --git a/test/features/games_test.exs b/test/features/games_test.exs index 9b5b737..3467bbd 100644 --- a/test/features/games_test.exs +++ b/test/features/games_test.exs @@ -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") diff --git a/test/features/session_test.exs b/test/features/session_test.exs index 6a24850..2fe3887 100644 --- a/test/features/session_test.exs +++ b/test/features/session_test.exs @@ -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("/") diff --git a/test/support/factory.ex b/test/support/factory.ex index 69d90cc..cb102d4 100644 --- a/test/support/factory.ex +++ b/test/support/factory.ex @@ -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