96 lines
2.9 KiB
Elixir
96 lines
2.9 KiB
Elixir
defmodule Aprsme.Accounts.UserTest do
|
|
use Aprsme.DataCase, async: true
|
|
|
|
alias Aprsme.Accounts.User
|
|
|
|
describe "registration_changeset/2" do
|
|
test "requires callsign" do
|
|
changeset = User.registration_changeset(%User{}, %{})
|
|
errors = errors_on(changeset)
|
|
assert Map.has_key?(errors, :callsign)
|
|
assert "can't be blank" in errors.callsign
|
|
end
|
|
|
|
test "validates callsign format" do
|
|
invalid_callsigns = ["123", "TOOLONGCALLSIGN", "NO SPACES", "nodigit"]
|
|
|
|
for callsign <- invalid_callsigns do
|
|
changeset =
|
|
User.registration_changeset(%User{}, %{
|
|
email: "test@example.com",
|
|
password: "valid_password123",
|
|
callsign: callsign
|
|
})
|
|
|
|
errors = errors_on(changeset)
|
|
assert Map.has_key?(errors, :callsign), "Expected callsign error for: #{callsign}"
|
|
assert "must be a valid amateur radio callsign" in errors.callsign
|
|
end
|
|
end
|
|
|
|
test "validates empty callsign" do
|
|
changeset =
|
|
User.registration_changeset(%User{}, %{
|
|
email: "test@example.com",
|
|
password: "valid_password123",
|
|
callsign: ""
|
|
})
|
|
|
|
errors = errors_on(changeset)
|
|
assert Map.has_key?(errors, :callsign)
|
|
assert "can't be blank" in errors.callsign
|
|
end
|
|
|
|
test "accepts valid callsigns" do
|
|
valid_callsigns = ["K1ABC", "W2XYZ", "AA3BB", "KG4AAA", "N7PQR", "VE3ABC"]
|
|
|
|
for callsign <- valid_callsigns do
|
|
changeset =
|
|
User.registration_changeset(%User{}, %{
|
|
email: "test@example.com",
|
|
password: "valid_password123",
|
|
callsign: callsign
|
|
})
|
|
|
|
assert changeset.valid?
|
|
end
|
|
end
|
|
|
|
test "converts callsign to uppercase" do
|
|
changeset =
|
|
User.registration_changeset(%User{}, %{
|
|
email: "test@example.com",
|
|
password: "valid_password123",
|
|
callsign: "k1abc"
|
|
})
|
|
|
|
assert get_change(changeset, :callsign) == "K1ABC"
|
|
end
|
|
end
|
|
|
|
describe "callsign_changeset/2" do
|
|
test "requires callsign to change" do
|
|
user = %User{callsign: "K1ABC"}
|
|
changeset = User.callsign_changeset(user, %{callsign: "K1ABC"})
|
|
errors = errors_on(changeset)
|
|
assert Map.has_key?(errors, :callsign)
|
|
assert "did not change" in errors.callsign
|
|
end
|
|
|
|
test "validates new callsign format" do
|
|
user = %User{callsign: "K1ABC"}
|
|
|
|
changeset = User.callsign_changeset(user, %{callsign: "INVALID"})
|
|
errors = errors_on(changeset)
|
|
assert Map.has_key?(errors, :callsign)
|
|
assert "must be a valid amateur radio callsign" in errors.callsign
|
|
end
|
|
|
|
test "accepts valid callsign change" do
|
|
user = %User{callsign: "K1ABC"}
|
|
changeset = User.callsign_changeset(user, %{callsign: "W2XYZ"})
|
|
assert changeset.valid?
|
|
assert get_change(changeset, :callsign) == "W2XYZ"
|
|
end
|
|
end
|
|
end
|