Test to verify unique constraint

Yes, thank you!

For the record:

test "email has been taken" do
    user = User.registration_changeset(%User{}, @valid_attrs)
    assert {:ok, user } = Repo.insert(user)
    
    imposter = User.registration_changeset(%User{}, @valid_attrs)
    
    assert {:error, changeset} = Repo.insert(imposter)
    assert changeset.errors[:email] == {"Email is already taken", []}
end
def changeset(struct, params \\ %{}) do
    struct
    |> cast(params, [:name, :email])
    |> validate_required([:name, :email], message: "Are required")
    |> unique_constraint(:email, message: "Email is already taken")
    |> validate_format(:email, ~r/@/, message: "The email is invalid")
    |> validate_length(:email, min: 4, max: 40)
    |> validate_length(:name, min: 6, max: 40)
    |> validate_format(:name, ~r/^[a-zA-Z]+$/, message: "Name must only contain letters")
  end
  
def registration_changeset(struct, params \\ %{}) do
    struct
    |> changeset(params)
    |> cast(params, [:password, :password_confirmation])
    |> validate_required([:password, :password_confirmation], message: "Are required")
    |> validate_length(:password, min: 6, max: 100)
    |> validate_confirmation(:password, message: "Passwords must match")
    |> hash_password
end
1 Like