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

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

View File

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

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

View File

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