First
[anni] / test / pleroma / web / mastodon_api / controllers / instance_controller_test.exs
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Web.MastodonAPI.InstanceControllerTest do
6   # TODO: Should not need Cachex
7   use Pleroma.Web.ConnCase
8
9   alias Pleroma.User
10   import Pleroma.Factory
11
12   test "get instance information", %{conn: conn} do
13     conn = get(conn, "/api/v1/instance")
14     assert result = json_response_and_validate_schema(conn, 200)
15
16     email = Pleroma.Config.get([:instance, :email])
17     thumbnail = Pleroma.Web.Endpoint.url() <> Pleroma.Config.get([:instance, :instance_thumbnail])
18     background = Pleroma.Web.Endpoint.url() <> Pleroma.Config.get([:instance, :background_image])
19
20     # Note: not checking for "max_toot_chars" since it's optional
21     assert %{
22              "uri" => _,
23              "title" => _,
24              "description" => _,
25              "short_description" => _,
26              "version" => _,
27              "email" => from_config_email,
28              "urls" => %{
29                "streaming_api" => _
30              },
31              "stats" => _,
32              "thumbnail" => from_config_thumbnail,
33              "languages" => _,
34              "registrations" => _,
35              "approval_required" => _,
36              "poll_limits" => _,
37              "upload_limit" => _,
38              "avatar_upload_limit" => _,
39              "background_upload_limit" => _,
40              "banner_upload_limit" => _,
41              "background_image" => from_config_background,
42              "shout_limit" => _,
43              "description_limit" => _
44            } = result
45
46     assert result["pleroma"]["metadata"]["account_activation_required"] != nil
47     assert result["pleroma"]["metadata"]["features"]
48     assert result["pleroma"]["metadata"]["federation"]
49     assert result["pleroma"]["metadata"]["fields_limits"]
50     assert result["pleroma"]["vapid_public_key"]
51     assert result["pleroma"]["stats"]["mau"] == 0
52
53     assert email == from_config_email
54     assert thumbnail == from_config_thumbnail
55     assert background == from_config_background
56   end
57
58   test "get instance stats", %{conn: conn} do
59     user = insert(:user, %{local: true})
60
61     user2 = insert(:user, %{local: true})
62     {:ok, _user2} = User.set_activation(user2, false)
63
64     insert(:user, %{local: false, nickname: "u@peer1.com"})
65     insert(:user, %{local: false, nickname: "u@peer2.com"})
66
67     {:ok, _} = Pleroma.Web.CommonAPI.post(user, %{status: "cofe"})
68
69     Pleroma.Stats.force_update()
70
71     conn = get(conn, "/api/v1/instance")
72
73     assert result = json_response_and_validate_schema(conn, 200)
74
75     stats = result["stats"]
76
77     assert stats
78     assert stats["user_count"] == 1
79     assert stats["status_count"] == 1
80     assert stats["domain_count"] == 2
81   end
82
83   test "get peers", %{conn: conn} do
84     insert(:user, %{local: false, nickname: "u@peer1.com"})
85     insert(:user, %{local: false, nickname: "u@peer2.com"})
86
87     Pleroma.Stats.force_update()
88
89     conn = get(conn, "/api/v1/instance/peers")
90
91     assert result = json_response_and_validate_schema(conn, 200)
92
93     assert ["peer1.com", "peer2.com"] == Enum.sort(result)
94   end
95
96   test "instance languages", %{conn: conn} do
97     assert %{"languages" => ["en"]} =
98              conn
99              |> get("/api/v1/instance")
100              |> json_response_and_validate_schema(200)
101
102     clear_config([:instance, :languages], ["aa", "bb"])
103
104     assert %{"languages" => ["aa", "bb"]} =
105              conn
106              |> get("/api/v1/instance")
107              |> json_response_and_validate_schema(200)
108   end
109 end