Add the validation for Book's page count to be greater than 0.
continuous-integration/drone/push Build is passing Details

dev
KKlochko 3 months ago
parent 730b2b6927
commit 68169cc78b

@ -302,6 +302,10 @@ defmodule DecentralisedBookIndex.Metadata.Book do
end end
end end
validations do
validate numericality(:page_count, greater_than: 0)
end
relationships do relationships do
belongs_to :dbi_server, Metadata.DBIServer belongs_to :dbi_server, Metadata.DBIServer

@ -1,7 +1,10 @@
defmodule DecentralisedBookIndex.Metadata.Forms.BookFormTest do defmodule DecentralisedBookIndex.Metadata.Forms.BookFormTest do
use DecentralisedBookIndex.DataCase, async: true use DecentralisedBookIndex.DataCase, async: true
import ExUnitProperties
alias DecentralisedBookIndex.Metadata alias DecentralisedBookIndex.Metadata
alias DecentralisedBookIndex.Metadata.Book
describe "create new book via the form" do describe "create new book via the form" do
test "just name and description" do test "just name and description" do
@ -69,4 +72,52 @@ defmodule DecentralisedBookIndex.Metadata.Forms.BookFormTest do
assert {:ok, user} = AshPhoenix.Form.submit(form, params: valid_params) assert {:ok, user} = AshPhoenix.Form.submit(form, params: valid_params)
end end
end end
describe "validation" do
property "the book form is valid if the page count > 0" do
user = generate(user())
book = generate(book())
valid_count_generator =
StreamData.integer()
|> StreamData.map(fn n -> abs(n)+1 end)
check all(page_count <- valid_count_generator) do
valid_params = %{
"page_count" => page_count,
}
form =
AshPhoenix.Form.for_update(book, :update,
as: "book",
actor: user
)
assert {:ok, _book} = AshPhoenix.Form.submit(form, params: valid_params)
end
end
property "the book form is invalid if the page count <= 0" do
user = generate(user())
book = generate(book())
invalid_count_generator =
StreamData.integer()
|> StreamData.map(fn n -> -abs(n) end)
check all(page_count <- invalid_count_generator) do
invalid_params = %{
"page_count" => page_count,
}
form =
AshPhoenix.Form.for_update(book, :update,
as: "book",
actor: user
)
assert {:error, _error} = AshPhoenix.Form.submit(form, params: invalid_params)
end
end
end
end end

@ -189,7 +189,7 @@ defmodule DecentralisedBookIndex.Generators do
description: sequence(:description, &"Description #{&1}"), description: sequence(:description, &"Description #{&1}"),
language: sequence(:language, &"Language #{&1}"), language: sequence(:language, &"Language #{&1}"),
format: sequence(:format, &"Format #{&1}"), format: sequence(:format, &"Format #{&1}"),
page_count: sequence(:page_count, & &1), page_count: sequence(:page_count, &(abs(&1)+1)),
published: sequence(:published, &Date.add(~D[2025-03-04], &1)), published: sequence(:published, &Date.add(~D[2025-03-04], &1)),
bids: bids, bids: bids,
author_roles: author_roles, author_roles: author_roles,

Loading…
Cancel
Save