e771260c94c293ef72c4d0f7b3f0236ecc79503d
[anni] / test / pleroma / web / activity_pub / object_validators / create_generic_validator_test.exs
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Web.ActivityPub.ObjectValidators.CreateGenericValidatorTest do
6   use Pleroma.DataCase, async: true
7
8   alias Pleroma.Web.ActivityPub.ObjectValidator
9   alias Pleroma.Web.ActivityPub.ObjectValidators.CreateGenericValidator
10   alias Pleroma.Web.ActivityPub.Utils
11
12   import Pleroma.Factory
13
14   test "a Create/Note from Roadhouse validates" do
15     insert(:user, ap_id: "https://macgirvin.com/channel/mike")
16
17     note_activity =
18       "test/fixtures/roadhouse-create-activity.json"
19       |> File.read!()
20       |> Jason.decode!()
21
22     # Build metadata
23     {:ok, object_data} = ObjectValidator.cast_and_apply(note_activity["object"])
24     meta = [object_data: ObjectValidator.stringify_keys(object_data)]
25
26     assert %{valid?: true} = CreateGenericValidator.cast_and_validate(note_activity, meta)
27   end
28
29   test "a Create/Note with mismatched context uses the Note's context" do
30     user = insert(:user)
31
32     note = %{
33       "id" => Utils.generate_object_id(),
34       "type" => "Note",
35       "actor" => user.ap_id,
36       "to" => [user.follower_address],
37       "cc" => [],
38       "content" => "Hello world",
39       "context" => Utils.generate_context_id()
40     }
41
42     note_activity = %{
43       "id" => Utils.generate_activity_id(),
44       "type" => "Create",
45       "actor" => note["actor"],
46       "to" => note["to"],
47       "cc" => note["cc"],
48       "object" => note,
49       "published" => DateTime.utc_now() |> DateTime.to_iso8601(),
50       "context" => Utils.generate_context_id()
51     }
52
53     # Build metadata
54     {:ok, object_data} = ObjectValidator.cast_and_apply(note_activity["object"])
55     meta = [object_data: ObjectValidator.stringify_keys(object_data)]
56
57     validated = CreateGenericValidator.cast_and_validate(note_activity, meta)
58
59     assert validated.valid?
60     assert {:context, note["context"]} in validated.changes
61   end
62 end