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

This commit is contained in:
2025-04-02 13:38:02 +03:00
parent 730b2b6927
commit 68169cc78b
3 changed files with 56 additions and 1 deletions
@@ -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
+1 -1
View File
@@ -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,