# Pleroma: A lightweight social networking server # Copyright © 2017-2020 Pleroma Authors # 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