Hello guys, I’m learning about testing, however I haven’t been able to write a test for a unique constraint, I’ve already defined it in my model
def changeset(struct, params \\ %{}) do
...
|> unique_constraint(:email, message: "Email is already taken")
end
And my actual test is:
test "email has been taken" do
user = User.changeset(%User{}, @valid_attrs)
Repo.insert(user)
imposter = User.changeset(%User{}, @valid_attrs)
assert {:error, changeset} = Repo.insert(imposter)
assert {:email, "Email is already taken"} in errors_on(%User{}, changeset)
end
However, I get failed test saying
** (Ecto.CastError) expected params to be a map, got:
#Ecto.Changeset<action: :insert, changes: %{email: "user@stories.com", name: "Jon Doe", password: "safepassword", password_confirmation: "safepassword", password_hash: "$2b$12$qkYBGNiNG9D5Z2Sfv8TSEu6IqTxf7Nylxk471z.KpK7ex3Y37kFV6"}, errors: [email: {"Email is already taken", []}], data: #StoryTime.User<>, valid?: false>
And for my @valid_attrs
:
@valid_attrs %{email: "user@stories.com", name: "Jon Doe", password: "safepassword", password_confirmation: "safepassword"}
I don’t understand what map is it talking about.
Thanks for your time and help.