I am trying to show the error message and test the unique index
I create the index on the produtcs table:
create unique_index(:products, [:name])
on the schema I put:
|> unique_constraint(:name, name: :products_name_index)
also used:
|> unique_constraint(:name)
but it isn’t showing the error on the liveview and tests.
When I try to add by iex:
Products.create_product(prod)
2022-06-25 02:08:30.181 CEST [38686] ERROR: duplicate key value violates unique constraint "products_name_index"
2022-06-25 02:08:30.181 CEST [38686] DETAIL: Key (name)=(water) already exists.
2022-06-25 02:08:30.181 CEST [38686] STATEMENT: INSERT INTO "products" ("description","name","price","size","inserted_at","updated_at","id") VALUES ($1,$2,$3,$4,$5,$6,$7)
[debug] QUERY ERROR db=2.0ms queue=2.1ms idle=1179.5ms
INSERT INTO "products" ("description","name","price","size","inserted_at","updated_at","id") VALUES ($1,$2,$3,$4,$5,$6,$7) ["water 1l", "water", 5, "small", ~N[2022-06-25 00:08:30], ~N[2022-06-25 00:08:30], <<38, 38, 232, 141, 234, 198, 71, 215, 176, 145, 70, 194, 33, 70, 125, 209>>]
↳ :erl_eval.do_apply/6, at: erl_eval.erl:685
{:error,
#Ecto.Changeset<
action: :insert,
changes: %{
description: "water 1l",
name: "water",
price: %Money{amount: 5, currency: :BRL},
size: "small"
},
errors: [
name: {"has already been taken",
[constraint: :unique, constraint_name: "products_name_index"]}
],
data: #FoodOrder.Products.Product<>,
valid?: false
>}
It works but it is not showing on the liveview error_tag and when I test.
The others validation is showing like the can’t be blank.
What do I need to do?