From 8dc4a80e318a29734ee0182c2b45a382490c5fae Mon Sep 17 00:00:00 2001 From: KKlochko Date: Tue, 15 Apr 2025 10:09:20 +0300 Subject: [PATCH] Update Author resource and test for the form. --- .../metadata/author.ex | 8 +-- .../metadata/forms/author_form_test.exs | 50 ++++++++++++++++--- 2 files changed, 48 insertions(+), 10 deletions(-) diff --git a/lib/decentralised_book_index/metadata/author.ex b/lib/decentralised_book_index/metadata/author.ex index 6011aa0..f58c47d 100644 --- a/lib/decentralised_book_index/metadata/author.ex +++ b/lib/decentralised_book_index/metadata/author.ex @@ -31,8 +31,8 @@ defmodule DecentralisedBookIndex.Metadata.Author do registry_id = Ash.Changeset.get_attribute(changeset, :author_alias_registry_id) if registry_id == nil do - {:ok, registry} = - DecentralisedBookIndex.Metadata.create_author_alias_registry(actor: actor) + registry = + DecentralisedBookIndex.Metadata.create_author_alias_registry!(actor: actor) Ash.Changeset.force_change_attribute(changeset, :author_alias_registry_id, registry.id) else @@ -54,8 +54,8 @@ defmodule DecentralisedBookIndex.Metadata.Author do if related_author_id == nil do Ash.Changeset.add_error(changeset, :related_author_id, "Related author is empty") else - {:ok, related_author} = - DecentralisedBookIndex.Metadata.get_author_by_id(related_author_id) + related_author = + DecentralisedBookIndex.Metadata.get_author_by_id!(related_author_id) Ash.Changeset.force_change_attribute( changeset, diff --git a/test/decentralised_book_index/metadata/forms/author_form_test.exs b/test/decentralised_book_index/metadata/forms/author_form_test.exs index 07e0065..8e7ca47 100644 --- a/test/decentralised_book_index/metadata/forms/author_form_test.exs +++ b/test/decentralised_book_index/metadata/forms/author_form_test.exs @@ -3,27 +3,65 @@ defmodule DecentralisedBookIndex.Metadata.Forms.AuthorFormTest do alias DecentralisedBookIndex.Metadata - describe "create new author via the form" do - test "just name and description" do + 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" => "Oleh", "description" => "A cool author", } + + assert_raise Ash.Error.Forbidden, fn -> form = \ AshPhoenix.Form.for_create(Metadata.Author, :create, as: "author", actor: user ) + |> AshPhoenix.Form.ensure_can_submit!() + end + end + + test "moderator can submit", %{user: user} do + valid_params = %{ + "name" => "Oleh", + "description" => "A cool author", + } - assert {:ok, user} = AshPhoenix.Form.submit(form, params: valid_params) + assert form = + AshPhoenix.Form.for_create(Metadata.Author, :create, + as: "author", + actor: user + ) + |> AshPhoenix.Form.ensure_can_submit!() + end + end + + describe "create new author via the form" do + test "just name and description", %{user: user} do + valid_params = %{ + "name" => "Oleh", + "description" => "A cool author", + } + + form = + AshPhoenix.Form.for_create(Metadata.Author, :create, + as: "author", + actor: user + ) + + assert {:ok, author} = AshPhoenix.Form.submit(form, params: valid_params) end end describe "update existing author via the form" do - test "update author's name" do - user = generate(user()) + test "update author's name", %{user: user} do author = generate(author()) valid_params = %{ @@ -37,7 +75,7 @@ defmodule DecentralisedBookIndex.Metadata.Forms.AuthorFormTest do actor: user ) - assert {:ok, user} = AshPhoenix.Form.submit(form, params: valid_params) + assert {:ok, author} = AshPhoenix.Form.submit(form, params: valid_params) end end end