summaryrefslogtreecommitdiff
path: root/test/pleroma/marker_test.exs
blob: 7b3943c7be5ca907b3c990daa46c72abc7d2a104 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# Pleroma: A lightweight social networking server
# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only

defmodule Pleroma.MarkerTest do
  use Pleroma.DataCase
  alias Pleroma.Marker

  import Pleroma.Factory

  describe "multi_set_unread_count/3" do
    test "returns multi" do
      user = insert(:user)

      assert %Ecto.Multi{
               operations: [marker: {:run, _}, counters: {:run, _}]
             } =
               Marker.multi_set_last_read_id(
                 Ecto.Multi.new(),
                 user,
                 "notifications"
               )
    end

    test "return empty multi" do
      user = insert(:user)
      multi = Ecto.Multi.new()
      assert Marker.multi_set_last_read_id(multi, user, "home") == multi
    end
  end

  describe "get_markers/2" do
    test "returns user markers" do
      user = insert(:user)
      marker = insert(:marker, user: user)
      insert(:notification, user: user, activity: insert(:note_activity))
      insert(:notification, user: user, activity: insert(:note_activity))
      insert(:marker, timeline: "home", user: user)

      assert Marker.get_markers(
               user,
               ["notifications"]
             ) == [%Marker{refresh_record(marker) | unread_count: 2}]
    end
  end

  describe "upsert/2" do
    test "creates a marker" do
      user = insert(:user)

      {:ok, %{"notifications" => %Marker{} = marker}} =
        Marker.upsert(
          user,
          %{"notifications" => %{"last_read_id" => "34"}}
        )

      assert marker.timeline == "notifications"
      assert marker.last_read_id == "34"
      assert marker.lock_version == 0
    end

    test "updates exist marker" do
      user = insert(:user)
      marker = insert(:marker, user: user, last_read_id: "8909")

      {:ok, %{"notifications" => %Marker{}}} =
        Marker.upsert(
          user,
          %{"notifications" => %{"last_read_id" => "9909"}}
        )

      marker = refresh_record(marker)
      assert marker.timeline == "notifications"
      assert marker.last_read_id == "9909"
      assert marker.lock_version == 0
    end
  end
end