2022-12-19 22:45:01 -05:00
|
|
|
defmodule Chessh.Auth.UserRegistrationTest do
|
|
|
|
use Chessh.RepoCase
|
|
|
|
use ExUnit.Case
|
2022-12-28 01:50:22 -05:00
|
|
|
alias Chessh.{Player, Repo}
|
2022-12-19 22:45:01 -05:00
|
|
|
|
2023-02-01 16:57:14 -05:00
|
|
|
@valid_user %{username: "lizzy#0003", password: "password", discord_id: "4"}
|
2023-01-31 16:01:35 -05:00
|
|
|
@invalid_username %{username: "a", password: "password", discord_id: "7"}
|
2023-02-01 16:57:14 -05:00
|
|
|
@invalid_password %{username: "bruh#0003", password: "pass", discord_id: "6"}
|
|
|
|
@repeated_username %{username: "lizzy#0003", password: "password", discord_id: "6"}
|
2022-12-19 22:45:01 -05:00
|
|
|
|
|
|
|
test "Password must be at least 8 characters and username must be at least 2" do
|
|
|
|
refute Player.registration_changeset(%Player{}, @invalid_password).valid?
|
|
|
|
refute Player.registration_changeset(%Player{}, @invalid_username).valid?
|
|
|
|
end
|
|
|
|
|
|
|
|
test "Password changeset must match" do
|
|
|
|
refute Player.password_changeset(
|
|
|
|
%Player{},
|
|
|
|
Map.put(@valid_user, :password_confirmation,
|
|
|
|
password_confirmation: @valid_user.password <> "a"
|
|
|
|
)
|
|
|
|
).valid?
|
|
|
|
|
|
|
|
valid_user_changed_password = Map.put(@valid_user, :password, "a_new_password")
|
|
|
|
|
|
|
|
assert Player.password_changeset(
|
|
|
|
%Player{},
|
|
|
|
Map.put(
|
|
|
|
valid_user_changed_password,
|
|
|
|
:password_confirmation,
|
|
|
|
valid_user_changed_password.password
|
|
|
|
)
|
|
|
|
).valid?
|
|
|
|
end
|
|
|
|
|
|
|
|
test "Password is hashed" do
|
|
|
|
changeset = Player.registration_changeset(%Player{}, @valid_user)
|
|
|
|
assert_raise KeyError, fn -> changeset.changes.password end
|
|
|
|
assert changeset.changes.hashed_password
|
|
|
|
refute changeset.changes.hashed_password == @valid_user.password
|
|
|
|
end
|
|
|
|
|
2023-02-01 16:57:14 -05:00
|
|
|
test "Username is uniquely case sensitive" do
|
2022-12-19 22:45:01 -05:00
|
|
|
assert Repo.insert(Player.registration_changeset(%Player{}, @valid_user))
|
|
|
|
|
|
|
|
assert {:error,
|
|
|
|
%{errors: [{:username, {_, [{:constraint, :unique}, {:constraint_name, _}]}}]}} =
|
|
|
|
Repo.insert(Player.registration_changeset(%Player{}, @repeated_username))
|
|
|
|
end
|
|
|
|
end
|