forked from AkkomaGang/akkoma
Emoji reactions: Add sanity checks for the cache
This commit is contained in:
parent
dddebee047
commit
34fc0ca053
2 changed files with 23 additions and 2 deletions
|
@ -337,7 +337,7 @@ def add_emoji_reaction_to_object(
|
||||||
%Activity{data: %{"content" => emoji, "actor" => actor}},
|
%Activity{data: %{"content" => emoji, "actor" => actor}},
|
||||||
object
|
object
|
||||||
) do
|
) do
|
||||||
reactions = object.data["reactions"] || []
|
reactions = get_cached_emoji_reactions(object)
|
||||||
|
|
||||||
new_reactions =
|
new_reactions =
|
||||||
case Enum.find_index(reactions, fn [candidate, _] -> emoji == candidate end) do
|
case Enum.find_index(reactions, fn [candidate, _] -> emoji == candidate end) do
|
||||||
|
@ -365,7 +365,7 @@ def remove_emoji_reaction_from_object(
|
||||||
%Activity{data: %{"content" => emoji, "actor" => actor}},
|
%Activity{data: %{"content" => emoji, "actor" => actor}},
|
||||||
object
|
object
|
||||||
) do
|
) do
|
||||||
reactions = object.data["reactions"] || []
|
reactions = get_cached_emoji_reactions(object)
|
||||||
|
|
||||||
new_reactions =
|
new_reactions =
|
||||||
case Enum.find_index(reactions, fn [candidate, _] -> emoji == candidate end) do
|
case Enum.find_index(reactions, fn [candidate, _] -> emoji == candidate end) do
|
||||||
|
@ -385,6 +385,14 @@ def remove_emoji_reaction_from_object(
|
||||||
update_element_in_object("reaction", new_reactions, object, count)
|
update_element_in_object("reaction", new_reactions, object, count)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def get_cached_emoji_reactions(object) do
|
||||||
|
if is_list(object.data["reactions"]) do
|
||||||
|
object.data["reactions"]
|
||||||
|
else
|
||||||
|
[]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
@spec add_like_to_object(Activity.t(), Object.t()) ::
|
@spec add_like_to_object(Activity.t(), Object.t()) ::
|
||||||
{:ok, Object.t()} | {:error, Ecto.Changeset.t()}
|
{:ok, Object.t()} | {:error, Ecto.Changeset.t()}
|
||||||
def add_like_to_object(%Activity{data: %{"actor" => actor}}, object) do
|
def add_like_to_object(%Activity{data: %{"actor" => actor}}, object) do
|
||||||
|
|
|
@ -636,4 +636,17 @@ test "removes actor from announcements" do
|
||||||
assert updated_object.data["announcement_count"] == 1
|
assert updated_object.data["announcement_count"] == 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "get_cached_emoji_reactions/1" do
|
||||||
|
test "returns the data or an emtpy list" do
|
||||||
|
object = insert(:note)
|
||||||
|
assert Utils.get_cached_emoji_reactions(object) == []
|
||||||
|
|
||||||
|
object = insert(:note, data: %{"reactions" => [["x", ["lain"]]]})
|
||||||
|
assert Utils.get_cached_emoji_reactions(object) == [["x", ["lain"]]]
|
||||||
|
|
||||||
|
object = insert(:note, data: %{"reactions" => %{}})
|
||||||
|
assert Utils.get_cached_emoji_reactions(object) == []
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue