1
0
mirror of https://github.com/danbee/chess synced 2025-03-04 08:39:06 +00:00

Add uniqueness constraint

This commit is contained in:
Daniel Barber 2018-02-02 15:42:07 -05:00
parent 08b2684e1c
commit d5b8f7d7c2
Signed by: danbarber
GPG Key ID: 931D8112E0103DD8
6 changed files with 23 additions and 19 deletions

View File

@ -4,7 +4,6 @@ defmodule Chess.Auth.User do
use Ecto.Schema use Ecto.Schema
import Ecto.Changeset import Ecto.Changeset
alias Comeonin.Argon2 alias Comeonin.Argon2
alias Chess.Repo
schema "users" do schema "users" do
field :password, :string, virtual: true field :password, :string, virtual: true
@ -19,7 +18,7 @@ defmodule Chess.Auth.User do
struct struct
|> cast(params, [:username, :password]) |> cast(params, [:username, :password])
|> validate_required([:username, :password]) |> validate_required([:username, :password])
|> unsafe_validate_unique(:username, Repo) |> unique_constraint(:username)
|> hash_password() |> hash_password()
end end

View File

@ -0,0 +1,7 @@
defmodule Chess.Repo.Migrations.AddUniqueConstraintOnUsername do
use Ecto.Migration
def change do
create unique_index(:users, [:username])
end
end

View File

@ -1,8 +1,11 @@
defmodule Chess.UserTest do defmodule Chess.UserTest do
use Chess.DataCase use Chess.DataCase
import Chess.Factory, only: [create_user: 1]
describe "user" do describe "user" do
alias Chess.Auth.User alias Chess.Auth.User
alias Chess.Repo
@valid_attrs %{username: "zelda", password: "password"} @valid_attrs %{username: "zelda", password: "password"}
@invalid_attrs %{} @invalid_attrs %{}
@ -21,15 +24,9 @@ defmodule Chess.UserTest do
create_user("zelda") create_user("zelda")
changeset = User.changeset(%User{}, @valid_attrs) changeset = User.changeset(%User{}, @valid_attrs)
refute changeset.valid? {:error, changeset} = Repo.insert(changeset)
end
defp create_user(username) do refute changeset.valid?
changeset = User.changeset(
%User{},
%{username: username, password: "password"}
)
Repo.insert!(changeset)
end end
end end
end end

View File

@ -2,7 +2,7 @@ defmodule Chess.GamesTest do
use ChessWeb.FeatureCase use ChessWeb.FeatureCase
import Wallaby.Query, only: [css: 1, css: 2, button: 1, text_field: 1] import Wallaby.Query, only: [css: 1, css: 2, button: 1, text_field: 1]
import Chess.Factory, only: [create_user: 0] import Chess.Factory, only: [create_user: 2]
test "visit homepage", %{session: session} do test "visit homepage", %{session: session} do
session session
@ -13,6 +13,7 @@ defmodule Chess.GamesTest do
test "can create a new game", %{session: session} do test "can create a new game", %{session: session} do
session session
|> login() |> login()
|> take_screenshot()
|> create_game() |> create_game()
|> assert_has(css(".board")) |> assert_has(css(".board"))
end end
@ -34,7 +35,7 @@ defmodule Chess.GamesTest do
end end
defp login(session) do defp login(session) do
create_user() create_user("link@hyrule.kingdom", "ilovezelda")
session session
|> visit("/session/new") |> visit("/session/new")

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: 0] import Chess.Factory, only: [create_user: 2]
test "user cannot log in with incorrect username", %{session: session} do test "user cannot log in with incorrect username", %{session: session} do
create_user() create_user("link@hyrule.kingdom", "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() create_user("link@hyrule.kingdom", "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() create_user("link@hyrule.kingdom", "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() create_user("link@hyrule.kingdom", "ilovezelda")
session session
|> visit("/") |> visit("/")

View File

@ -2,10 +2,10 @@ defmodule Chess.Factory do
alias Chess.Auth.User alias Chess.Auth.User
alias Chess.Repo alias Chess.Repo
def create_user do def create_user(username \\ "zelda", password \\ "password") do
User.changeset( User.changeset(
%User{}, %User{},
%{username: "link@hyrule.kingdom", password: "ilovezelda"} %{username: username, password: password}
) )
|> Repo.insert! |> Repo.insert!
end end