diff options
author | kaniini <ariadne@dereferenced.org> | 2019-07-28 20:29:27 +0000 |
---|---|---|
committer | kaniini <ariadne@dereferenced.org> | 2019-07-28 20:29:27 +0000 |
commit | 0d05ec385587e7a5efd0e3a36f5c783d78b4eea2 (patch) | |
tree | 77594dc56fc8bb51b727f495368fd1eb7b83b837 | |
parent | 488c06b6f5d09111733c208bd1187b91297aa9ab (diff) | |
parent | 6a4b8b2681023dc355331999aeac6c24c5a21f7f (diff) | |
download | pleroma-0d05ec385587e7a5efd0e3a36f5c783d78b4eea2.tar.gz |
Merge branch 'fix/user_update_and_set_cache' into 'develop'
fixed User.update_and_set_cache for stale user
See merge request pleroma/pleroma!1493
-rw-r--r-- | lib/pleroma/user.ex | 2 | ||||
-rw-r--r-- | test/user_test.exs | 24 |
2 files changed, 25 insertions, 1 deletions
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 974f6df18..6e2fd3af8 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -471,7 +471,7 @@ defmodule Pleroma.User do end def update_and_set_cache(changeset) do - with {:ok, user} <- Repo.update(changeset) do + with {:ok, user} <- Repo.update(changeset, stale_error_field: :id) do set_cache(user) else e -> e diff --git a/test/user_test.exs b/test/user_test.exs index 8a7b7537f..556df45fd 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -1369,4 +1369,28 @@ defmodule Pleroma.UserTest do assert User.is_internal_user?(user) end end + + describe "update_and_set_cache/1" do + test "returns error when user is stale instead Ecto.StaleEntryError" do + user = insert(:user) + + changeset = Ecto.Changeset.change(user, bio: "test") + + Repo.delete(user) + + assert {:error, %Ecto.Changeset{errors: [id: {"is stale", [stale: true]}], valid?: false}} = + User.update_and_set_cache(changeset) + end + + test "performs update cache if user updated" do + user = insert(:user) + assert {:ok, nil} = Cachex.get(:user_cache, "ap_id:#{user.ap_id}") + + changeset = Ecto.Changeset.change(user, bio: "test-bio") + + assert {:ok, %User{bio: "test-bio"} = user} = User.update_and_set_cache(changeset) + assert {:ok, user} = Cachex.get(:user_cache, "ap_id:#{user.ap_id}") + assert %User{bio: "test-bio"} = User.get_cached_by_ap_id(user.ap_id) + end + end end |