X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=test%2Fweb%2Factivity_pub%2Ftransmogrifier_test.exs;h=caad9737a556ad8f4ffecf8032624d94f77c1d27;hb=e3a81fe58f42935c6116ccc59c73ae41e99ecaae;hp=11c6bbe1c57f7781cee03cffe2f1df45baca735f;hpb=297a2c7d3f2f4e79d05ed799e7bb20ed27b35a9c;p=akkoma diff --git a/test/web/activity_pub/transmogrifier_test.exs b/test/web/activity_pub/transmogrifier_test.exs index 11c6bbe1c..caad9737a 100644 --- a/test/web/activity_pub/transmogrifier_test.exs +++ b/test/web/activity_pub/transmogrifier_test.exs @@ -1,9 +1,12 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do use Pleroma.DataCase alias Pleroma.Web.ActivityPub.Transmogrifier + alias Pleroma.Web.OStatus alias Pleroma.Activity alias Pleroma.User alias Pleroma.Repo + alias Pleroma.Web.Websub.WebsubClientSubscription + alias Pleroma.Web.Websub.WebsubServerSubscription import Ecto.Query import Pleroma.Factory @@ -22,6 +25,23 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do assert activity == returned_activity end + test "it fetches replied-to activities if we don't have them" do + data = File.read!("test/fixtures/mastodon-post-activity.json") + |> Poison.decode! + + object = data["object"] + |> Map.put("inReplyTo", "https://shitposter.club/notice/2827873") + + data = data + |> Map.put("object", object) + + {:ok, returned_activity} = Transmogrifier.handle_incoming(data) + + assert activity = Activity.get_create_activity_by_object_ap_id("tag:shitposter.club,2017-05-05:noticeId=2827873:objectType=comment") + assert returned_activity.data["object"]["inReplyToAtomUri"] == "https://shitposter.club/notice/2827873" + assert returned_activity.data["object"]["inReplyToStatusId"] == activity.id + end + test "it works for incoming notices" do data = File.read!("test/fixtures/mastodon-post-activity.json") |> Poison.decode! @@ -107,6 +127,45 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do assert Activity.get_create_activity_by_object_ap_id(data["object"]).id == activity.id 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) + + 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.info["banner"]["url"] == [%{"href" => "https://cd.niu.moe/accounts/headers/000/033/323/original/850b3448fa5fd477.png"}] + assert user.bio == "
Some bio
" + end + + test "it works for incoming deletes" do + activity = insert(:note_activity) + data = File.read!("test/fixtures/mastodon-delete.json") + |> Poison.decode! + + object = data["object"] + |> Map.put("id", activity.data["object"]["id"]) + + data = data + |> Map.put("object", object) + |> Map.put("actor", activity.data["actor"]) + + {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) + + refute Repo.get(Activity, activity.id) + end end describe "prepare outgoing" do @@ -162,5 +221,82 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do assert modified["object"]["actor"] == modified["object"]["attributedTo"] end + + test "it translates ostatus IDs to external URLs" do + incoming = File.read!("test/fixtures/incoming_note_activity.xml") + {:ok, [referent_activity]} = OStatus.handle_incoming(incoming) + + user = insert(:user) + + {:ok, activity, _} = CommonAPI.favorite(referent_activity.id, user) + {:ok, modified} = Transmogrifier.prepare_outgoing(activity.data) + + assert modified["object"] == "http://gs.example.org:4040/index.php/notice/29" + end + + test "it translates ostatus reply_to IDs to external URLs" do + incoming = File.read!("test/fixtures/incoming_note_activity.xml") + {:ok, [referred_activity]} = OStatus.handle_incoming(incoming) + + user = insert(:user) + + {:ok, activity} = CommonAPI.post(user, %{"status" => "HI!", "in_reply_to_status_id" => referred_activity.id}) + {:ok, modified} = Transmogrifier.prepare_outgoing(activity.data) + + assert modified["object"]["inReplyTo"] == "http://gs.example.org:4040/index.php/notice/29" + end + end + + describe "user upgrade" do + test "it upgrades a user to activitypub" do + user = insert(:user, %{nickname: "rye@niu.moe", local: false, ap_id: "https://niu.moe/users/rye", follower_address: User.ap_followers(%User{nickname: "rye@niu.moe"})}) + user_two = insert(:user, %{following: [user.follower_address]}) + + {:ok, activity} = CommonAPI.post(user, %{"status" => "test"}) + {:ok, unrelated_activity} = CommonAPI.post(user_two, %{"status" => "test"}) + assert "http://localhost:4001/users/rye@niu.moe/followers" in activity.recipients + + user = Repo.get(User, user.id) + assert user.info["note_count"] == 1 + + {:ok, user} = Transmogrifier.upgrade_user_from_ap_id("https://niu.moe/users/rye") + assert user.info["ap_enabled"] + assert user.info["note_count"] == 1 + assert user.follower_address == "https://niu.moe/users/rye/followers" + + # Wait for the background task + :timer.sleep(1000) + + user = Repo.get(User, user.id) + assert user.info["note_count"] == 1 + + activity = Repo.get(Activity, activity.id) + assert user.follower_address in activity.recipients + assert %{"url" => [%{"href" => "https://cdn.niu.moe/accounts/avatars/000/033/323/original/fd7f8ae0b3ffedc9.jpeg"}]} = user.avatar + assert %{"url" => [%{"href" => "https://cdn.niu.moe/accounts/headers/000/033/323/original/850b3448fa5fd477.png"}]} = user.info["banner"] + refute "..." in activity.recipients + + unrelated_activity = Repo.get(Activity, unrelated_activity.id) + refute user.follower_address in unrelated_activity.recipients + + user_two = Repo.get(User, user_two.id) + assert user.follower_address in user_two.following + refute "..." in user_two.following + end + end + + describe "maybe_retire_websub" do + test "it deletes all websub client subscripitions with the user as topic" do + subscription = %WebsubClientSubscription{topic: "https://niu.moe/users/rye.atom"} + {:ok, ws} = Repo.insert(subscription) + + subscription = %WebsubClientSubscription{topic: "https://niu.moe/users/pasty.atom"} + {:ok, ws2} = Repo.insert(subscription) + + Transmogrifier.maybe_retire_websub("https://niu.moe/users/rye") + + refute Repo.get(WebsubClientSubscription, ws.id) + assert Repo.get(WebsubClientSubscription, ws2.id) + end end end