Merge branch 'develop' into issue/1411
authorMaksim Pechnikov <parallel588@gmail.com>
Thu, 5 Dec 2019 09:18:59 +0000 (12:18 +0300)
committerMaksim Pechnikov <parallel588@gmail.com>
Thu, 5 Dec 2019 09:18:59 +0000 (12:18 +0300)
1  2 
lib/pleroma/web/activity_pub/activity_pub.ex
test/web/activity_pub/activity_pub_test.exs

index 5c977826f50ae7680628b46fe55a3f133a718172,2677b9e36bbd48b1a700a2dc9f5811f997dc237a..8cfc4ba2d46ef4261add9cfd43f349f7dd99b906
@@@ -1571,35 -1574,63 +1574,95 @@@ defmodule Pleroma.Web.ActivityPub.Activ
      end
    end
  
 +  describe "fetch_favourites/3" do
 +    test "returns a favourite activities sorted by adds to favorite" do
 +      user = insert(:user)
 +      other_user = insert(:user)
 +      user1 = insert(:user)
 +      user2 = insert(:user)
 +      {:ok, a1} = CommonAPI.post(user1, %{"status" => "bla"})
 +      {:ok, _a2} = CommonAPI.post(user2, %{"status" => "traps are happy"})
 +      {:ok, a3} = CommonAPI.post(user2, %{"status" => "Trees Are "})
 +      {:ok, a4} = CommonAPI.post(user2, %{"status" => "Agent Smith "})
 +      {:ok, a5} = CommonAPI.post(user1, %{"status" => "Red or Blue "})
 +
 +      {:ok, _, _} = CommonAPI.favorite(a4.id, user)
 +      {:ok, _, _} = CommonAPI.favorite(a3.id, other_user)
 +      Process.sleep(1000)
 +      {:ok, _, _} = CommonAPI.favorite(a3.id, user)
 +      {:ok, _, _} = CommonAPI.favorite(a5.id, other_user)
 +      Process.sleep(1000)
 +      {:ok, _, _} = CommonAPI.favorite(a5.id, user)
 +      {:ok, _, _} = CommonAPI.favorite(a4.id, other_user)
 +      Process.sleep(1000)
 +      {:ok, _, _} = CommonAPI.favorite(a1.id, user)
 +      {:ok, _, _} = CommonAPI.favorite(a1.id, other_user)
 +      result = ActivityPub.fetch_favourites(user)
 +
 +      assert Enum.map(result, & &1.id) == [a1.id, a5.id, a3.id, a4.id]
 +
 +      result = ActivityPub.fetch_favourites(user, %{"limit" => 2})
 +      assert Enum.map(result, & &1.id) == [a1.id, a5.id]
 +    end
 +  end
++
+   describe "Move activity" do
+     test "create" do
+       %{ap_id: old_ap_id} = old_user = insert(:user)
+       %{ap_id: new_ap_id} = new_user = insert(:user, also_known_as: [old_ap_id])
+       follower = insert(:user)
+       follower_move_opted_out = insert(:user, allow_following_move: false)
+       User.follow(follower, old_user)
+       User.follow(follower_move_opted_out, old_user)
+       assert User.following?(follower, old_user)
+       assert User.following?(follower_move_opted_out, old_user)
+       assert {:ok, activity} = ActivityPub.move(old_user, new_user)
+       assert %Activity{
+                actor: ^old_ap_id,
+                data: %{
+                  "actor" => ^old_ap_id,
+                  "object" => ^old_ap_id,
+                  "target" => ^new_ap_id,
+                  "type" => "Move"
+                },
+                local: true
+              } = activity
+       params = %{
+         "op" => "move_following",
+         "origin_id" => old_user.id,
+         "target_id" => new_user.id
+       }
+       assert_enqueued(worker: Pleroma.Workers.BackgroundWorker, args: params)
+       Pleroma.Workers.BackgroundWorker.perform(params, nil)
+       refute User.following?(follower, old_user)
+       assert User.following?(follower, new_user)
+       assert User.following?(follower_move_opted_out, old_user)
+       refute User.following?(follower_move_opted_out, new_user)
+       activity = %Activity{activity | object: nil}
+       assert [%Notification{activity: ^activity}] =
+                Notification.for_user_since(follower, ~N[2019-04-13 11:22:33])
+       assert [%Notification{activity: ^activity}] =
+                Notification.for_user_since(follower_move_opted_out, ~N[2019-04-13 11:22:33])
+     end
+     test "old user must be in the new user's `also_known_as` list" do
+       old_user = insert(:user)
+       new_user = insert(:user)
+       assert {:error, "Target account must have the origin in `alsoKnownAs`"} =
+                ActivityPub.move(old_user, new_user)
+     end
+   end
  end