node_info_test.exs (5315B)
- # Pleroma: A lightweight social networking server
- # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
- # SPDX-License-Identifier: AGPL-3.0-only
- defmodule Pleroma.Web.NodeInfoTest do
- use Pleroma.Web.ConnCase
- import Pleroma.Factory
- alias Pleroma.Config
- setup do: clear_config([:mrf_simple])
- setup do: clear_config(:instance)
- test "GET /.well-known/nodeinfo", %{conn: conn} do
- links =
- conn
- |> get("/.well-known/nodeinfo")
- |> json_response(200)
- |> Map.fetch!("links")
- Enum.each(links, fn link ->
- href = Map.fetch!(link, "href")
- conn
- |> get(href)
- |> json_response(200)
- end)
- end
- test "nodeinfo shows staff accounts", %{conn: conn} do
- moderator = insert(:user, local: true, is_moderator: true)
- admin = insert(:user, local: true, is_admin: true)
- conn =
- conn
- |> get("/nodeinfo/2.1.json")
- assert result = json_response(conn, 200)
- assert moderator.ap_id in result["metadata"]["staffAccounts"]
- assert admin.ap_id in result["metadata"]["staffAccounts"]
- end
- test "nodeinfo shows restricted nicknames", %{conn: conn} do
- conn =
- conn
- |> get("/nodeinfo/2.1.json")
- assert result = json_response(conn, 200)
- assert Config.get([Pleroma.User, :restricted_nicknames]) ==
- result["metadata"]["restrictedNicknames"]
- end
- test "returns software.repository field in nodeinfo 2.1", %{conn: conn} do
- conn
- |> get("/.well-known/nodeinfo")
- |> json_response(200)
- conn =
- conn
- |> get("/nodeinfo/2.1.json")
- assert result = json_response(conn, 200)
- assert Pleroma.Application.repository() == result["software"]["repository"]
- end
- test "returns fieldsLimits field", %{conn: conn} do
- clear_config([:instance, :max_account_fields], 10)
- clear_config([:instance, :max_remote_account_fields], 15)
- clear_config([:instance, :account_field_name_length], 255)
- clear_config([:instance, :account_field_value_length], 2048)
- response =
- conn
- |> get("/nodeinfo/2.1.json")
- |> json_response(:ok)
- assert response["metadata"]["fieldsLimits"]["maxFields"] == 10
- assert response["metadata"]["fieldsLimits"]["maxRemoteFields"] == 15
- assert response["metadata"]["fieldsLimits"]["nameLength"] == 255
- assert response["metadata"]["fieldsLimits"]["valueLength"] == 2048
- end
- test "it returns the safe_dm_mentions feature if enabled", %{conn: conn} do
- clear_config([:instance, :safe_dm_mentions], true)
- response =
- conn
- |> get("/nodeinfo/2.1.json")
- |> json_response(:ok)
- assert "safe_dm_mentions" in response["metadata"]["features"]
- Config.put([:instance, :safe_dm_mentions], false)
- response =
- conn
- |> get("/nodeinfo/2.1.json")
- |> json_response(:ok)
- refute "safe_dm_mentions" in response["metadata"]["features"]
- end
- describe "`metadata/federation/enabled`" do
- setup do: clear_config([:instance, :federating])
- test "it shows if federation is enabled/disabled", %{conn: conn} do
- Config.put([:instance, :federating], true)
- response =
- conn
- |> get("/nodeinfo/2.1.json")
- |> json_response(:ok)
- assert response["metadata"]["federation"]["enabled"] == true
- Config.put([:instance, :federating], false)
- response =
- conn
- |> get("/nodeinfo/2.1.json")
- |> json_response(:ok)
- assert response["metadata"]["federation"]["enabled"] == false
- end
- end
- test "it shows default features flags", %{conn: conn} do
- response =
- conn
- |> get("/nodeinfo/2.1.json")
- |> json_response(:ok)
- default_features = [
- "pleroma_api",
- "mastodon_api",
- "mastodon_api_streaming",
- "polls",
- "pleroma_explicit_addressing",
- "shareable_emoji_packs",
- "multifetch",
- "pleroma_emoji_reactions",
- "pleroma:api/v1/notifications:include_types_filter",
- "pleroma_chat_messages"
- ]
- assert MapSet.subset?(
- MapSet.new(default_features),
- MapSet.new(response["metadata"]["features"])
- )
- end
- test "it shows MRF transparency data if enabled", %{conn: conn} do
- clear_config([:mrf, :policies], [Pleroma.Web.ActivityPub.MRF.SimplePolicy])
- clear_config([:mrf, :transparency], true)
- simple_config = %{"reject" => ["example.com"]}
- clear_config(:mrf_simple, simple_config)
- response =
- conn
- |> get("/nodeinfo/2.1.json")
- |> json_response(:ok)
- assert response["metadata"]["federation"]["mrf_simple"] == simple_config
- end
- test "it performs exclusions from MRF transparency data if configured", %{conn: conn} do
- clear_config([:mrf, :policies], [Pleroma.Web.ActivityPub.MRF.SimplePolicy])
- clear_config([:mrf, :transparency], true)
- clear_config([:mrf, :transparency_exclusions], ["other.site"])
- simple_config = %{"reject" => ["example.com", "other.site"]}
- clear_config(:mrf_simple, simple_config)
- expected_config = %{"reject" => ["example.com"]}
- response =
- conn
- |> get("/nodeinfo/2.1.json")
- |> json_response(:ok)
- assert response["metadata"]["federation"]["mrf_simple"] == expected_config
- assert response["metadata"]["federation"]["exclusions"] == true
- end
- end