fixed User.update_and_set_cache for stale user
authorMaksim <parallel588@gmail.com>
Sun, 28 Jul 2019 20:29:26 +0000 (20:29 +0000)
committerkaniini <ariadne@dereferenced.org>
Sun, 28 Jul 2019 20:29:26 +0000 (20:29 +0000)
lib/pleroma/user.ex
test/user_test.exs

index 974f6df189fa212fe14cede863c60117ad6d0587..6e2fd3af8d4d5030922c460a3c73286e73fce73f 100644 (file)
@@ -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
index 8a7b7537f1e25848f1925bdb9e395a04f46c562a..556df45fd0f75a14276d8df6ddb54eb2207a0e14 100644 (file)
@@ -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