diff options
| author | lain <lain@soykaf.club> | 2020-04-09 13:20:16 +0200 | 
|---|---|---|
| committer | lain <lain@soykaf.club> | 2020-04-09 13:20:16 +0200 | 
| commit | 8e637ae1a7b75fa08679ae9cf424650fc105de85 (patch) | |
| tree | 93a8aaf7ede928548d4b0424bc10c05a70a0483d | |
| parent | 4b047850718086a6d2edb5b2d94c6f888eba3016 (diff) | |
| download | pleroma-8e637ae1a7b75fa08679ae9cf424650fc105de85.tar.gz pleroma-8e637ae1a7b75fa08679ae9cf424650fc105de85.zip | |
CommonAPI: Basic ChatMessage support.
| -rw-r--r-- | lib/pleroma/web/common_api/common_api.ex | 23 | ||||
| -rw-r--r-- | test/web/common_api/common_api_test.exs | 21 | 
2 files changed, 44 insertions, 0 deletions
| diff --git a/lib/pleroma/web/common_api/common_api.ex b/lib/pleroma/web/common_api/common_api.ex index 636cf3301..39e15adbf 100644 --- a/lib/pleroma/web/common_api/common_api.ex +++ b/lib/pleroma/web/common_api/common_api.ex @@ -8,6 +8,7 @@ defmodule Pleroma.Web.CommonAPI do    alias Pleroma.Conversation.Participation    alias Pleroma.FollowingRelationship    alias Pleroma.Object +  alias Pleroma.Repo    alias Pleroma.ThreadMute    alias Pleroma.User    alias Pleroma.UserRelationship @@ -23,6 +24,28 @@ defmodule Pleroma.Web.CommonAPI do    require Pleroma.Constants    require Logger +  def post_chat_message(user, recipient, content) do +    transaction = +      Repo.transaction(fn -> +        with {_, {:ok, chat_message_data, _meta}} <- +               {:build_object, Builder.chat_message(user, recipient.ap_id, content)}, +             {_, {:ok, chat_message_object}} <- +               {:create_object, Object.create(chat_message_data)}, +             {_, {:ok, create_activity_data, _meta}} <- +               {:build_create_activity, +                Builder.create(user, chat_message_object.data["id"], [recipient.ap_id])}, +             {_, {:ok, %Activity{} = activity, _meta}} <- +               {:common_pipeline, Pipeline.common_pipeline(create_activity_data, local: true)} do +          {:ok, activity} +        end +      end) + +    case transaction do +      {:ok, value} -> value +      error -> error +    end +  end +    def follow(follower, followed) do      timeout = Pleroma.Config.get([:activitypub, :follow_handshake_timeout]) diff --git a/test/web/common_api/common_api_test.exs b/test/web/common_api/common_api_test.exs index f46ad0272..1aea06d24 100644 --- a/test/web/common_api/common_api_test.exs +++ b/test/web/common_api/common_api_test.exs @@ -5,6 +5,7 @@  defmodule Pleroma.Web.CommonAPITest do    use Pleroma.DataCase    alias Pleroma.Activity +  alias Pleroma.Chat    alias Pleroma.Conversation.Participation    alias Pleroma.Object    alias Pleroma.User @@ -21,6 +22,26 @@ defmodule Pleroma.Web.CommonAPITest do    setup do: clear_config([:instance, :limit])    setup do: clear_config([:instance, :max_pinned_statuses]) +  describe "posting chat messages" do +    test "it posts a chat message" do +      author = insert(:user) +      recipient = insert(:user) + +      {:ok, activity} = CommonAPI.post_chat_message(author, recipient, "a test message") + +      assert activity.data["type"] == "Create" +      assert activity.local +      object = Object.normalize(activity) + +      assert object.data["type"] == "ChatMessage" +      assert object.data["to"] == [recipient.ap_id] +      assert object.data["content"] == "a test message" + +      assert Chat.get(author.id, recipient.ap_id) +      assert Chat.get(recipient.id, author.ap_id) +    end +  end +    test "when replying to a conversation / participation, it will set the correct context id even if no explicit reply_to is given" do      user = insert(:user)      {:ok, activity} = CommonAPI.post(user, %{"status" => ".", "visibility" => "direct"}) | 
