Fix mark-as-read (`POST /api/v1/conversations/:id/read`) refreshing updated_at and...
authoreugenijm <eugenijm@protonmail.com>
Fri, 20 Dec 2019 13:38:21 +0000 (16:38 +0300)
committereugenijm <eugenijm@protonmail.com>
Sun, 5 Jan 2020 14:38:51 +0000 (17:38 +0300)
CHANGELOG.md
lib/pleroma/conversation/participation.ex
test/conversation/participation_test.exs

index 22f199b3d14f4614b3e8f79f8e8ae459dcd604fd..efa3518e47251a5a37b86f21b4801036c01995a8 100644 (file)
@@ -104,6 +104,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
 - Mastodon API: Inability to get some local users by nickname in `/api/v1/accounts/:id_or_nickname`
 - AdminAPI: If some status received reports both in the "new" format and "old" format it was considered reports on two different statuses (in the context of grouped reports)
 - Admin API: Error when trying to update reports in the "old" format
+- Mastodon API: Marking a conversation as read (`POST /api/v1/conversations/:id/read`) brings it to the top in the user's direct conversation list
 </details>
 
 ## [1.1.6] - 2019-11-19
index aafe572803f0b99f848c146f50a931c39b4eb447..e5d28ebffdfc786480fc417ff409d116044f76bd 100644 (file)
@@ -64,11 +64,13 @@ defmodule Pleroma.Conversation.Participation do
   end
 
   def mark_as_read(participation) do
-    participation
-    |> read_cng(%{read: true})
-    |> Repo.update()
+    __MODULE__
+    |> where(id: ^participation.id)
+    |> update(set: [read: true])
+    |> select([p], p)
+    |> Repo.update_all([])
     |> case do
-      {:ok, participation} ->
+      {1, [participation]} ->
         participation = Repo.preload(participation, :user)
         User.set_unread_conversation_count(participation.user)
         {:ok, participation}
index ba81c0d4bb2eb42025fcb07eb6996ffebfa94954..ab9f27b2f1b48ce846cd71e3586e47d3c9706f3b 100644 (file)
@@ -125,9 +125,10 @@ defmodule Pleroma.Conversation.ParticipationTest do
 
   test "it marks a participation as read" do
     participation = insert(:participation, %{read: false})
-    {:ok, participation} = Participation.mark_as_read(participation)
+    {:ok, updated_participation} = Participation.mark_as_read(participation)
 
-    assert participation.read
+    assert updated_participation.read
+    assert updated_participation.updated_at == participation.updated_at
   end
 
   test "it marks a participation as unread" do