diff options
| -rw-r--r-- | test/web/activity_pub/transmogrifier/user_update_handling_test.exs | 154 | ||||
| -rw-r--r-- | test/web/activity_pub/transmogrifier_test.exs | 156 | 
2 files changed, 154 insertions, 156 deletions
| diff --git a/test/web/activity_pub/transmogrifier/user_update_handling_test.exs b/test/web/activity_pub/transmogrifier/user_update_handling_test.exs new file mode 100644 index 000000000..8e5d3b883 --- /dev/null +++ b/test/web/activity_pub/transmogrifier/user_update_handling_test.exs @@ -0,0 +1,154 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ActivityPub.Transmogrifier.UserUpdateHandlingTest do +  use Pleroma.DataCase + +  alias Pleroma.Activity +  alias Pleroma.User +  alias Pleroma.Web.ActivityPub.Transmogrifier + +  import Pleroma.Factory + +  test "it works for incoming update activities" do +    user = insert(:user, local: false) + +    update_data = File.read!("test/fixtures/mastodon-update.json") |> Poison.decode!() + +    object = +      update_data["object"] +      |> Map.put("actor", user.ap_id) +      |> Map.put("id", user.ap_id) + +    update_data = +      update_data +      |> Map.put("actor", user.ap_id) +      |> Map.put("object", object) + +    {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(update_data) + +    assert data["id"] == update_data["id"] + +    user = User.get_cached_by_ap_id(data["actor"]) +    assert user.name == "gargle" + +    assert user.avatar["url"] == [ +             %{ +               "href" => +                 "https://cd.niu.moe/accounts/avatars/000/033/323/original/fd7f8ae0b3ffedc9.jpeg" +             } +           ] + +    assert user.banner["url"] == [ +             %{ +               "href" => +                 "https://cd.niu.moe/accounts/headers/000/033/323/original/850b3448fa5fd477.png" +             } +           ] + +    assert user.bio == "<p>Some bio</p>" +  end + +  test "it works with alsoKnownAs" do +    %{ap_id: actor} = insert(:user, local: false) + +    assert User.get_cached_by_ap_id(actor).also_known_as == [] + +    {:ok, _activity} = +      "test/fixtures/mastodon-update.json" +      |> File.read!() +      |> Poison.decode!() +      |> Map.put("actor", actor) +      |> Map.update!("object", fn object -> +        object +        |> Map.put("actor", actor) +        |> Map.put("id", actor) +        |> Map.put("alsoKnownAs", [ +          "http://mastodon.example.org/users/foo", +          "http://example.org/users/bar" +        ]) +      end) +      |> Transmogrifier.handle_incoming() + +    assert User.get_cached_by_ap_id(actor).also_known_as == [ +             "http://mastodon.example.org/users/foo", +             "http://example.org/users/bar" +           ] +  end + +  test "it works with custom profile fields" do +    user = insert(:user, local: false) + +    assert user.fields == [] + +    update_data = File.read!("test/fixtures/mastodon-update.json") |> Poison.decode!() + +    object = +      update_data["object"] +      |> Map.put("actor", user.ap_id) +      |> Map.put("id", user.ap_id) + +    update_data = +      update_data +      |> Map.put("actor", user.ap_id) +      |> Map.put("object", object) + +    {:ok, _update_activity} = Transmogrifier.handle_incoming(update_data) + +    user = User.get_cached_by_ap_id(user.ap_id) + +    assert user.fields == [ +             %{"name" => "foo", "value" => "updated"}, +             %{"name" => "foo1", "value" => "updated"} +           ] + +    Pleroma.Config.put([:instance, :max_remote_account_fields], 2) + +    update_data = +      put_in(update_data, ["object", "attachment"], [ +        %{"name" => "foo", "type" => "PropertyValue", "value" => "bar"}, +        %{"name" => "foo11", "type" => "PropertyValue", "value" => "bar11"}, +        %{"name" => "foo22", "type" => "PropertyValue", "value" => "bar22"} +      ]) + +    {:ok, _} = Transmogrifier.handle_incoming(update_data) + +    user = User.get_cached_by_ap_id(user.ap_id) + +    assert user.fields == [ +             %{"name" => "foo", "value" => "updated"}, +             %{"name" => "foo1", "value" => "updated"} +           ] + +    update_data = put_in(update_data, ["object", "attachment"], []) + +    {:ok, _} = Transmogrifier.handle_incoming(update_data) + +    user = User.get_cached_by_ap_id(user.ap_id) + +    assert user.fields == [] +  end + +  test "it works for incoming update activities which lock the account" do +    user = insert(:user, local: false) + +    update_data = File.read!("test/fixtures/mastodon-update.json") |> Poison.decode!() + +    object = +      update_data["object"] +      |> Map.put("actor", user.ap_id) +      |> Map.put("id", user.ap_id) +      |> Map.put("manuallyApprovesFollowers", true) + +    update_data = +      update_data +      |> Map.put("actor", user.ap_id) +      |> Map.put("object", object) + +    {:ok, %Activity{local: false}} = Transmogrifier.handle_incoming(update_data) + +    user = User.get_cached_by_ap_id(user.ap_id) +    assert user.locked == true +  end +end diff --git a/test/web/activity_pub/transmogrifier_test.exs b/test/web/activity_pub/transmogrifier_test.exs index 94d8552e8..b542bb7b8 100644 --- a/test/web/activity_pub/transmogrifier_test.exs +++ b/test/web/activity_pub/transmogrifier_test.exs @@ -401,162 +401,6 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do        refute Map.has_key?(object_data, "reaction_count")      end -    test "it works for incoming update activities" do -      data = File.read!("test/fixtures/mastodon-post-activity.json") |> Poison.decode!() - -      {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) -      update_data = File.read!("test/fixtures/mastodon-update.json") |> Poison.decode!() - -      object = -        update_data["object"] -        |> Map.put("actor", data["actor"]) -        |> Map.put("id", data["actor"]) - -      update_data = -        update_data -        |> Map.put("actor", data["actor"]) -        |> Map.put("object", object) - -      {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(update_data) - -      assert data["id"] == update_data["id"] - -      user = User.get_cached_by_ap_id(data["actor"]) -      assert user.name == "gargle" - -      assert user.avatar["url"] == [ -               %{ -                 "href" => -                   "https://cd.niu.moe/accounts/avatars/000/033/323/original/fd7f8ae0b3ffedc9.jpeg" -               } -             ] - -      assert user.banner["url"] == [ -               %{ -                 "href" => -                   "https://cd.niu.moe/accounts/headers/000/033/323/original/850b3448fa5fd477.png" -               } -             ] - -      assert user.bio == "<p>Some bio</p>" -    end - -    test "it works with alsoKnownAs" do -      {:ok, %Activity{data: %{"actor" => actor}}} = -        "test/fixtures/mastodon-post-activity.json" -        |> File.read!() -        |> Poison.decode!() -        |> Transmogrifier.handle_incoming() - -      assert User.get_cached_by_ap_id(actor).also_known_as == ["http://example.org/users/foo"] - -      {:ok, _activity} = -        "test/fixtures/mastodon-update.json" -        |> File.read!() -        |> Poison.decode!() -        |> Map.put("actor", actor) -        |> Map.update!("object", fn object -> -          object -          |> Map.put("actor", actor) -          |> Map.put("id", actor) -          |> Map.put("alsoKnownAs", [ -            "http://mastodon.example.org/users/foo", -            "http://example.org/users/bar" -          ]) -        end) -        |> Transmogrifier.handle_incoming() - -      assert User.get_cached_by_ap_id(actor).also_known_as == [ -               "http://mastodon.example.org/users/foo", -               "http://example.org/users/bar" -             ] -    end - -    test "it works with custom profile fields" do -      {:ok, activity} = -        "test/fixtures/mastodon-post-activity.json" -        |> File.read!() -        |> Poison.decode!() -        |> Transmogrifier.handle_incoming() - -      user = User.get_cached_by_ap_id(activity.actor) - -      assert user.fields == [ -               %{"name" => "foo", "value" => "bar"}, -               %{"name" => "foo1", "value" => "bar1"} -             ] - -      update_data = File.read!("test/fixtures/mastodon-update.json") |> Poison.decode!() - -      object = -        update_data["object"] -        |> Map.put("actor", user.ap_id) -        |> Map.put("id", user.ap_id) - -      update_data = -        update_data -        |> Map.put("actor", user.ap_id) -        |> Map.put("object", object) - -      {:ok, _update_activity} = Transmogrifier.handle_incoming(update_data) - -      user = User.get_cached_by_ap_id(user.ap_id) - -      assert user.fields == [ -               %{"name" => "foo", "value" => "updated"}, -               %{"name" => "foo1", "value" => "updated"} -             ] - -      Pleroma.Config.put([:instance, :max_remote_account_fields], 2) - -      update_data = -        put_in(update_data, ["object", "attachment"], [ -          %{"name" => "foo", "type" => "PropertyValue", "value" => "bar"}, -          %{"name" => "foo11", "type" => "PropertyValue", "value" => "bar11"}, -          %{"name" => "foo22", "type" => "PropertyValue", "value" => "bar22"} -        ]) - -      {:ok, _} = Transmogrifier.handle_incoming(update_data) - -      user = User.get_cached_by_ap_id(user.ap_id) - -      assert user.fields == [ -               %{"name" => "foo", "value" => "updated"}, -               %{"name" => "foo1", "value" => "updated"} -             ] - -      update_data = put_in(update_data, ["object", "attachment"], []) - -      {:ok, _} = Transmogrifier.handle_incoming(update_data) - -      user = User.get_cached_by_ap_id(user.ap_id) - -      assert user.fields == [] -    end - -    test "it works for incoming update activities which lock the account" do -      data = File.read!("test/fixtures/mastodon-post-activity.json") |> Poison.decode!() - -      {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) -      update_data = File.read!("test/fixtures/mastodon-update.json") |> Poison.decode!() - -      object = -        update_data["object"] -        |> Map.put("actor", data["actor"]) -        |> Map.put("id", data["actor"]) -        |> Map.put("manuallyApprovesFollowers", true) - -      update_data = -        update_data -        |> Map.put("actor", data["actor"]) -        |> Map.put("object", object) - -      {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(update_data) - -      user = User.get_cached_by_ap_id(data["actor"]) -      assert user.locked == true -    end -      test "it works for incomming unfollows with an existing follow" do        user = insert(:user) | 
