From 9637cded21cef1e6c531dd46d5f5245c4c3ed03c Mon Sep 17 00:00:00 2001
From: lain <lain@soykaf.club>
Date: Tue, 5 May 2020 20:07:47 +0200
Subject: [PATCH] Chat: Fix missing chat id on second 'get'

---
 lib/pleroma/chat.ex |  3 ++-
 test/chat_test.exs  | 13 ++++++++++++-
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/lib/pleroma/chat.ex b/lib/pleroma/chat.ex
index 6008196e4..1a092b992 100644
--- a/lib/pleroma/chat.ex
+++ b/lib/pleroma/chat.ex
@@ -46,7 +46,8 @@ defmodule Pleroma.Chat do
     %__MODULE__{}
     |> creation_cng(%{user_id: user_id, recipient: recipient})
     |> Repo.insert(
-      on_conflict: :nothing,
+      # Need to set something, otherwise we get nothing back at all
+      on_conflict: [set: [recipient: recipient]],
       returning: true,
       conflict_target: [:user_id, :recipient]
     )
diff --git a/test/chat_test.exs b/test/chat_test.exs
index 952598c87..943e48111 100644
--- a/test/chat_test.exs
+++ b/test/chat_test.exs
@@ -26,13 +26,24 @@ defmodule Pleroma.ChatTest do
       assert chat.id
     end
 
-    test "it returns a chat for a user and recipient if it already exists" do
+    test "it returns and bumps a chat for a user and recipient if it already exists" do
       user = insert(:user)
       other_user = insert(:user)
 
       {:ok, chat} = Chat.bump_or_create(user.id, other_user.ap_id)
       {:ok, chat_two} = Chat.bump_or_create(user.id, other_user.ap_id)
 
+      assert chat.id == chat_two.id
+      assert chat_two.unread == 2
+    end
+
+    test "it returns a chat for a user and recipient if it already exists" do
+      user = insert(:user)
+      other_user = insert(:user)
+
+      {:ok, chat} = Chat.get_or_create(user.id, other_user.ap_id)
+      {:ok, chat_two} = Chat.get_or_create(user.id, other_user.ap_id)
+
       assert chat.id == chat_two.id
     end