mirror of
https://github.com/danbee/chess
synced 2025-03-04 08:39:06 +00:00
Add uniqueness constraint
This commit is contained in:
parent
08b2684e1c
commit
d5b8f7d7c2
@ -4,7 +4,6 @@ defmodule Chess.Auth.User do
|
||||
use Ecto.Schema
|
||||
import Ecto.Changeset
|
||||
alias Comeonin.Argon2
|
||||
alias Chess.Repo
|
||||
|
||||
schema "users" do
|
||||
field :password, :string, virtual: true
|
||||
@ -19,7 +18,7 @@ defmodule Chess.Auth.User do
|
||||
struct
|
||||
|> cast(params, [:username, :password])
|
||||
|> validate_required([:username, :password])
|
||||
|> unsafe_validate_unique(:username, Repo)
|
||||
|> unique_constraint(:username)
|
||||
|> hash_password()
|
||||
end
|
||||
|
||||
|
||||
@ -0,0 +1,7 @@
|
||||
defmodule Chess.Repo.Migrations.AddUniqueConstraintOnUsername do
|
||||
use Ecto.Migration
|
||||
|
||||
def change do
|
||||
create unique_index(:users, [:username])
|
||||
end
|
||||
end
|
||||
@ -1,8 +1,11 @@
|
||||
defmodule Chess.UserTest do
|
||||
use Chess.DataCase
|
||||
|
||||
import Chess.Factory, only: [create_user: 1]
|
||||
|
||||
describe "user" do
|
||||
alias Chess.Auth.User
|
||||
alias Chess.Repo
|
||||
|
||||
@valid_attrs %{username: "zelda", password: "password"}
|
||||
@invalid_attrs %{}
|
||||
@ -21,15 +24,9 @@ defmodule Chess.UserTest do
|
||||
create_user("zelda")
|
||||
|
||||
changeset = User.changeset(%User{}, @valid_attrs)
|
||||
refute changeset.valid?
|
||||
end
|
||||
{:error, changeset} = Repo.insert(changeset)
|
||||
|
||||
defp create_user(username) do
|
||||
changeset = User.changeset(
|
||||
%User{},
|
||||
%{username: username, password: "password"}
|
||||
)
|
||||
Repo.insert!(changeset)
|
||||
refute changeset.valid?
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -2,7 +2,7 @@ defmodule Chess.GamesTest do
|
||||
use ChessWeb.FeatureCase
|
||||
|
||||
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
|
||||
session
|
||||
@ -13,6 +13,7 @@ defmodule Chess.GamesTest do
|
||||
test "can create a new game", %{session: session} do
|
||||
session
|
||||
|> login()
|
||||
|> take_screenshot()
|
||||
|> create_game()
|
||||
|> assert_has(css(".board"))
|
||||
end
|
||||
@ -34,7 +35,7 @@ defmodule Chess.GamesTest do
|
||||
end
|
||||
|
||||
defp login(session) do
|
||||
create_user()
|
||||
create_user("link@hyrule.kingdom", "ilovezelda")
|
||||
|
||||
session
|
||||
|> visit("/session/new")
|
||||
|
||||
@ -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: 0]
|
||||
import Chess.Factory, only: [create_user: 2]
|
||||
|
||||
test "user cannot log in with incorrect username", %{session: session} do
|
||||
create_user()
|
||||
create_user("link@hyrule.kingdom", "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()
|
||||
create_user("link@hyrule.kingdom", "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()
|
||||
create_user("link@hyrule.kingdom", "ilovezelda")
|
||||
|
||||
session
|
||||
|> visit("/")
|
||||
@ -46,7 +46,7 @@ defmodule Chess.SessionTest do
|
||||
end
|
||||
|
||||
test "user can log out", %{session: session} do
|
||||
create_user()
|
||||
create_user("link@hyrule.kingdom", "ilovezelda")
|
||||
|
||||
session
|
||||
|> visit("/")
|
||||
|
||||
@ -2,10 +2,10 @@ defmodule Chess.Factory do
|
||||
alias Chess.Auth.User
|
||||
alias Chess.Repo
|
||||
|
||||
def create_user do
|
||||
def create_user(username \\ "zelda", password \\ "password") do
|
||||
User.changeset(
|
||||
%User{},
|
||||
%{username: "link@hyrule.kingdom", password: "ilovezelda"}
|
||||
%{username: username, password: password}
|
||||
)
|
||||
|> Repo.insert!
|
||||
end
|
||||
|
||||
Loading…
Reference in New Issue
Block a user