diff --git a/test/decentralised_book_index/metadata/forms/publisher_form_test.exs b/test/decentralised_book_index/metadata/forms/publisher_form_test.exs new file mode 100644 index 0000000..9d41903 --- /dev/null +++ b/test/decentralised_book_index/metadata/forms/publisher_form_test.exs @@ -0,0 +1,78 @@ +defmodule DecentralisedBookIndex.Metadata.Forms.PublisherFormTest do + use DecentralisedBookIndex.DataCase, async: true + + alias DecentralisedBookIndex.Metadata + + setup do + user = generate(user(role: :moderator)) + %{user: user} + end + + describe "form submiting" do + test "user can't submit" do + user = generate(user()) + + valid_params = %{ + "name" => "Publisher" + } + + assert_raise Ash.Error.Forbidden, fn -> + form = + AshPhoenix.Form.for_create(Metadata.Publisher, :create, + as: "publisher", + actor: user + ) + |> AshPhoenix.Form.ensure_can_submit!() + end + end + + test "moderator can submit", %{user: user} do + valid_params = %{ + "name" => "Publisher" + } + + assert form = + AshPhoenix.Form.for_create(Metadata.Publisher, :create, + as: "publisher", + actor: user + ) + |> AshPhoenix.Form.ensure_can_submit!() + end + end + + describe "create new publisher via the form" do + test "just name and description", %{user: user} do + valid_params = %{ + "name" => "Publisher" + } + + form = + AshPhoenix.Form.for_create(Metadata.Publisher, :create, + as: "publisher", + actor: user + ) + + assert {:ok, publisher} = AshPhoenix.Form.submit(form, params: valid_params) + assert publisher.name == valid_params["name"] + end + end + + describe "update existing publisher via the form" do + test "update publisher's name", %{user: user} do + publisher = generate(publisher()) + + valid_params = %{ + "name" => "Another Publisher" + } + + form = + AshPhoenix.Form.for_update(publisher, :update, + as: "publisher", + actor: user + ) + + assert {:ok, publisher} = AshPhoenix.Form.submit(form, params: valid_params) + assert publisher.name == valid_params["name"] + end + end +end