Fork of Pleroma with site-specific changes and feature branches https://git.pleroma.social/pleroma/pleroma
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

209 lines
6.0KB

  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Pleroma.Web.NodeInfoTest do
  5. use Pleroma.Web.ConnCase
  6. import Pleroma.Factory
  7. alias Pleroma.Config
  8. setup do: clear_config([:mrf_simple])
  9. setup do: clear_config(:instance)
  10. test "GET /.well-known/nodeinfo", %{conn: conn} do
  11. links =
  12. conn
  13. |> get("/.well-known/nodeinfo")
  14. |> json_response(200)
  15. |> Map.fetch!("links")
  16. Enum.each(links, fn link ->
  17. href = Map.fetch!(link, "href")
  18. conn
  19. |> get(href)
  20. |> json_response(200)
  21. end)
  22. end
  23. test "nodeinfo shows staff accounts", %{conn: conn} do
  24. moderator = insert(:user, local: true, is_moderator: true)
  25. admin = insert(:user, local: true, is_admin: true)
  26. conn =
  27. conn
  28. |> get("/nodeinfo/2.1.json")
  29. assert result = json_response(conn, 200)
  30. assert moderator.ap_id in result["metadata"]["staffAccounts"]
  31. assert admin.ap_id in result["metadata"]["staffAccounts"]
  32. end
  33. test "nodeinfo shows restricted nicknames", %{conn: conn} do
  34. conn =
  35. conn
  36. |> get("/nodeinfo/2.1.json")
  37. assert result = json_response(conn, 200)
  38. assert Config.get([Pleroma.User, :restricted_nicknames]) ==
  39. result["metadata"]["restrictedNicknames"]
  40. end
  41. test "returns software.repository field in nodeinfo 2.1", %{conn: conn} do
  42. conn
  43. |> get("/.well-known/nodeinfo")
  44. |> json_response(200)
  45. conn =
  46. conn
  47. |> get("/nodeinfo/2.1.json")
  48. assert result = json_response(conn, 200)
  49. assert Pleroma.Application.repository() == result["software"]["repository"]
  50. end
  51. test "returns fieldsLimits field", %{conn: conn} do
  52. Config.put([:instance, :max_account_fields], 10)
  53. Config.put([:instance, :max_remote_account_fields], 15)
  54. Config.put([:instance, :account_field_name_length], 255)
  55. Config.put([:instance, :account_field_value_length], 2048)
  56. response =
  57. conn
  58. |> get("/nodeinfo/2.1.json")
  59. |> json_response(:ok)
  60. assert response["metadata"]["fieldsLimits"]["maxFields"] == 10
  61. assert response["metadata"]["fieldsLimits"]["maxRemoteFields"] == 15
  62. assert response["metadata"]["fieldsLimits"]["nameLength"] == 255
  63. assert response["metadata"]["fieldsLimits"]["valueLength"] == 2048
  64. end
  65. test "it returns the safe_dm_mentions feature if enabled", %{conn: conn} do
  66. option = Config.get([:instance, :safe_dm_mentions])
  67. Config.put([:instance, :safe_dm_mentions], true)
  68. response =
  69. conn
  70. |> get("/nodeinfo/2.1.json")
  71. |> json_response(:ok)
  72. assert "safe_dm_mentions" in response["metadata"]["features"]
  73. Config.put([:instance, :safe_dm_mentions], false)
  74. response =
  75. conn
  76. |> get("/nodeinfo/2.1.json")
  77. |> json_response(:ok)
  78. refute "safe_dm_mentions" in response["metadata"]["features"]
  79. Config.put([:instance, :safe_dm_mentions], option)
  80. end
  81. describe "`metadata/federation/enabled`" do
  82. setup do: clear_config([:instance, :federating])
  83. test "it shows if federation is enabled/disabled", %{conn: conn} do
  84. Config.put([:instance, :federating], true)
  85. response =
  86. conn
  87. |> get("/nodeinfo/2.1.json")
  88. |> json_response(:ok)
  89. assert response["metadata"]["federation"]["enabled"] == true
  90. Config.put([:instance, :federating], false)
  91. response =
  92. conn
  93. |> get("/nodeinfo/2.1.json")
  94. |> json_response(:ok)
  95. assert response["metadata"]["federation"]["enabled"] == false
  96. end
  97. end
  98. test "it shows default features flags", %{conn: conn} do
  99. response =
  100. conn
  101. |> get("/nodeinfo/2.1.json")
  102. |> json_response(:ok)
  103. default_features = [
  104. "pleroma_api",
  105. "mastodon_api",
  106. "mastodon_api_streaming",
  107. "polls",
  108. "pleroma_explicit_addressing",
  109. "shareable_emoji_packs",
  110. "multifetch",
  111. "pleroma_emoji_reactions",
  112. "pleroma:api/v1/notifications:include_types_filter",
  113. "pleroma_chat_messages"
  114. ]
  115. assert MapSet.subset?(
  116. MapSet.new(default_features),
  117. MapSet.new(response["metadata"]["features"])
  118. )
  119. end
  120. test "it shows MRF transparency data if enabled", %{conn: conn} do
  121. config = Config.get([:instance, :rewrite_policy])
  122. Config.put([:instance, :rewrite_policy], [Pleroma.Web.ActivityPub.MRF.SimplePolicy])
  123. option = Config.get([:instance, :mrf_transparency])
  124. Config.put([:instance, :mrf_transparency], true)
  125. simple_config = %{"reject" => ["example.com"]}
  126. Config.put(:mrf_simple, simple_config)
  127. response =
  128. conn
  129. |> get("/nodeinfo/2.1.json")
  130. |> json_response(:ok)
  131. assert response["metadata"]["federation"]["mrf_simple"] == simple_config
  132. Config.put([:instance, :rewrite_policy], config)
  133. Config.put([:instance, :mrf_transparency], option)
  134. Config.put(:mrf_simple, %{})
  135. end
  136. test "it performs exclusions from MRF transparency data if configured", %{conn: conn} do
  137. config = Config.get([:instance, :rewrite_policy])
  138. Config.put([:instance, :rewrite_policy], [Pleroma.Web.ActivityPub.MRF.SimplePolicy])
  139. option = Config.get([:instance, :mrf_transparency])
  140. Config.put([:instance, :mrf_transparency], true)
  141. exclusions = Config.get([:instance, :mrf_transparency_exclusions])
  142. Config.put([:instance, :mrf_transparency_exclusions], ["other.site"])
  143. simple_config = %{"reject" => ["example.com", "other.site"]}
  144. expected_config = %{"reject" => ["example.com"]}
  145. Config.put(:mrf_simple, simple_config)
  146. response =
  147. conn
  148. |> get("/nodeinfo/2.1.json")
  149. |> json_response(:ok)
  150. assert response["metadata"]["federation"]["mrf_simple"] == expected_config
  151. assert response["metadata"]["federation"]["exclusions"] == true
  152. Config.put([:instance, :rewrite_policy], config)
  153. Config.put([:instance, :mrf_transparency], option)
  154. Config.put([:instance, :mrf_transparency_exclusions], exclusions)
  155. Config.put(:mrf_simple, %{})
  156. end
  157. end