| 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
79
80
81
82
83
84
85
86
87
88
89
 | # Pleroma: A lightweight social networking server
# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.BBS.HandlerTest do
  use Pleroma.DataCase
  alias Pleroma.Activity
  alias Pleroma.BBS.Handler
  alias Pleroma.Object
  alias Pleroma.Repo
  alias Pleroma.User
  alias Pleroma.Web.CommonAPI
  import ExUnit.CaptureIO
  import Pleroma.Factory
  import Ecto.Query
  test "getting the home timeline" do
    user = insert(:user)
    followed = insert(:user)
    {:ok, user} = User.follow(user, followed)
    {:ok, _first} = CommonAPI.post(user, %{status: "hey"})
    {:ok, _second} = CommonAPI.post(followed, %{status: "hello"})
    output =
      capture_io(fn ->
        Handler.handle_command(%{user: user}, "home")
      end)
    assert output =~ user.nickname
    assert output =~ followed.nickname
    assert output =~ "hey"
    assert output =~ "hello"
  end
  test "posting" do
    user = insert(:user)
    output =
      capture_io(fn ->
        Handler.handle_command(%{user: user}, "p this is a test post")
      end)
    assert output =~ "Posted"
    activity =
      Repo.one(
        from(a in Activity,
          where: fragment("?->>'type' = ?", a.data, "Create")
        )
      )
    assert activity.actor == user.ap_id
    object = Object.normalize(activity)
    assert object.data["content"] == "this is a test post"
  end
  test "replying" do
    user = insert(:user)
    another_user = insert(:user)
    {:ok, activity} = CommonAPI.post(another_user, %{status: "this is a test post"})
    activity_object = Object.normalize(activity)
    output =
      capture_io(fn ->
        Handler.handle_command(%{user: user}, "r #{activity.id} this is a reply")
      end)
    assert output =~ "Replied"
    reply =
      Repo.one(
        from(a in Activity,
          where: fragment("?->>'type' = ?", a.data, "Create"),
          where: a.actor == ^user.ap_id
        )
      )
    assert reply.actor == user.ap_id
    reply_object_data = Object.normalize(reply).data
    assert reply_object_data["content"] == "this is a reply"
    assert reply_object_data["inReplyTo"] == activity_object.data["id"]
  end
end
 |