diff options
author | Tusooa Zhu <tusooa@kazv.moe> | 2022-07-03 20:19:50 -0400 |
---|---|---|
committer | Tusooa Zhu <tusooa@kazv.moe> | 2022-07-03 20:21:46 -0400 |
commit | 5ce118d970d3d7a2a5dd0a3719feb1d53be6b5ae (patch) | |
tree | bda2f700dc91d2a40f552a546b2c02d0e83550ba /test | |
parent | 4367489a3e8eb8682d717014eea9092d7679c070 (diff) | |
download | pleroma-5ce118d970d3d7a2a5dd0a3719feb1d53be6b5ae.tar.gz pleroma-5ce118d970d3d7a2a5dd0a3719feb1d53be6b5ae.zip |
Validate object data for incoming Update activities
In Create validator we do not validate the object data,
but that is because the object itself will go through the
pipeline again, which is not the case for Update. Thus,
we added validation for objects in Update activities.
Diffstat (limited to 'test')
-rw-r--r-- | test/pleroma/web/activity_pub/object_validators/update_handling_test.exs | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/test/pleroma/web/activity_pub/object_validators/update_handling_test.exs b/test/pleroma/web/activity_pub/object_validators/update_handling_test.exs index 198c35cd3..a09dbf5c6 100644 --- a/test/pleroma/web/activity_pub/object_validators/update_handling_test.exs +++ b/test/pleroma/web/activity_pub/object_validators/update_handling_test.exs @@ -127,4 +127,42 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.UpdateHandlingTest do assert meta[:object_data] end end + + describe "update with history" do + setup do + user = insert(:user) + {:ok, activity} = Pleroma.Web.CommonAPI.post(user, %{status: "mew mew :dinosaur:"}) + {:ok, edit} = Pleroma.Web.CommonAPI.update(user, activity, %{status: "edited :blank:"}) + {:ok, external_rep} = Pleroma.Web.ActivityPub.Transmogrifier.prepare_outgoing(edit.data) + %{external_rep: external_rep} + end + + test "edited note", %{external_rep: external_rep} do + {:ok, _validate_res, meta} = ObjectValidator.validate(external_rep, []) + + assert %{"formerRepresentations" => %{"orderedItems" => [%{"emoji" => %{"dinosaur" => _}}]}} = + meta[:object_data] + end + + test "edited note, badly-formed formerRepresentations", %{external_rep: external_rep} do + external_rep = put_in(external_rep, ["object", "formerRepresentations"], %{}) + + assert {:error, _} = ObjectValidator.validate(external_rep, []) + end + + test "edited note, badly-formed history item", %{external_rep: external_rep} do + history_item = + Enum.at(external_rep["object"]["formerRepresentations"]["orderedItems"], 0) + |> Map.put("type", "Foo") + + external_rep = + put_in( + external_rep, + ["object", "formerRepresentations", "orderedItems"], + [history_item] + ) + + assert {:error, _} = ObjectValidator.validate(external_rep, []) + end + end end |