Explorar el Código

Add replying.

tags/v1.1.4
lain hace 5 años
padre
commit
e3bf6655ba
Se han modificado 2 ficheros con 69 adiciones y 2 borrados
  1. +19
    -2
      lib/pleroma/bbs/handler.ex
  2. +50
    -0
      test/bbs/handler_test.exs

+ 19
- 2
lib/pleroma/bbs/handler.ex Ver fichero

@@ -6,6 +6,7 @@ defmodule Pleroma.BBS.Handler do
use Sshd.ShellHandler use Sshd.ShellHandler
alias Pleroma.Web.CommonAPI alias Pleroma.Web.CommonAPI
alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.ActivityPub.ActivityPub
alias Pleroma.Activity


def on_shell(username, _pubkey, _ip, _port) do def on_shell(username, _pubkey, _ip, _port) do
:ok = IO.puts("Welcome to #{Pleroma.Config.get([:instance, :name])}!") :ok = IO.puts("Welcome to #{Pleroma.Config.get([:instance, :name])}!")
@@ -42,7 +43,7 @@ defmodule Pleroma.BBS.Handler do


def puts_activity(activity) do def puts_activity(activity) do
status = Pleroma.Web.MastodonAPI.StatusView.render("status.json", %{activity: activity}) status = Pleroma.Web.MastodonAPI.StatusView.render("status.json", %{activity: activity})
IO.puts("#{status.id} by #{status.account.display_name} (#{status.account.acct}):")
IO.puts("-- #{status.id} by #{status.account.display_name} (#{status.account.acct})")
IO.puts(HtmlSanitizeEx.strip_tags(status.content)) IO.puts(HtmlSanitizeEx.strip_tags(status.content))
IO.puts("") IO.puts("")
end end
@@ -52,11 +53,27 @@ defmodule Pleroma.BBS.Handler do
IO.puts("help - This help") IO.puts("help - This help")
IO.puts("home - Show the home timeline") IO.puts("home - Show the home timeline")
IO.puts("p <text> - Post the given text") IO.puts("p <text> - Post the given text")
IO.puts("r <id> <text> - Reply to the post with the given id")
IO.puts("quit - Quit") IO.puts("quit - Quit")


state state
end end


def handle_command(%{user: user} = state, "r " <> text) do
text = String.trim(text)
[activity_id, rest] = String.split(text, " ", parts: 2)

with %Activity{} <- Activity.get_by_id(activity_id),
{:ok, _activity} <-
CommonAPI.post(user, %{"status" => rest, "in_reply_to_status_id" => activity_id}) do
IO.puts("Replied!")
else
_e -> IO.puts("Could not reply...")
end

state
end

def handle_command(%{user: user} = state, "p " <> text) do def handle_command(%{user: user} = state, "p " <> text) do
text = String.trim(text) text = String.trim(text)


@@ -104,7 +121,7 @@ defmodule Pleroma.BBS.Handler do
{:input, ^input, code} when is_binary(code) -> {:input, ^input, code} when is_binary(code) ->
code = String.trim(code) code = String.trim(code)


handle_command(state, code)
state = handle_command(state, code)


loop(%{state | counter: state.counter + 1}) loop(%{state | counter: state.counter + 1})




+ 50
- 0
test/bbs/handler_test.exs Ver fichero

@@ -3,9 +3,12 @@ defmodule Pleroma.BBS.HandlerTest do
alias Pleroma.BBS.Handler alias Pleroma.BBS.Handler
alias Pleroma.Web.CommonAPI alias Pleroma.Web.CommonAPI
alias Pleroma.User alias Pleroma.User
alias Pleroma.Repo
alias Pleroma.Activity


import ExUnit.CaptureIO import ExUnit.CaptureIO
import Pleroma.Factory import Pleroma.Factory
import Ecto.Query


test "getting the home timeline" do test "getting the home timeline" do
user = insert(:user) user = insert(:user)
@@ -27,4 +30,51 @@ defmodule Pleroma.BBS.HandlerTest do
assert output =~ "hey" assert output =~ "hey"
assert output =~ "hello" assert output =~ "hello"
end 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
assert activity.data["object"]["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"})

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
assert reply.data["object"]["content"] == "this is a reply"
assert reply.data["object"]["inReplyTo"] == activity.data["object"]["id"]
end
end end

Cargando…
Cancelar
Guardar