1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
5 defmodule Pleroma.Web.PleromaAPI.EmojiReactionControllerTest do
6 use Oban.Testing, repo: Pleroma.Repo
7 use Pleroma.Web.ConnCase
10 alias Pleroma.Tests.ObanHelpers
12 alias Pleroma.Web.CommonAPI
14 import Pleroma.Factory
16 test "PUT /api/v1/pleroma/statuses/:id/reactions/:emoji", %{conn: conn} do
18 other_user = insert(:user)
20 {:ok, activity} = CommonAPI.post(user, %{status: "#cofe"})
24 |> assign(:user, other_user)
25 |> assign(:token, insert(:oauth_token, user: other_user, scopes: ["write:statuses"]))
26 |> put("/api/v1/pleroma/statuses/#{activity.id}/reactions/☕")
27 |> json_response_and_validate_schema(200)
29 # We return the status, but this our implementation detail.
30 assert %{"id" => id} = result
31 assert to_string(activity.id) == id
33 assert result["pleroma"]["emoji_reactions"] == [
34 %{"name" => "☕", "count" => 1, "me" => true}
37 # Reacting with a non-emoji
39 |> assign(:user, other_user)
40 |> assign(:token, insert(:oauth_token, user: other_user, scopes: ["write:statuses"]))
41 |> put("/api/v1/pleroma/statuses/#{activity.id}/reactions/x")
42 |> json_response_and_validate_schema(400)
45 test "DELETE /api/v1/pleroma/statuses/:id/reactions/:emoji", %{conn: conn} do
47 other_user = insert(:user)
49 {:ok, activity} = CommonAPI.post(user, %{status: "#cofe"})
50 {:ok, _reaction_activity} = CommonAPI.react_with_emoji(activity.id, other_user, "☕")
52 ObanHelpers.perform_all()
56 |> assign(:user, other_user)
57 |> assign(:token, insert(:oauth_token, user: other_user, scopes: ["write:statuses"]))
58 |> delete("/api/v1/pleroma/statuses/#{activity.id}/reactions/☕")
60 assert %{"id" => id} = json_response_and_validate_schema(result, 200)
61 assert to_string(activity.id) == id
63 ObanHelpers.perform_all()
65 object = Object.get_by_ap_id(activity.data["object"])
67 assert object.data["reaction_count"] == 0
70 test "GET /api/v1/pleroma/statuses/:id/reactions", %{conn: conn} do
72 other_user = insert(:user)
73 doomed_user = insert(:user)
75 {:ok, activity} = CommonAPI.post(user, %{status: "#cofe"})
79 |> get("/api/v1/pleroma/statuses/#{activity.id}/reactions")
80 |> json_response_and_validate_schema(200)
84 {:ok, _} = CommonAPI.react_with_emoji(activity.id, other_user, "🎅")
85 {:ok, _} = CommonAPI.react_with_emoji(activity.id, doomed_user, "🎅")
87 User.perform(:delete, doomed_user)
91 |> get("/api/v1/pleroma/statuses/#{activity.id}/reactions")
92 |> json_response_and_validate_schema(200)
94 [%{"name" => "🎅", "count" => 1, "accounts" => [represented_user], "me" => false}] = result
96 assert represented_user["id"] == other_user.id
100 |> assign(:user, other_user)
101 |> assign(:token, insert(:oauth_token, user: other_user, scopes: ["read:statuses"]))
102 |> get("/api/v1/pleroma/statuses/#{activity.id}/reactions")
103 |> json_response_and_validate_schema(200)
105 assert [%{"name" => "🎅", "count" => 1, "accounts" => [_represented_user], "me" => true}] =
109 test "GET /api/v1/pleroma/statuses/:id/reactions/:emoji", %{conn: conn} do
111 other_user = insert(:user)
113 {:ok, activity} = CommonAPI.post(user, %{status: "#cofe"})
117 |> get("/api/v1/pleroma/statuses/#{activity.id}/reactions/🎅")
118 |> json_response_and_validate_schema(200)
122 {:ok, _} = CommonAPI.react_with_emoji(activity.id, other_user, "🎅")
123 {:ok, _} = CommonAPI.react_with_emoji(activity.id, other_user, "☕")
125 assert [%{"name" => "🎅", "count" => 1, "accounts" => [represented_user], "me" => false}] =
127 |> get("/api/v1/pleroma/statuses/#{activity.id}/reactions/🎅")
128 |> json_response_and_validate_schema(200)
130 assert represented_user["id"] == other_user.id