aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkaniini <nenolod@gmail.com>2018-11-01 07:43:36 +0000
committerkaniini <nenolod@gmail.com>2018-11-01 07:43:36 +0000
commit68a14056437d2aae6cfd3de7107f93fddc1ef7d9 (patch)
treed332e481ccc08dc66930b27330a755cfea3f41d3
parent33587f5cb4650842798bea9fb3b407afc7179259 (diff)
parentf55fc68f766c71e81ce754408007e3b763f32e0f (diff)
downloadpleroma-68a14056437d2aae6cfd3de7107f93fddc1ef7d9.tar.gz
Merge branch 'refactor/object-cache-deletion' into 'develop'
refactor object cache deletion See merge request pleroma/pleroma!408
-rw-r--r--lib/pleroma/object.ex10
-rw-r--r--lib/pleroma/web/activity_pub/activity_pub.ex3
-rw-r--r--lib/pleroma/web/common_api/common_api.ex3
-rw-r--r--test/object_test.exs30
4 files changed, 41 insertions, 5 deletions
diff --git a/lib/pleroma/object.ex b/lib/pleroma/object.ex
index 1bcff5a7b..8f96fd8fb 100644
--- a/lib/pleroma/object.ex
+++ b/lib/pleroma/object.ex
@@ -1,6 +1,6 @@
defmodule Pleroma.Object do
use Ecto.Schema
- alias Pleroma.{Repo, Object}
+ alias Pleroma.{Repo, Object, Activity}
import Ecto.{Query, Changeset}
schema "objects" do
@@ -52,4 +52,12 @@ defmodule Pleroma.Object do
def context_mapping(context) do
Object.change(%Object{}, %{data: %{"id" => context}})
end
+
+ def delete(%Object{data: %{"id" => id}} = object) do
+ with Repo.delete(object),
+ Repo.delete_all(Activity.all_non_create_by_object_ap_id_q(id)),
+ {:ok, true} <- Cachex.del(:user_cache, "object:#{id}") do
+ :ok
+ end
+ end
end
diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex
index 5a81f6fa2..48ae36ebd 100644
--- a/lib/pleroma/web/activity_pub/activity_pub.ex
+++ b/lib/pleroma/web/activity_pub/activity_pub.ex
@@ -273,8 +273,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
"to" => [user.follower_address, "https://www.w3.org/ns/activitystreams#Public"]
}
- with Repo.delete(object),
- Repo.delete_all(Activity.all_non_create_by_object_ap_id_q(id)),
+ with Object.delete(object),
{:ok, activity} <- insert(data, local),
:ok <- maybe_federate(activity),
{:ok, _actor} <- User.decrease_note_count(user) do
diff --git a/lib/pleroma/web/common_api/common_api.ex b/lib/pleroma/web/common_api/common_api.ex
index 8607cb6b3..8f47bb127 100644
--- a/lib/pleroma/web/common_api/common_api.ex
+++ b/lib/pleroma/web/common_api/common_api.ex
@@ -9,8 +9,7 @@ defmodule Pleroma.Web.CommonAPI do
with %Activity{data: %{"object" => %{"id" => object_id}}} <- Repo.get(Activity, activity_id),
%Object{} = object <- Object.normalize(object_id),
true <- user.info["is_moderator"] || user.ap_id == object.data["actor"],
- {:ok, delete} <- ActivityPub.delete(object),
- {:ok, true} <- Cachex.del(:user_cache, "object:#{object_id}") do
+ {:ok, delete} <- ActivityPub.delete(object) do
{:ok, delete}
end
end
diff --git a/test/object_test.exs b/test/object_test.exs
index 5eb9b7530..3e398776c 100644
--- a/test/object_test.exs
+++ b/test/object_test.exs
@@ -19,4 +19,34 @@ defmodule Pleroma.ObjectTest do
{:error, _result} = Repo.insert(cs)
end
end
+
+ describe "deletion function" do
+ test "deletes an object" do
+ object = insert(:note)
+ found_object = Object.get_by_ap_id(object.data["id"])
+
+ assert object == found_object
+
+ Object.delete(found_object)
+
+ found_object = Object.get_by_ap_id(object.data["id"])
+
+ refute object == found_object
+ end
+
+ test "ensures cache is cleared for the object" do
+ object = insert(:note)
+ cached_object = Object.get_cached_by_ap_id(object.data["id"])
+
+ assert object == cached_object
+
+ Object.delete(cached_object)
+
+ {:ok, nil} = Cachex.get(:user_cache, "object:#{object.data["id"]}")
+
+ cached_object = Object.get_cached_by_ap_id(object.data["id"])
+
+ refute object == cached_object
+ end
+ end
end