add inbound language test
authorFloatingGhost <hannah@coffee-and-dreams.uk>
Wed, 11 Jan 2023 15:42:13 +0000 (15:42 +0000)
committerFloatingGhost <hannah@coffee-and-dreams.uk>
Wed, 11 Jan 2023 15:42:13 +0000 (15:42 +0000)
lib/pleroma/web/activity_pub/object_validators/article_note_page_validator.ex
test/fixtures/mastodon/note_with_language.json [new file with mode: 0644]
test/pleroma/iso639_test.exs [new file with mode: 0644]
test/pleroma/web/activity_pub/object_validators/article_note_page_validator_test.exs

index 056c48f868e370a5dc66a5aa1986c15d5f39899b..09b68c977f2c31c50e51d1dd7c398fdbccbc0640 100644 (file)
@@ -30,7 +30,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.ArticleNotePageValidator do
 
     field(:replies, {:array, ObjectValidators.ObjectID}, default: [])
     field(:source, :map)
-    field(:content_map, :map)
+    field(:contentMap, :map)
   end
 
   def cast_and_apply(data) do
@@ -155,6 +155,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.ArticleNotePageValidator do
       |> Enum.reject(fn {lang, _content} ->
         !Pleroma.ISO639.valid_alpha2?(lang)
       end)
+      |> Enum.into(%{})
 
     Map.put(object, "contentMap", content_map)
   end
diff --git a/test/fixtures/mastodon/note_with_language.json b/test/fixtures/mastodon/note_with_language.json
new file mode 100644 (file)
index 0000000..0426670
--- /dev/null
@@ -0,0 +1,38 @@
+{
+  "@context": [
+    "https://www.w3.org/ns/activitystreams",
+    {
+      "ostatus": "http://ostatus.org#",
+      "atomUri": "ostatus:atomUri",
+      "inReplyToAtomUri": "ostatus:inReplyToAtomUri",
+      "conversation": "ostatus:conversation",
+      "sensitive": "as:sensitive",
+      "toot": "http://joinmastodon.org/ns#",
+      "votersCount": "toot:votersCount"
+    }
+  ],
+  "id": "https://mastodon.social/users/akkoma_ap_integration_tester/statuses/109671288784583764",
+  "type": "Note",
+  "summary": null,
+  "inReplyTo": null,
+  "published": "2023-01-11T15:31:01Z",
+  "url": "https://mastodon.social/@akkoma_ap_integration_tester/109671288784583764",
+  "attributedTo": "https://mastodon.social/users/akkoma_ap_integration_tester",
+  "to": [
+    "https://www.w3.org/ns/activitystreams#Public"
+  ],
+  "cc": [
+    "https://mastodon.social/users/akkoma_ap_integration_tester/followers"
+  ],
+  "sensitive": false,
+  "atomUri": "https://mastodon.social/users/akkoma_ap_integration_tester/statuses/109671288784583764",
+  "inReplyToAtomUri": null,
+  "conversation": "tag:mastodon.social,2023-01-11:objectId=376794415:objectType=Conversation",
+  "content": "<p>tag</p>",
+  "contentMap": {
+    "ja": "<p>tag</p>"
+  },
+  "attachment": [],
+  "tag": [],
+  "replies": []
+}
diff --git a/test/pleroma/iso639_test.exs b/test/pleroma/iso639_test.exs
new file mode 100644 (file)
index 0000000..f05635b
--- /dev/null
@@ -0,0 +1,11 @@
+defmodule Pleroma.ISO639Test do
+  use Pleroma.DataCase
+
+  describe "ISO639 validation" do
+    test "should validate a language" do
+      assert Pleroma.ISO639.valid_alpha2?("en")
+      assert Pleroma.ISO639.valid_alpha2?("ja")
+      refute Pleroma.ISO639.valid_alpha2?("xx")
+    end
+  end
+end
index 5b95ebc51f61877867ad1b76bd3327a4e85b9897..ade2256c3475d428f42de0a09cd51df3c867b1f3 100644 (file)
@@ -39,6 +39,14 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.ArticleNotePageValidatorTest
       %{valid?: true} = ArticleNotePageValidator.cast_and_validate(note)
     end
 
+    test "a note with a language validates" do
+      user = insert(:user, %{ap_id: "https://mastodon.social/users/akkoma_ap_integration_tester"})
+      note = File.read!("test/fixtures/mastodon/note_with_language.json") |> Jason.decode!()
+      %{valid?: true, changes: %{ contentMap: %{
+        "ja" => "<p>tag</p>",
+      }}} = ArticleNotePageValidator.cast_and_validate(note)
+    end
+
     test "a note from factory validates" do
       note = insert(:note)
       %{valid?: true} = ArticleNotePageValidator.cast_and_validate(note.data)