diff options
| author | lain <lain@soykaf.club> | 2019-02-03 18:28:14 +0100 | 
|---|---|---|
| committer | lain <lain@soykaf.club> | 2019-02-03 18:28:14 +0100 | 
| commit | 505a084058eeeed7d945b43630c97c38cafec656 (patch) | |
| tree | 4622342d8a086b77418b21a349ca042b3f8faf4e | |
| parent | d5d91ae689e14103551dd3622e208ea31e40c858 (diff) | |
| download | pleroma-505a084058eeeed7d945b43630c97c38cafec656.tar.gz pleroma-505a084058eeeed7d945b43630c97c38cafec656.zip | |
Still do caching in tests.
| -rw-r--r-- | lib/pleroma/object.ex | 43 | ||||
| -rw-r--r-- | lib/pleroma/web/activity_pub/utils.ex | 2 | ||||
| -rw-r--r-- | test/web/twitter_api/twitter_api_test.exs | 15 | 
3 files changed, 41 insertions, 19 deletions
| diff --git a/lib/pleroma/object.ex b/lib/pleroma/object.ex index 1088bb5e4..7b46a3b05 100644 --- a/lib/pleroma/object.ex +++ b/lib/pleroma/object.ex @@ -42,24 +42,18 @@ defmodule Pleroma.Object do    # Legacy objects can be mutated by anybody    def authorize_mutation(%Object{}, %User{}), do: true -  if Mix.env() == :test do -    def get_cached_by_ap_id(ap_id) do -      get_by_ap_id(ap_id) -    end -  else -    def get_cached_by_ap_id(ap_id) do -      key = "object:#{ap_id}" - -      Cachex.fetch!(:object_cache, key, fn _ -> -        object = get_by_ap_id(ap_id) - -        if object do -          {:commit, object} -        else -          {:ignore, object} -        end -      end) -    end +  def get_cached_by_ap_id(ap_id) do +    key = "object:#{ap_id}" + +    Cachex.fetch!(:object_cache, key, fn _ -> +      object = get_by_ap_id(ap_id) + +      if object do +        {:commit, object} +      else +        {:ignore, object} +      end +    end)    end    def context_mapping(context) do @@ -90,4 +84,17 @@ defmodule Pleroma.Object do        {:ok, object}      end    end + +  def set_cache(%Object{data: %{"id" => ap_id}} = object) do +    Cachex.put(:object_cache, "object:#{ap_id}", object) +    {:ok, object} +  end + +  def update_and_set_cache(changeset) do +    with {:ok, object} <- Repo.update(changeset) do +      set_cache(object) +    else +      e -> e +    end +  end  end diff --git a/lib/pleroma/web/activity_pub/utils.ex b/lib/pleroma/web/activity_pub/utils.ex index 3b0cdfe71..4a2cc6738 100644 --- a/lib/pleroma/web/activity_pub/utils.ex +++ b/lib/pleroma/web/activity_pub/utils.ex @@ -285,7 +285,7 @@ defmodule Pleroma.Web.ActivityPub.Utils do             |> Map.put("#{property}_count", length(element))             |> Map.put("#{property}s", element),           changeset <- Changeset.change(object, data: new_data), -         {:ok, object} <- Repo.update(changeset), +         {:ok, object} <- Object.update_and_set_cache(changeset),           _ <- update_object_in_activities(object) do        {:ok, object}      end diff --git a/test/web/twitter_api/twitter_api_test.exs b/test/web/twitter_api/twitter_api_test.exs index f94e2b873..48ddbcf50 100644 --- a/test/web/twitter_api/twitter_api_test.exs +++ b/test/web/twitter_api/twitter_api_test.exs @@ -200,12 +200,27 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do    test "it favorites a status, returns the updated activity" do      user = insert(:user) +    other_user = insert(:user)      note_activity = insert(:note_activity)      {:ok, status} = TwitterAPI.fav(user, note_activity.id)      updated_activity = Activity.get_by_ap_id(note_activity.data["id"]) +    assert ActivityView.render("activity.json", %{activity: updated_activity})["fave_num"] == 1 + +    object = Object.normalize(note_activity.data["object"]) + +    assert object.data["like_count"] == 1      assert status == updated_activity + +    {:ok, _status} = TwitterAPI.fav(other_user, note_activity.id) + +    object = Object.normalize(note_activity.data["object"]) + +    assert object.data["like_count"] == 2 + +    updated_activity = Activity.get_by_ap_id(note_activity.data["id"]) +    assert ActivityView.render("activity.json", %{activity: updated_activity})["fave_num"] == 2    end    test "it unfavorites a status, returns the updated activity" do | 
