diff --git a/lib/pleroma/web/activity_pub/object_validators/tag_validator.ex b/lib/pleroma/web/activity_pub/object_validators/tag_validator.ex index dd1bc53ed..e7a7c1fc2 100644 --- a/lib/pleroma/web/activity_pub/object_validators/tag_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/tag_validator.ex @@ -68,51 +68,10 @@ def changeset(struct, %{"type" => "Emoji"} = data) do |> validate_required([:type, :name, :icon]) end - def changeset(struct, %{"type" => "Book"} = data) do - data = - if Map.has_key?(data, "title") do - Map.put(data, "name", data["title"]) - else - data - end - + def changeset(struct, %{"type" => _} = data) do struct - |> cast(data, [:type, :name]) - |> validate_required([:type, :name]) - end - - def changeset(struct, %{"type" => "Edition"} = data) do - # Sometimes it's title, sometimes name - # Don't ask me. - data = - if Map.has_key?(data, "title") do - Map.put(data, "name", data["title"]) - else - data - end - - struct - |> cast(data, [:type, :name]) - |> validate_required([:type, :name]) - end - - def changeset(struct, %{"type" => "Work"} = data) do - data = - if Map.has_key?(data, "title") do - Map.put(data, "name", data["title"]) - else - data - end - - struct - |> cast(data, [:type, :name]) - |> validate_required([:type, :name]) - end - - def changeset(struct, %{"type" => "Author"} = data) do - struct - |> cast(data, [:type, :name]) - |> validate_required([:type, :name]) + |> cast(data, []) + |> Map.put(:action, :ignore) end def icon_changeset(struct, data) do diff --git a/test/fixtures/bookwyrm-article.json b/test/fixtures/bookwyrm-article.json index 66b34b688..d0f520ec3 100644 --- a/test/fixtures/bookwyrm-article.json +++ b/test/fixtures/bookwyrm-article.json @@ -26,7 +26,7 @@ "type": "OrderedCollection" }, "sensitive": false, - "tag": [], + "tag": [{"type": "Edition"}], "to": [ "https://www.w3.org/ns/activitystreams#Public" ], diff --git a/test/pleroma/web/activity_pub/object_validators/tag_validator_test.exs b/test/pleroma/web/activity_pub/object_validators/tag_validator_test.exs index bca7a32b9..443dd308d 100644 --- a/test/pleroma/web/activity_pub/object_validators/tag_validator_test.exs +++ b/test/pleroma/web/activity_pub/object_validators/tag_validator_test.exs @@ -7,106 +7,13 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.TagValidatorTest do alias Pleroma.Web.ActivityPub.ObjectValidators.TagValidator - test "it validates an Edition" do + test "it doesn't error on unusual objects" do edition = %{ "@context" => "https://www.w3.org/ns/activitystreams", - "asin" => "", - "authors" => ["https://bookwyrm.com/author/3"], - "cover" => %{ - "@context" => "https://www.w3.org/ns/activitystreams", - "name" => "Piranesi (2020, Bloomsbury Publishing)", - "type" => "Document", - "url" => "https://bookwyrm.com/images/covers/9fd28af7-ebb8-4df3-80c8-28488fc5349f.jpeg" - }, - "description" => "", - "editionRank" => 7, - "firstPublishedDate" => "", - "goodreadsKey" => "", - "id" => "https://bookwyrm.com/book/10", - "isbn10" => "163557563X", - "isbn13" => "9781635575637", - "languages" => ["English"], - "librarythingKey" => "", - "oclcNumber" => "", - "openlibraryKey" => "OL28300471M", - "pages" => 272, - "physicalFormat" => "", - "physicalFormatDetail" => "hardcover", - "publishedDate" => "2020-09-15T00:00:00+00:00", - "publishers" => ["Bloomsbury Publishing"], - "series" => "", - "seriesNumber" => "", - "sortTitle" => "", - "subjectPlaces" => [], - "subjects" => [], - "subtitle" => "", - "title" => "Piranesi", "type" => "Edition", "work" => "https://bookwyrm.com/book/9" } - assert %{valid?: true, changes: %{name: "Piranesi"}} = TagValidator.cast_and_validate(edition) - end - - test "it should validate an author" do - author = %{ - "@context" => "https://www.w3.org/ns/activitystreams", - "aliases" => [], - "bio" => "snipped", - "bnfId" => "14603397h", - "born" => "1959-11-01T00:00:00+00:00", - "goodreadsKey" => "", - "id" => "https://bookwyrm.com/author/3", - "isni" => "0000 0001 0877 1086", - "librarythingKey" => "", - "name" => "Susanna Clarke", - "openlibraryKey" => "OL1387961A", - "type" => "Author", - "viafId" => "19931023", - "wikipediaLink" => "" - } - - assert %{valid?: true, changes: %{name: "Susanna Clarke"}} = - TagValidator.cast_and_validate(author) - end - - test "it should validate a work" do - work = %{ - "@context" => "https://www.w3.org/ns/activitystreams", - "authors" => ["https://bookwyrm.com/author/3"], - "cover" => %{ - "@context" => "https://www.w3.org/ns/activitystreams", - "name" => "Piranesi", - "type" => "Document", - "url" => "https://bookwyrm.com/images/covers/e950ac10-feaf-4c3e-b2d3-de20d3a28329.jpeg" - }, - "description" => "snipped", - "editions" => [ - "https://bookwyrm.com/book/12", - "https://bookwyrm.com/book/10", - "https://bookwyrm.com/book/14", - "https://bookwyrm.com/book/13", - "https://bookwyrm.com/book/11", - "https://bookwyrm.com/book/15" - ], - "firstPublishedDate" => "", - "goodreadsKey" => "", - "id" => "https://bookwyrm.com/book/9", - "languages" => [], - "lccn" => "", - "librarythingKey" => "", - "openlibraryKey" => "OL20893680W", - "publishedDate" => "", - "series" => "", - "seriesNumber" => "", - "sortTitle" => "", - "subjectPlaces" => [], - "subjects" => ["English literature"], - "subtitle" => "", - "title" => "Piranesi", - "type" => "Work" - } - - assert %{valid?: true, changes: %{name: "Piranesi"}} = TagValidator.cast_and_validate(work) + assert %{valid?: true, action: :ignore} = TagValidator.cast_and_validate(edition) end end