Update user data on fetch if it changed.
authorRoger Braun <roger@rogerbraun.net>
Sat, 24 Jun 2017 11:09:46 +0000 (13:09 +0200)
committerRoger Braun <roger@rogerbraun.net>
Sat, 24 Jun 2017 11:09:46 +0000 (13:09 +0200)
lib/pleroma/web/ostatus/ostatus.ex
test/web/ostatus/ostatus_test.exs

index 7fd3a5eddd127bdcc82f09ce30828499518df3c0..bb0a3b5b9320711c958543b94f4fe068b1cd5339 100644 (file)
@@ -192,6 +192,11 @@ defmodule Pleroma.Web.OStatus do
     end
   end
 
+  def insert_or_update_user(data) do
+    cs = User.remote_user_creation(data)
+    Repo.insert(cs, on_conflict: :replace_all, conflict_target: :nickname)
+  end
+
   def make_user(uri) do
     with {:ok, info} <- gather_user_info(uri) do
       data = %{
@@ -204,9 +209,7 @@ defmodule Pleroma.Web.OStatus do
       }
       with %User{} = user <- User.get_by_ap_id(data.ap_id) do
         {:ok, user}
-      else _e ->
-        cs = User.remote_user_creation(data)
-        Repo.insert(cs)
+      else _e -> insert_or_update_user(data)
       end
     end
   end
index a49d950878266f4192c9d52b0e594956440104f0..11b618fdbfcd1f03b729ddfc4d776cdd09c17f28 100644 (file)
@@ -322,4 +322,11 @@ defmodule Pleroma.Web.OStatusTest do
       assert activity.data["object"]["id"] == "tag:shitposter.club,2017-05-05:noticeId=2827873:objectType=comment"
     end
   end
+
+  test "insert or update a user from given data" do
+    user = insert(:user, %{nickname: "nick@name.de"})
+    data = %{ ap_id: user.ap_id <> "xxx", name: user.name, nickname: user.nickname }
+
+    assert {:ok, %User{}} = OStatus.insert_or_update_user(data)
+  end
 end