diff --git a/lib/chess/auth/user.ex b/lib/chess/auth/user.ex index f745bea..9f31d08 100644 --- a/lib/chess/auth/user.ex +++ b/lib/chess/auth/user.ex @@ -4,6 +4,7 @@ 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 @@ -18,6 +19,7 @@ defmodule Chess.Auth.User do struct |> cast(params, [:username, :password]) |> validate_required([:username, :password]) + |> unsafe_validate_unique(:username, Repo) |> hash_password() end diff --git a/test/chess/auth/user_test.exs b/test/chess/auth/user_test.exs new file mode 100644 index 0000000..ea65a3d --- /dev/null +++ b/test/chess/auth/user_test.exs @@ -0,0 +1,35 @@ +defmodule Chess.UserTest do + use Chess.DataCase + + describe "user" do + alias Chess.Auth.User + + @valid_attrs %{username: "zelda", password: "password"} + @invalid_attrs %{} + + test "changeset with valid attributes" do + changeset = User.changeset(%User{}, @valid_attrs) + assert changeset.valid? + end + + test "changeset with invalid attributes" do + changeset = User.changeset(%User{}, @invalid_attrs) + refute changeset.valid? + end + + test "username must be unique" do + create_user("zelda") + + changeset = User.changeset(%User{}, @valid_attrs) + refute changeset.valid? + end + + defp create_user(username) do + changeset = User.changeset( + %User{}, + %{username: username, password: "password"} + ) + Repo.insert!(changeset) + end + end +end