Browse Source

Merge branch 'develop' into gun

debug-remote-ip
Alexander Strizhakov 4 years ago
parent
commit
9bae9b1b1b
No known key found for this signature in database GPG Key ID: 22896A53AEF1381
100 changed files with 1057 additions and 357 deletions
  1. +15
    -13
      .gitlab-ci.yml
  2. +8
    -0
      CHANGELOG.md
  3. +5
    -0
      config/config.exs
  4. +60
    -0
      config/description.exs
  5. +1
    -0
      docs/API/differences_in_mastoapi_responses.md
  6. +18
    -0
      docs/configuration/cheatsheet.md
  7. +12
    -1
      lib/pleroma/user.ex
  8. +11
    -3
      lib/pleroma/web/activity_pub/visibility.ex
  9. +4
    -3
      lib/pleroma/web/controller_helper.ex
  10. +3
    -3
      lib/pleroma/web/feed/tag_controller.ex
  11. +13
    -4
      lib/pleroma/web/feed/user_controller.ex
  12. +5
    -2
      lib/pleroma/web/mastodon_api/controllers/account_controller.ex
  13. +1
    -1
      lib/pleroma/web/mastodon_api/controllers/status_controller.ex
  14. +24
    -11
      lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex
  15. +16
    -6
      lib/pleroma/web/mastodon_api/mastodon_api.ex
  16. +1
    -0
      lib/pleroma/web/nodeinfo/nodeinfo_controller.ex
  17. +1
    -1
      lib/pleroma/web/router.ex
  18. +0
    -0
      lib/pleroma/web/templates/feed/feed/_activity.atom.eex
  19. +49
    -0
      lib/pleroma/web/templates/feed/feed/_activity.rss.eex
  20. +0
    -0
      lib/pleroma/web/templates/feed/feed/_author.atom.eex
  21. +17
    -0
      lib/pleroma/web/templates/feed/feed/_author.rss.eex
  22. +2
    -2
      lib/pleroma/web/templates/feed/feed/user.atom.eex
  23. +20
    -0
      lib/pleroma/web/templates/feed/feed/user.rss.eex
  24. +1
    -1
      test/activity_expiration_test.exs
  25. +1
    -1
      test/activity_test.exs
  26. +1
    -2
      test/captcha_test.exs
  27. +1
    -3
      test/config/transfer_task_test.exs
  28. +1
    -3
      test/conversation_test.exs
  29. +1
    -2
      test/emails/mailer_test.exs
  30. +2
    -2
      test/http/request_builder_test.exs
  31. +2
    -3
      test/object/fetcher_test.exs
  32. +2
    -2
      test/object_test.exs
  33. +1
    -1
      test/plugs/admin_secret_authentication_plug_test.exs
  34. +1
    -1
      test/plugs/ensure_public_or_authenticated_plug_test.exs
  35. +3
    -3
      test/plugs/http_security_plug_test.exs
  36. +1
    -3
      test/plugs/instance_static_test.exs
  37. +1
    -1
      test/plugs/oauth_scopes_plug_test.exs
  38. +3
    -5
      test/plugs/rate_limiter_test.exs
  39. +1
    -2
      test/plugs/remote_ip_test.exs
  40. +1
    -1
      test/plugs/user_enabled_plug_test.exs
  41. +2
    -6
      test/plugs/user_is_admin_plug_test.exs
  42. +1
    -1
      test/repo_test.exs
  43. +1
    -1
      test/scheduled_activity_test.exs
  44. +8
    -28
      test/support/helpers.ex
  45. +1
    -3
      test/tasks/config_test.exs
  46. +1
    -1
      test/tasks/robots_txt_test.exs
  47. +1
    -1
      test/upload/filter/anonymize_filename_test.exs
  48. +1
    -1
      test/upload/filter/mogrify_test.exs
  49. +1
    -1
      test/upload/filter_test.exs
  50. +1
    -3
      test/upload_test.exs
  51. +5
    -6
      test/uploaders/s3_test.exs
  52. +1
    -1
      test/user_search_test.exs
  53. +13
    -18
      test/user_test.exs
  54. +4
    -6
      test/web/activity_pub/activity_pub_controller_test.exs
  55. +3
    -3
      test/web/activity_pub/activity_pub_test.exs
  56. +1
    -1
      test/web/activity_pub/mrf/hellthread_policy_test.exs
  57. +1
    -1
      test/web/activity_pub/mrf/keyword_policy_test.exs
  58. +1
    -1
      test/web/activity_pub/mrf/mention_policy_test.exs
  59. +1
    -1
      test/web/activity_pub/mrf/mrf_test.exs
  60. +5
    -6
      test/web/activity_pub/mrf/object_age_policy_test.exs
  61. +1
    -1
      test/web/activity_pub/mrf/reject_non_public_test.exs
  62. +11
    -12
      test/web/activity_pub/mrf/simple_policy_test.exs
  63. +1
    -2
      test/web/activity_pub/mrf/subchain_policy_test.exs
  64. +1
    -1
      test/web/activity_pub/mrf/user_allowlist_policy_test.exs
  65. +2
    -2
      test/web/activity_pub/mrf/vocabulary_policy_test.exs
  66. +1
    -3
      test/web/activity_pub/publisher_test.exs
  67. +1
    -1
      test/web/activity_pub/relay_test.exs
  68. +1
    -1
      test/web/activity_pub/transmogrifier/follow_handling_test.exs
  69. +7
    -15
      test/web/activity_pub/transmogrifier_test.exs
  70. +1
    -3
      test/web/activity_pub/views/object_view_test.exs
  71. +9
    -24
      test/web/admin_api/admin_api_controller_test.exs
  72. +1
    -1
      test/web/chat_channel_test.exs
  73. +3
    -3
      test/web/common_api/common_api_test.exs
  74. +4
    -7
      test/web/federator_test.exs
  75. +46
    -16
      test/web/feed/tag_controller_test.exs
  76. +84
    -7
      test/web/feed/user_controller_test.exs
  77. +1
    -3
      test/web/instances/instance_test.exs
  78. +1
    -3
      test/web/instances/instances_test.exs
  79. +1
    -1
      test/web/masto_fe_controller_test.exs
  80. +2
    -1
      test/web/mastodon_api/controllers/account_controller/update_credentials_test.exs
  81. +196
    -9
      test/web/mastodon_api/controllers/account_controller_test.exs
  82. +2
    -2
      test/web/mastodon_api/controllers/media_controller_test.exs
  83. +45
    -0
      test/web/mastodon_api/controllers/notification_controller_test.exs
  84. +1
    -1
      test/web/mastodon_api/controllers/scheduled_activity_controller_test.exs
  85. +157
    -6
      test/web/mastodon_api/controllers/status_controller_test.exs
  86. +92
    -11
      test/web/mastodon_api/controllers/timeline_controller_test.exs
  87. +2
    -2
      test/web/media_proxy/media_proxy_controller_test.exs
  88. +2
    -2
      test/web/media_proxy/media_proxy_test.exs
  89. +1
    -1
      test/web/metadata/opengraph_test.exs
  90. +1
    -1
      test/web/metadata/twitter_card_test.exs
  91. +3
    -3
      test/web/node_info_test.exs
  92. +2
    -6
      test/web/oauth/ldap_authorization_test.exs
  93. +3
    -9
      test/web/oauth/oauth_controller_test.exs
  94. +1
    -3
      test/web/ostatus/ostatus_controller_test.exs
  95. +1
    -3
      test/web/pleroma_api/controllers/account_controller_test.exs
  96. +1
    -4
      test/web/pleroma_api/controllers/emoji_api_controller_test.exs
  97. +1
    -1
      test/web/plugs/federating_plug_test.exs
  98. +1
    -1
      test/web/rich_media/helpers_test.exs
  99. +2
    -7
      test/web/static_fe/static_fe_controller_test.exs
  100. +1
    -2
      test/web/streamer/streamer_test.exs

+ 15
- 13
.gitlab-ci.yml View File

@@ -62,19 +62,21 @@ unit-testing:
- mix ecto.migrate - mix ecto.migrate
- mix coveralls --preload-modules - mix coveralls --preload-modules


federated-testing:
stage: test
cache: *testing_cache_policy
services:
- name: minibikini/postgres-with-rum:12
alias: postgres
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
script:
- mix deps.get
- mix ecto.create
- mix ecto.migrate
- epmd -daemon
- mix test --trace --only federated
# Removed to fix CI issue. In this early state it wasn't adding much value anyway.
# TODO Fix and reinstate federated testing
# federated-testing:
# stage: test
# cache: *testing_cache_policy
# services:
# - name: minibikini/postgres-with-rum:12
# alias: postgres
# command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
# script:
# - mix deps.get
# - mix ecto.create
# - mix ecto.migrate
# - epmd -daemon
# - mix test --trace --only federated


unit-testing-rum: unit-testing-rum:
stage: test stage: test


+ 8
- 0
CHANGELOG.md View File

@@ -10,6 +10,14 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
### Removed ### Removed
- **Breaking:** removed `with_move` parameter from notifications timeline. - **Breaking:** removed `with_move` parameter from notifications timeline.


### Added
- NodeInfo: `pleroma:api/v1/notifications:include_types_filter` to the `features` list.
- Configuration: `:restrict_unauthenticated` setting, restrict access for unauthenticated users to timelines (public and federate), user profiles and statuses.
<details>
<summary>API Changes</summary>
- Mastodon API: Support for `include_types` in `/api/v1/notifications`.
</details>

## [2.0.0] - 2019-03-08 ## [2.0.0] - 2019-03-08
### Security ### Security
- Mastodon API: Fix being able to request enourmous amount of statuses in timelines leading to DoS. Now limited to 40 per request. - Mastodon API: Fix being able to request enourmous amount of statuses in timelines leading to DoS. Now limited to 40 per request.


+ 5
- 0
config/config.exs View File

@@ -645,6 +645,11 @@ config :pleroma, :hackney_pools,
timeout: 300_000 timeout: 300_000
] ]


config :pleroma, :restrict_unauthenticated,
timelines: %{local: false, federated: false},
profiles: %{local: false, remote: false},
activities: %{local: false, remote: false}

# Import environment specific config. This must remain at the bottom # Import environment specific config. This must remain at the bottom
# of this file so it overrides the configuration defined above. # of this file so it overrides the configuration defined above.
import_config "#{Mix.env()}.exs" import_config "#{Mix.env()}.exs"

+ 60
- 0
config/description.exs View File

@@ -3128,5 +3128,65 @@ config :pleroma, :config_description, [
] ]
} }
] ]
},
%{
group: :pleroma,
key: :restrict_unauthenticated,
type: :group,
description:
"Disallow viewing timelines, user profiles and statuses for unauthenticated users.",
children: [
%{
key: :timelines,
type: :map,
description: "Settings for public and federated timelines.",
children: [
%{
key: :local,
type: :boolean,
description: "Disallow view public timeline."
},
%{
key: :federated,
type: :boolean,
description: "Disallow view federated timeline."
}
]
},
%{
key: :profiles,
type: :map,
description: "Settings for user profiles.",
children: [
%{
key: :local,
type: :boolean,
description: "Disallow view local user profiles."
},
%{
key: :remote,
type: :boolean,
description: "Disallow view remote user profiles."
}
]
},
%{
key: :activities,
type: :map,
description: "Settings for statuses.",
children: [
%{
key: :local,
type: :boolean,
description: "Disallow view local statuses."
},
%{
key: :remote,
type: :boolean,
description: "Disallow view remote statuses."
}
]
}
]
} }
] ]

+ 1
- 0
docs/API/differences_in_mastoapi_responses.md View File

@@ -117,6 +117,7 @@ The `type` value is `pleroma:emoji_reaction`. Has these fields:
Accepts additional parameters: Accepts additional parameters:


- `exclude_visibilities`: will exclude the notifications for activities with the given visibilities. The parameter accepts an array of visibility types (`public`, `unlisted`, `private`, `direct`). Usage example: `GET /api/v1/notifications?exclude_visibilities[]=direct&exclude_visibilities[]=private`. - `exclude_visibilities`: will exclude the notifications for activities with the given visibilities. The parameter accepts an array of visibility types (`public`, `unlisted`, `private`, `direct`). Usage example: `GET /api/v1/notifications?exclude_visibilities[]=direct&exclude_visibilities[]=private`.
- `include_types`: will include the notifications for activities with the given types. The parameter accepts an array of types (`mention`, `follow`, `reblog`, `favourite`, `move`, `pleroma:emoji_reaction`). Usage example: `GET /api/v1/notifications?include_types[]=mention&include_types[]=reblog`.


## POST `/api/v1/statuses` ## POST `/api/v1/statuses`




+ 18
- 0
docs/configuration/cheatsheet.md View File

@@ -907,3 +907,21 @@ config :auto_linker,
## :configurable_from_database ## :configurable_from_database


Boolean, enables/disables in-database configuration. Read [Transfering the config to/from the database](../administration/CLI_tasks/config.md) for more information. Boolean, enables/disables in-database configuration. Read [Transfering the config to/from the database](../administration/CLI_tasks/config.md) for more information.



## Restrict entities access for unauthenticated users

### :restrict_unauthenticated

Restrict access for unauthenticated users to timelines (public and federate), user profiles and statuses.

* `timelines` - public and federated timelines
* `local` - public timeline
* `federated`
* `profiles` - user profiles
* `local`
* `remote`
* `activities` - statuses
* `local`
* `remote`

+ 12
- 1
lib/pleroma/user.ex View File

@@ -237,7 +237,18 @@ defmodule Pleroma.User do


def visible_for?(%User{invisible: true}, _), do: false def visible_for?(%User{invisible: true}, _), do: false


def visible_for?(%User{id: user_id}, %User{id: for_id}) when user_id == for_id, do: true
def visible_for?(%User{id: user_id}, %User{id: user_id}), do: true

def visible_for?(%User{local: local} = user, nil) do
cfg_key =
if local,
do: :local,
else: :remote

if Config.get([:restrict_unauthenticated, :profiles, cfg_key]),
do: false,
else: account_status(user) == :active
end


def visible_for?(%User{} = user, for_user) do def visible_for?(%User{} = user, for_user) do
account_status(user) == :active || superuser?(for_user) account_status(user) == :active || superuser?(for_user)


+ 11
- 3
lib/pleroma/web/activity_pub/visibility.ex View File

@@ -44,6 +44,7 @@ defmodule Pleroma.Web.ActivityPub.Visibility do
def is_list?(%{data: %{"listMessage" => _}}), do: true def is_list?(%{data: %{"listMessage" => _}}), do: true
def is_list?(_), do: false def is_list?(_), do: false


@spec visible_for_user?(Activity.t(), User.t() | nil) :: boolean()
def visible_for_user?(%{actor: ap_id}, %User{ap_id: ap_id}), do: true def visible_for_user?(%{actor: ap_id}, %User{ap_id: ap_id}), do: true


def visible_for_user?(%{data: %{"listMessage" => list_ap_id}} = activity, %User{} = user) do def visible_for_user?(%{data: %{"listMessage" => list_ap_id}} = activity, %User{} = user) do
@@ -55,14 +56,21 @@ defmodule Pleroma.Web.ActivityPub.Visibility do


def visible_for_user?(%{data: %{"listMessage" => _}}, nil), do: false def visible_for_user?(%{data: %{"listMessage" => _}}, nil), do: false


def visible_for_user?(activity, nil) do
is_public?(activity)
def visible_for_user?(%{local: local} = activity, nil) do
cfg_key =
if local,
do: :local,
else: :remote

if Pleroma.Config.get([:restrict_unauthenticated, :activities, cfg_key]),
do: false,
else: is_public?(activity)
end end


def visible_for_user?(activity, user) do def visible_for_user?(activity, user) do
x = [user.ap_id | User.following(user)] x = [user.ap_id | User.following(user)]
y = [activity.actor] ++ activity.data["to"] ++ (activity.data["cc"] || []) y = [activity.actor] ++ activity.data["to"] ++ (activity.data["cc"] || [])
visible_for_user?(activity, nil) || Enum.any?(x, &(&1 in y))
is_public?(activity) || Enum.any?(x, &(&1 in y))
end end


def entire_thread_visible_for_user?(%Activity{} = activity, %User{} = user) do def entire_thread_visible_for_user?(%Activity{} = activity, %User{} = user) do


+ 4
- 3
lib/pleroma/web/controller_helper.ex View File

@@ -87,7 +87,8 @@ defmodule Pleroma.Web.ControllerHelper do
render_error(conn, :not_implemented, "Can't display this activity") render_error(conn, :not_implemented, "Can't display this activity")
end end


@spec put_in_if_exist(map(), atom() | String.t(), any) :: map()
def put_in_if_exist(map, _key, nil), do: map
def put_in_if_exist(map, key, value), do: put_in(map, key, value)
@spec put_if_exist(map(), atom() | String.t(), any) :: map()
def put_if_exist(map, _key, nil), do: map

def put_if_exist(map, key, value), do: Map.put(map, key, value)
end end

+ 3
- 3
lib/pleroma/web/feed/tag_controller.ex View File

@@ -9,18 +9,18 @@ defmodule Pleroma.Web.Feed.TagController do
alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.ActivityPub.ActivityPub
alias Pleroma.Web.Feed.FeedView alias Pleroma.Web.Feed.FeedView


import Pleroma.Web.ControllerHelper, only: [put_in_if_exist: 3]
import Pleroma.Web.ControllerHelper, only: [put_if_exist: 3]


def feed(conn, %{"tag" => raw_tag} = params) do def feed(conn, %{"tag" => raw_tag} = params) do
{format, tag} = parse_tag(raw_tag) {format, tag} = parse_tag(raw_tag)


activities = activities =
%{"type" => ["Create"], "tag" => tag} %{"type" => ["Create"], "tag" => tag}
|> put_in_if_exist("max_id", params["max_id"])
|> put_if_exist("max_id", params["max_id"])
|> ActivityPub.fetch_public_activities() |> ActivityPub.fetch_public_activities()


conn conn
|> put_resp_content_type("application/atom+xml")
|> put_resp_content_type("application/#{format}+xml")
|> put_view(FeedView) |> put_view(FeedView)
|> render("tag.#{format}", |> render("tag.#{format}",
activities: activities, activities: activities,


+ 13
- 4
lib/pleroma/web/feed/user_controller.ex View File

@@ -11,7 +11,7 @@ defmodule Pleroma.Web.Feed.UserController do
alias Pleroma.Web.ActivityPub.ActivityPubController alias Pleroma.Web.ActivityPub.ActivityPubController
alias Pleroma.Web.Feed.FeedView alias Pleroma.Web.Feed.FeedView


import Pleroma.Web.ControllerHelper, only: [put_in_if_exist: 3]
import Pleroma.Web.ControllerHelper, only: [put_if_exist: 3]


plug(Pleroma.Plugs.SetFormatPlug when action in [:feed_redirect]) plug(Pleroma.Plugs.SetFormatPlug when action in [:feed_redirect])


@@ -40,19 +40,28 @@ defmodule Pleroma.Web.Feed.UserController do
end end


def feed(conn, %{"nickname" => nickname} = params) do def feed(conn, %{"nickname" => nickname} = params) do
format = get_format(conn)

format =
if format in ["rss", "atom"] do
format
else
"atom"
end

with {_, %User{} = user} <- {:fetch_user, User.get_cached_by_nickname(nickname)} do with {_, %User{} = user} <- {:fetch_user, User.get_cached_by_nickname(nickname)} do
activities = activities =
%{ %{
"type" => ["Create"], "type" => ["Create"],
"actor_id" => user.ap_id "actor_id" => user.ap_id
} }
|> put_in_if_exist("max_id", params["max_id"])
|> put_if_exist("max_id", params["max_id"])
|> ActivityPub.fetch_public_activities() |> ActivityPub.fetch_public_activities()


conn conn
|> put_resp_content_type("application/atom+xml")
|> put_resp_content_type("application/#{format}+xml")
|> put_view(FeedView) |> put_view(FeedView)
|> render("user.xml",
|> render("user.#{format}",
user: user, user: user,
activities: activities, activities: activities,
feed_config: Pleroma.Config.get([:feed]) feed_config: Pleroma.Config.get([:feed])


+ 5
- 2
lib/pleroma/web/mastodon_api/controllers/account_controller.ex View File

@@ -60,7 +60,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do


plug( plug(
Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug
when action != :create
when action not in [:create, :show, :statuses]
) )


@relations [:follow, :unfollow] @relations [:follow, :unfollow]
@@ -259,7 +259,8 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do


@doc "GET /api/v1/accounts/:id/statuses" @doc "GET /api/v1/accounts/:id/statuses"
def statuses(%{assigns: %{user: reading_user}} = conn, params) do def statuses(%{assigns: %{user: reading_user}} = conn, params) do
with %User{} = user <- User.get_cached_by_nickname_or_id(params["id"], for: reading_user) do
with %User{} = user <- User.get_cached_by_nickname_or_id(params["id"], for: reading_user),
true <- User.visible_for?(user, reading_user) do
params = params =
params params
|> Map.put("tag", params["tagged"]) |> Map.put("tag", params["tagged"])
@@ -271,6 +272,8 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do
|> add_link_headers(activities) |> add_link_headers(activities)
|> put_view(StatusView) |> put_view(StatusView)
|> render("index.json", activities: activities, for: reading_user, as: :activity) |> render("index.json", activities: activities, for: reading_user, as: :activity)
else
_e -> render_error(conn, :not_found, "Can't find user")
end end
end end




+ 1
- 1
lib/pleroma/web/mastodon_api/controllers/status_controller.ex View File

@@ -76,7 +76,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do
%{scopes: ["write:bookmarks"]} when action in [:bookmark, :unbookmark] %{scopes: ["write:bookmarks"]} when action in [:bookmark, :unbookmark]
) )


plug(Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug)
plug(Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug when action not in [:index, :show])


@rate_limited_status_actions ~w(reblog unreblog favourite unfavourite create delete)a @rate_limited_status_actions ~w(reblog unreblog favourite unfavourite create delete)a




+ 24
- 11
lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex View File

@@ -27,7 +27,7 @@ defmodule Pleroma.Web.MastodonAPI.TimelineController do
plug(OAuthScopesPlug, %{scopes: ["read:statuses"]} when action in [:home, :direct]) plug(OAuthScopesPlug, %{scopes: ["read:statuses"]} when action in [:home, :direct])
plug(OAuthScopesPlug, %{scopes: ["read:lists"]} when action == :list) plug(OAuthScopesPlug, %{scopes: ["read:lists"]} when action == :list)


plug(Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug)
plug(Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug when action != :public)


plug(:put_view, Pleroma.Web.MastodonAPI.StatusView) plug(:put_view, Pleroma.Web.MastodonAPI.StatusView)


@@ -75,17 +75,30 @@ defmodule Pleroma.Web.MastodonAPI.TimelineController do
def public(%{assigns: %{user: user}} = conn, params) do def public(%{assigns: %{user: user}} = conn, params) do
local_only = truthy_param?(params["local"]) local_only = truthy_param?(params["local"])


activities =
params
|> Map.put("type", ["Create", "Announce"])
|> Map.put("local_only", local_only)
|> Map.put("blocking_user", user)
|> Map.put("muting_user", user)
|> ActivityPub.fetch_public_activities()
cfg_key =
if local_only do
:local
else
:federated
end


conn
|> add_link_headers(activities, %{"local" => local_only})
|> render("index.json", activities: activities, for: user, as: :activity)
restrict? = Pleroma.Config.get([:restrict_unauthenticated, :timelines, cfg_key])

if not (restrict? and is_nil(user)) do
activities =
params
|> Map.put("type", ["Create", "Announce"])
|> Map.put("local_only", local_only)
|> Map.put("blocking_user", user)
|> Map.put("muting_user", user)
|> ActivityPub.fetch_public_activities()

conn
|> add_link_headers(activities, %{"local" => local_only})
|> render("index.json", activities: activities, for: user, as: :activity)
else
render_error(conn, :unauthorized, "authorization required for timeline view")
end
end end


def hashtag_fetching(params, user, local_only) do def hashtag_fetching(params, user, local_only) do


+ 16
- 6
lib/pleroma/web/mastodon_api/mastodon_api.ex View File

@@ -55,6 +55,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPI do


user user
|> Notification.for_user_query(options) |> Notification.for_user_query(options)
|> restrict(:include_types, options)
|> restrict(:exclude_types, options) |> restrict(:exclude_types, options)
|> restrict(:account_ap_id, options) |> restrict(:account_ap_id, options)
|> Pagination.fetch_paginated(params) |> Pagination.fetch_paginated(params)
@@ -69,6 +70,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPI do
defp cast_params(params) do defp cast_params(params) do
param_types = %{ param_types = %{
exclude_types: {:array, :string}, exclude_types: {:array, :string},
include_types: {:array, :string},
exclude_visibilities: {:array, :string}, exclude_visibilities: {:array, :string},
reblogs: :boolean, reblogs: :boolean,
with_muted: :boolean, with_muted: :boolean,
@@ -79,14 +81,16 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPI do
changeset.changes changeset.changes
end end


defp restrict(query, :include_types, %{include_types: mastodon_types = [_ | _]}) do
ap_types = convert_and_filter_mastodon_types(mastodon_types)

where(query, [q, a], fragment("? @> ARRAY[?->>'type']::varchar[]", ^ap_types, a.data))
end

defp restrict(query, :exclude_types, %{exclude_types: mastodon_types = [_ | _]}) do defp restrict(query, :exclude_types, %{exclude_types: mastodon_types = [_ | _]}) do
ap_types =
mastodon_types
|> Enum.map(&Activity.from_mastodon_notification_type/1)
|> Enum.filter(& &1)
ap_types = convert_and_filter_mastodon_types(mastodon_types)


query
|> where([q, a], not fragment("? @> ARRAY[?->>'type']::varchar[]", ^ap_types, a.data))
where(query, [q, a], not fragment("? @> ARRAY[?->>'type']::varchar[]", ^ap_types, a.data))
end end


defp restrict(query, :account_ap_id, %{account_ap_id: account_ap_id}) do defp restrict(query, :account_ap_id, %{account_ap_id: account_ap_id}) do
@@ -94,4 +98,10 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPI do
end end


defp restrict(query, _, _), do: query defp restrict(query, _, _), do: query

defp convert_and_filter_mastodon_types(types) do
types
|> Enum.map(&Activity.from_mastodon_notification_type/1)
|> Enum.filter(& &1)
end
end end

+ 1
- 0
lib/pleroma/web/nodeinfo/nodeinfo_controller.ex View File

@@ -60,6 +60,7 @@ defmodule Pleroma.Web.Nodeinfo.NodeinfoController do
"pleroma_explicit_addressing", "pleroma_explicit_addressing",
"shareable_emoji_packs", "shareable_emoji_packs",
"multifetch", "multifetch",
"pleroma:api/v1/notifications:include_types_filter",
if Config.get([:media_proxy, :enabled]) do if Config.get([:media_proxy, :enabled]) do
"media_proxy" "media_proxy"
end, end,


+ 1
- 1
lib/pleroma/web/router.ex View File

@@ -513,7 +513,7 @@ defmodule Pleroma.Web.Router do
end end


pipeline :ostatus do pipeline :ostatus do
plug(:accepts, ["html", "xml", "atom", "activity+json", "json"])
plug(:accepts, ["html", "xml", "rss", "atom", "activity+json", "json"])
plug(Pleroma.Plugs.StaticFEPlug) plug(Pleroma.Plugs.StaticFEPlug)
end end




lib/pleroma/web/templates/feed/feed/_activity.xml.eex → lib/pleroma/web/templates/feed/feed/_activity.atom.eex View File


+ 49
- 0
lib/pleroma/web/templates/feed/feed/_activity.rss.eex View File

@@ -0,0 +1,49 @@
<item>
<activity:object-type>http://activitystrea.ms/schema/1.0/note</activity:object-type>
<activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb>
<guid><%= @data["id"] %></guid>
<title><%= activity_title(@object, Keyword.get(@feed_config, :post_title, %{})) %></title>
<description><%= activity_content(@object) %></description>
<pubDate><%= @data["published"] %></pubDate>
<updated><%= @data["published"] %></updated>
<ostatus:conversation ref="<%= activity_context(@activity) %>">
<%= activity_context(@activity) %>
</ostatus:conversation>
<link rel="ostatus:conversation"><%= activity_context(@activity) %></link>

<%= if @data["summary"] do %>
<description><%= @data["summary"] %></description>
<% end %>

<%= if @activity.local do %>
<link><%= @data["id"] %></link>
<% else %>
<link><%= @data["external_url"] %></link>
<% end %>

<%= for tag <- @data["tag"] || [] do %>
<category term="<%= tag %>"></category>
<% end %>

<%= for attachment <- @data["attachment"] || [] do %>
<link type="<%= attachment_type(attachment) %>"><%= attachment_href(attachment) %></link>
<% end %>

<%= if @data["inReplyTo"] do %>
<thr:in-reply-to ref='<%= @data["inReplyTo"] %>' href='<%= get_href(@data["inReplyTo"]) %>'/>
<% end %>

<%= for id <- @activity.recipients do %>
<%= if id == Pleroma.Constants.as_public() do %>
<link rel="mentioned" ostatus:object-type="http://activitystrea.ms/schema/1.0/collection">http://activityschema.org/collection/public</link>
<% else %>
<%= unless Regex.match?(~r/^#{Pleroma.Web.base_url()}.+followers$/, id) do %>
<link rel="mentioned" ostatus:object-type="http://activitystrea.ms/schema/1.0/person"><%= id %></link>
<% end %>
<% end %>
<% end %>

<%= for {emoji, file} <- @data["emoji"] || %{} do %>
<link name="<%= emoji %>" rel="emoji"><%= file %></link>
<% end %>
</item>

lib/pleroma/web/templates/feed/feed/_author.xml.eex → lib/pleroma/web/templates/feed/feed/_author.atom.eex View File


+ 17
- 0
lib/pleroma/web/templates/feed/feed/_author.rss.eex View File

@@ -0,0 +1,17 @@
<managingEditor>
<guid><%= @user.ap_id %></guid>
<activity:object>http://activitystrea.ms/schema/1.0/person</activity:object>
<uri><%= @user.ap_id %></uri>
<poco:preferredUsername><%= @user.nickname %></poco:preferredUsername>
<poco:displayName><%= @user.name %></poco:displayName>
<poco:note><%= escape(@user.bio) %></poco:note>
<description><%= escape(@user.bio) %></description>
<name><%= @user.nickname %></name>
<link rel="avatar"><%= User.avatar_url(@user) %></link>
<%= if User.banner_url(@user) do %>
<link rel="header"><%= User.banner_url(@user) %></link>
<% end %>
<%= if @user.local do %>
<ap_enabled>true</ap_enabled>
<% end %>
</managingEditor>

lib/pleroma/web/templates/feed/feed/user.xml.eex → lib/pleroma/web/templates/feed/feed/user.atom.eex View File

@@ -12,13 +12,13 @@
<logo><%= logo(@user) %></logo> <logo><%= logo(@user) %></logo>
<link rel="self" href="<%= '#{user_feed_url(@conn, :feed, @user.nickname)}.atom' %>" type="application/atom+xml"/> <link rel="self" href="<%= '#{user_feed_url(@conn, :feed, @user.nickname)}.atom' %>" type="application/atom+xml"/>


<%= render @view_module, "_author.xml", assigns %>
<%= render @view_module, "_author.atom", assigns %>


<%= if last_activity(@activities) do %> <%= if last_activity(@activities) do %>
<link rel="next" href="<%= '#{user_feed_url(@conn, :feed, @user.nickname)}.atom?max_id=#{last_activity(@activities).id}' %>" type="application/atom+xml"/> <link rel="next" href="<%= '#{user_feed_url(@conn, :feed, @user.nickname)}.atom?max_id=#{last_activity(@activities).id}' %>" type="application/atom+xml"/>
<% end %> <% end %>


<%= for activity <- @activities do %> <%= for activity <- @activities do %>
<%= render @view_module, "_activity.xml", Map.merge(assigns, prepare_activity(activity)) %>
<%= render @view_module, "_activity.atom", Map.merge(assigns, prepare_activity(activity)) %>
<% end %> <% end %>
</feed> </feed>

+ 20
- 0
lib/pleroma/web/templates/feed/feed/user.rss.eex View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<guid><%= user_feed_url(@conn, :feed, @user.nickname) <> ".rss" %></guid>
<title><%= @user.nickname <> "'s timeline" %></title>
<updated><%= most_recent_update(@activities, @user) %></updated>
<image><%= logo(@user) %></image>
<link><%= '#{user_feed_url(@conn, :feed, @user.nickname)}.rss' %></link>

<%= render @view_module, "_author.rss", assigns %>

<%= if last_activity(@activities) do %>
<link rel="next"><%= '#{user_feed_url(@conn, :feed, @user.nickname)}.rss?max_id=#{last_activity(@activities).id}' %></link>
<% end %>

<%= for activity <- @activities do %>
<%= render @view_module, "_activity.rss", Map.merge(assigns, prepare_activity(activity)) %>
<% end %>
</channel>
</rss>

+ 1
- 1
test/activity_expiration_test.exs View File

@@ -7,7 +7,7 @@ defmodule Pleroma.ActivityExpirationTest do
alias Pleroma.ActivityExpiration alias Pleroma.ActivityExpiration
import Pleroma.Factory import Pleroma.Factory


clear_config([ActivityExpiration, :enabled])
setup do: clear_config([ActivityExpiration, :enabled])


test "finds activities due to be deleted only" do test "finds activities due to be deleted only" do
activity = insert(:note_activity) activity = insert(:note_activity)


+ 1
- 1
test/activity_test.exs View File

@@ -138,7 +138,7 @@ defmodule Pleroma.ActivityTest do
} }
end end


clear_config([:instance, :limit_to_local_content])
setup do: clear_config([:instance, :limit_to_local_content])


test "finds utf8 text in statuses", %{ test "finds utf8 text in statuses", %{
japanese_activity: japanese_activity, japanese_activity: japanese_activity,


+ 1
- 2
test/captcha_test.exs View File

@@ -12,8 +12,7 @@ defmodule Pleroma.CaptchaTest do
alias Pleroma.Captcha.Native alias Pleroma.Captcha.Native


@ets_options [:ordered_set, :private, :named_table, {:read_concurrency, true}] @ets_options [:ordered_set, :private, :named_table, {:read_concurrency, true}]

clear_config([Pleroma.Captcha, :enabled])
setup do: clear_config([Pleroma.Captcha, :enabled])


describe "Kocaptcha" do describe "Kocaptcha" do
setup do setup do


+ 1
- 3
test/config/transfer_task_test.exs View File

@@ -10,9 +10,7 @@ defmodule Pleroma.Config.TransferTaskTest do
alias Pleroma.Config.TransferTask alias Pleroma.Config.TransferTask
alias Pleroma.ConfigDB alias Pleroma.ConfigDB


clear_config(:configurable_from_database) do
Pleroma.Config.put(:configurable_from_database, true)
end
setup do: clear_config(:configurable_from_database, true)


test "transfer config values from db to env" do test "transfer config values from db to env" do
refute Application.get_env(:pleroma, :test_key) refute Application.get_env(:pleroma, :test_key)


+ 1
- 3
test/conversation_test.exs View File

@@ -11,9 +11,7 @@ defmodule Pleroma.ConversationTest do


import Pleroma.Factory import Pleroma.Factory


clear_config_all([:instance, :federating]) do
Pleroma.Config.put([:instance, :federating], true)
end
setup_all do: clear_config([:instance, :federating], true)


test "it goes through old direct conversations" do test "it goes through old direct conversations" do
user = insert(:user) user = insert(:user)


+ 1
- 2
test/emails/mailer_test.exs View File

@@ -14,8 +14,7 @@ defmodule Pleroma.Emails.MailerTest do
subject: "Pleroma test email", subject: "Pleroma test email",
to: [{"Test User", "user1@example.com"}] to: [{"Test User", "user1@example.com"}]
} }

clear_config([Pleroma.Emails.Mailer, :enabled])
setup do: clear_config([Pleroma.Emails.Mailer, :enabled])


test "not send email when mailer is disabled" do test "not send email when mailer is disabled" do
Pleroma.Config.put([Pleroma.Emails.Mailer, :enabled], false) Pleroma.Config.put([Pleroma.Emails.Mailer, :enabled], false)


+ 2
- 2
test/http/request_builder_test.exs View File

@@ -10,8 +10,8 @@ defmodule Pleroma.HTTP.RequestBuilderTest do
alias Pleroma.HTTP.RequestBuilder alias Pleroma.HTTP.RequestBuilder


describe "headers/2" do describe "headers/2" do
clear_config([:http, :send_user_agent])
clear_config([:http, :user_agent])
setup do: clear_config([:http, :send_user_agent])
setup do: clear_config([:http, :user_agent])


test "don't send pleroma user agent" do test "don't send pleroma user agent" do
assert RequestBuilder.headers(%Request{}, []) == %Request{headers: []} assert RequestBuilder.headers(%Request{}, []) == %Request{headers: []}


+ 2
- 3
test/object/fetcher_test.exs View File

@@ -28,8 +28,7 @@ defmodule Pleroma.Object.FetcherTest do


describe "max thread distance restriction" do describe "max thread distance restriction" do
@ap_id "http://mastodon.example.org/@admin/99541947525187367" @ap_id "http://mastodon.example.org/@admin/99541947525187367"

clear_config([:instance, :federation_incoming_replies_max_depth])
setup do: clear_config([:instance, :federation_incoming_replies_max_depth])


test "it returns thread depth exceeded error if thread depth is exceeded" do test "it returns thread depth exceeded error if thread depth is exceeded" do
Pleroma.Config.put([:instance, :federation_incoming_replies_max_depth], 0) Pleroma.Config.put([:instance, :federation_incoming_replies_max_depth], 0)
@@ -160,7 +159,7 @@ defmodule Pleroma.Object.FetcherTest do
end end


describe "signed fetches" do describe "signed fetches" do
clear_config([:activitypub, :sign_object_fetches])
setup do: clear_config([:activitypub, :sign_object_fetches])


test_with_mock "it signs fetches when configured to do so", test_with_mock "it signs fetches when configured to do so",
Pleroma.Signature, Pleroma.Signature,


+ 2
- 2
test/object_test.exs View File

@@ -74,8 +74,8 @@ defmodule Pleroma.ObjectTest do
end end


describe "delete attachments" do describe "delete attachments" do
clear_config([Pleroma.Upload])
clear_config([:instance, :cleanup_attachments])
setup do: clear_config([Pleroma.Upload])
setup do: clear_config([:instance, :cleanup_attachments])


test "Disabled via config" do test "Disabled via config" do
Pleroma.Config.put([Pleroma.Upload, :uploader], Pleroma.Uploaders.Local) Pleroma.Config.put([Pleroma.Upload, :uploader], Pleroma.Uploaders.Local)


+ 1
- 1
test/plugs/admin_secret_authentication_plug_test.exs View File

@@ -23,7 +23,7 @@ defmodule Pleroma.Plugs.AdminSecretAuthenticationPlugTest do
end end


describe "when secret set it assigns an admin user" do describe "when secret set it assigns an admin user" do
clear_config([:admin_token])
setup do: clear_config([:admin_token])


test "with `admin_token` query parameter", %{conn: conn} do test "with `admin_token` query parameter", %{conn: conn} do
Pleroma.Config.put(:admin_token, "password123") Pleroma.Config.put(:admin_token, "password123")


+ 1
- 1
test/plugs/ensure_public_or_authenticated_plug_test.exs View File

@@ -9,7 +9,7 @@ defmodule Pleroma.Plugs.EnsurePublicOrAuthenticatedPlugTest do
alias Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug alias Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug
alias Pleroma.User alias Pleroma.User


clear_config([:instance, :public])
setup do: clear_config([:instance, :public])


test "it halts if not public and no user is assigned", %{conn: conn} do test "it halts if not public and no user is assigned", %{conn: conn} do
Config.put([:instance, :public], false) Config.put([:instance, :public], false)


+ 3
- 3
test/plugs/http_security_plug_test.exs View File

@@ -7,9 +7,9 @@ defmodule Pleroma.Web.Plugs.HTTPSecurityPlugTest do
alias Pleroma.Config alias Pleroma.Config
alias Plug.Conn alias Plug.Conn


clear_config([:http_securiy, :enabled])
clear_config([:http_security, :sts])
clear_config([:http_security, :referrer_policy])
setup do: clear_config([:http_securiy, :enabled])
setup do: clear_config([:http_security, :sts])
setup do: clear_config([:http_security, :referrer_policy])


describe "http security enabled" do describe "http security enabled" do
setup do setup do


+ 1
- 3
test/plugs/instance_static_test.exs View File

@@ -12,9 +12,7 @@ defmodule Pleroma.Web.RuntimeStaticPlugTest do
on_exit(fn -> File.rm_rf(@dir) end) on_exit(fn -> File.rm_rf(@dir) end)
end end


clear_config([:instance, :static_dir]) do
Pleroma.Config.put([:instance, :static_dir], @dir)
end
setup do: clear_config([:instance, :static_dir], @dir)


test "overrides index" do test "overrides index" do
bundled_index = get(build_conn(), "/") bundled_index = get(build_conn(), "/")


+ 1
- 1
test/plugs/oauth_scopes_plug_test.exs View File

@@ -193,7 +193,7 @@ defmodule Pleroma.Plugs.OAuthScopesPlugTest do
end end


describe "transform_scopes/2" do describe "transform_scopes/2" do
clear_config([:auth, :enforce_oauth_admin_scope_usage])
setup do: clear_config([:auth, :enforce_oauth_admin_scope_usage])


setup do setup do
{:ok, %{f: &OAuthScopesPlug.transform_scopes/2}} {:ok, %{f: &OAuthScopesPlug.transform_scopes/2}}


+ 3
- 5
test/plugs/rate_limiter_test.exs View File

@@ -12,14 +12,12 @@ defmodule Pleroma.Plugs.RateLimiterTest do
import Pleroma.Tests.Helpers, only: [clear_config: 1, clear_config: 2] import Pleroma.Tests.Helpers, only: [clear_config: 1, clear_config: 2]


# Note: each example must work with separate buckets in order to prevent concurrency issues # Note: each example must work with separate buckets in order to prevent concurrency issues

clear_config([Pleroma.Web.Endpoint, :http, :ip])
clear_config(:rate_limit)
setup do: clear_config([Pleroma.Web.Endpoint, :http, :ip])
setup do: clear_config(:rate_limit)


describe "config" do describe "config" do
@limiter_name :test_init @limiter_name :test_init

clear_config([Pleroma.Plugs.RemoteIp, :enabled])
setup do: clear_config([Pleroma.Plugs.RemoteIp, :enabled])


test "config is required for plug to work" do test "config is required for plug to work" do
Config.put([:rate_limit, @limiter_name], {1, 1}) Config.put([:rate_limit, @limiter_name], {1, 1})


+ 1
- 2
test/plugs/remote_ip_test.exs View File

@@ -9,8 +9,7 @@ defmodule Pleroma.Plugs.RemoteIpTest do
alias Pleroma.Plugs.RemoteIp alias Pleroma.Plugs.RemoteIp


import Pleroma.Tests.Helpers, only: [clear_config: 1, clear_config: 2] import Pleroma.Tests.Helpers, only: [clear_config: 1, clear_config: 2]

clear_config(RemoteIp)
setup do: clear_config(RemoteIp)


test "disabled" do test "disabled" do
Pleroma.Config.put(RemoteIp, enabled: false) Pleroma.Config.put(RemoteIp, enabled: false)


+ 1
- 1
test/plugs/user_enabled_plug_test.exs View File

@@ -8,7 +8,7 @@ defmodule Pleroma.Plugs.UserEnabledPlugTest do
alias Pleroma.Plugs.UserEnabledPlug alias Pleroma.Plugs.UserEnabledPlug
import Pleroma.Factory import Pleroma.Factory


clear_config([:instance, :account_activation_required])
setup do: clear_config([:instance, :account_activation_required])


test "doesn't do anything if the user isn't set", %{conn: conn} do test "doesn't do anything if the user isn't set", %{conn: conn} do
ret_conn = ret_conn =


+ 2
- 6
test/plugs/user_is_admin_plug_test.exs View File

@@ -9,9 +9,7 @@ defmodule Pleroma.Plugs.UserIsAdminPlugTest do
import Pleroma.Factory import Pleroma.Factory


describe "unless [:auth, :enforce_oauth_admin_scope_usage]," do describe "unless [:auth, :enforce_oauth_admin_scope_usage]," do
clear_config([:auth, :enforce_oauth_admin_scope_usage]) do
Pleroma.Config.put([:auth, :enforce_oauth_admin_scope_usage], false)
end
setup do: clear_config([:auth, :enforce_oauth_admin_scope_usage], false)


test "accepts a user that is an admin" do test "accepts a user that is an admin" do
user = insert(:user, is_admin: true) user = insert(:user, is_admin: true)
@@ -42,9 +40,7 @@ defmodule Pleroma.Plugs.UserIsAdminPlugTest do
end end


describe "with [:auth, :enforce_oauth_admin_scope_usage]," do describe "with [:auth, :enforce_oauth_admin_scope_usage]," do
clear_config([:auth, :enforce_oauth_admin_scope_usage]) do
Pleroma.Config.put([:auth, :enforce_oauth_admin_scope_usage], true)
end
setup do: clear_config([:auth, :enforce_oauth_admin_scope_usage], true)


setup do setup do
admin_user = insert(:user, is_admin: true) admin_user = insert(:user, is_admin: true)


+ 1
- 1
test/repo_test.exs View File

@@ -67,7 +67,7 @@ defmodule Pleroma.RepoTest do
:ok :ok
end end


clear_config([:i_am_aware_this_may_cause_data_loss, :disable_migration_check])
setup do: clear_config([:i_am_aware_this_may_cause_data_loss, :disable_migration_check])


test "raises if it detects unapplied migrations" do test "raises if it detects unapplied migrations" do
assert_raise Pleroma.Repo.UnappliedMigrationsError, fn -> assert_raise Pleroma.Repo.UnappliedMigrationsError, fn ->


+ 1
- 1
test/scheduled_activity_test.exs View File

@@ -8,7 +8,7 @@ defmodule Pleroma.ScheduledActivityTest do
alias Pleroma.ScheduledActivity alias Pleroma.ScheduledActivity
import Pleroma.Factory import Pleroma.Factory


clear_config([ScheduledActivity, :enabled])
setup do: clear_config([ScheduledActivity, :enabled])


setup context do setup context do
DataCase.ensure_local_uploader(context) DataCase.ensure_local_uploader(context)


+ 8
- 28
test/support/helpers.ex View File

@@ -17,35 +17,17 @@ defmodule Pleroma.Tests.Helpers do


defmacro clear_config(config_path, do: yield) do defmacro clear_config(config_path, do: yield) do
quote do quote do
setup do
initial_setting = Config.get(unquote(config_path))
unquote(yield)
on_exit(fn -> Config.put(unquote(config_path), initial_setting) end)
:ok
end
end
end

@doc "Stores initial config value and restores it after *all* test examples are executed."
defmacro clear_config_all(config_path) do
quote do
clear_config_all(unquote(config_path)) do
end
initial_setting = Config.get(unquote(config_path))
unquote(yield)
on_exit(fn -> Config.put(unquote(config_path), initial_setting) end)
:ok
end end
end end


@doc """
Stores initial config value and restores it after *all* test examples are executed.
Only use if *all* test examples should work with the same stubbed value
(*no* examples set a different value).
"""
defmacro clear_config_all(config_path, do: yield) do
defmacro clear_config(config_path, temp_setting) do
quote do quote do
setup_all do
initial_setting = Config.get(unquote(config_path))
unquote(yield)
on_exit(fn -> Config.put(unquote(config_path), initial_setting) end)
:ok
clear_config(unquote(config_path)) do
Config.put(unquote(config_path), unquote(temp_setting))
end end
end end
end end
@@ -55,9 +37,7 @@ defmodule Pleroma.Tests.Helpers do
import Pleroma.Tests.Helpers, import Pleroma.Tests.Helpers,
only: [ only: [
clear_config: 1, clear_config: 1,
clear_config: 2,
clear_config_all: 1,
clear_config_all: 2
clear_config: 2
] ]


def to_datetime(naive_datetime) do def to_datetime(naive_datetime) do


+ 1
- 3
test/tasks/config_test.exs View File

@@ -20,9 +20,7 @@ defmodule Mix.Tasks.Pleroma.ConfigTest do
:ok :ok
end end


clear_config_all(:configurable_from_database) do
Pleroma.Config.put(:configurable_from_database, true)
end
setup_all do: clear_config(:configurable_from_database, true)


test "error if file with custom settings doesn't exist" do test "error if file with custom settings doesn't exist" do
Mix.Tasks.Pleroma.Config.migrate_to_db("config/not_existance_config_file.exs") Mix.Tasks.Pleroma.Config.migrate_to_db("config/not_existance_config_file.exs")


+ 1
- 1
test/tasks/robots_txt_test.exs View File

@@ -7,7 +7,7 @@ defmodule Mix.Tasks.Pleroma.RobotsTxtTest do
use Pleroma.Tests.Helpers use Pleroma.Tests.Helpers
alias Mix.Tasks.Pleroma.RobotsTxt alias Mix.Tasks.Pleroma.RobotsTxt


clear_config([:instance, :static_dir])
setup do: clear_config([:instance, :static_dir])


test "creates new dir" do test "creates new dir" do
path = "test/fixtures/new_dir/" path = "test/fixtures/new_dir/"


+ 1
- 1
test/upload/filter/anonymize_filename_test.exs View File

@@ -18,7 +18,7 @@ defmodule Pleroma.Upload.Filter.AnonymizeFilenameTest do
%{upload_file: upload_file} %{upload_file: upload_file}
end end


clear_config([Pleroma.Upload.Filter.AnonymizeFilename, :text])
setup do: clear_config([Pleroma.Upload.Filter.AnonymizeFilename, :text])


test "it replaces filename on pre-defined text", %{upload_file: upload_file} do test "it replaces filename on pre-defined text", %{upload_file: upload_file} do
Config.put([Upload.Filter.AnonymizeFilename, :text], "custom-file.png") Config.put([Upload.Filter.AnonymizeFilename, :text], "custom-file.png")


+ 1
- 1
test/upload/filter/mogrify_test.exs View File

@@ -10,7 +10,7 @@ defmodule Pleroma.Upload.Filter.MogrifyTest do
alias Pleroma.Upload alias Pleroma.Upload
alias Pleroma.Upload.Filter alias Pleroma.Upload.Filter


clear_config([Filter.Mogrify, :args])
setup do: clear_config([Filter.Mogrify, :args])


test "apply mogrify filter" do test "apply mogrify filter" do
Config.put([Filter.Mogrify, :args], [{"tint", "40"}]) Config.put([Filter.Mogrify, :args], [{"tint", "40"}])


+ 1
- 1
test/upload/filter_test.exs View File

@@ -8,7 +8,7 @@ defmodule Pleroma.Upload.FilterTest do
alias Pleroma.Config alias Pleroma.Config
alias Pleroma.Upload.Filter alias Pleroma.Upload.Filter


clear_config([Pleroma.Upload.Filter.AnonymizeFilename, :text])
setup do: clear_config([Pleroma.Upload.Filter.AnonymizeFilename, :text])


test "applies filters" do test "applies filters" do
Config.put([Pleroma.Upload.Filter.AnonymizeFilename, :text], "custom-file.png") Config.put([Pleroma.Upload.Filter.AnonymizeFilename, :text], "custom-file.png")


+ 1
- 3
test/upload_test.exs View File

@@ -250,9 +250,7 @@ defmodule Pleroma.UploadTest do
end end


describe "Setting a custom base_url for uploaded media" do describe "Setting a custom base_url for uploaded media" do
clear_config([Pleroma.Upload, :base_url]) do
Pleroma.Config.put([Pleroma.Upload, :base_url], "https://cache.pleroma.social")
end
setup do: clear_config([Pleroma.Upload, :base_url], "https://cache.pleroma.social")


test "returns a media url with configured base_url" do test "returns a media url with configured base_url" do
base_url = Pleroma.Config.get([Pleroma.Upload, :base_url]) base_url = Pleroma.Config.get([Pleroma.Upload, :base_url])


+ 5
- 6
test/uploaders/s3_test.exs View File

@@ -11,12 +11,11 @@ defmodule Pleroma.Uploaders.S3Test do
import Mock import Mock
import ExUnit.CaptureLog import ExUnit.CaptureLog


clear_config([Pleroma.Uploaders.S3]) do
Config.put([Pleroma.Uploaders.S3],
bucket: "test_bucket",
public_endpoint: "https://s3.amazonaws.com"
)
end
setup do:
clear_config(Pleroma.Uploaders.S3,
bucket: "test_bucket",
public_endpoint: "https://s3.amazonaws.com"
)


describe "get_file/1" do describe "get_file/1" do
test "it returns path to local folder for files" do test "it returns path to local folder for files" do


+ 1
- 1
test/user_search_test.exs View File

@@ -15,7 +15,7 @@ defmodule Pleroma.UserSearchTest do
end end


describe "User.search" do describe "User.search" do
clear_config([:instance, :limit_to_local_content])
setup do: clear_config([:instance, :limit_to_local_content])


test "excluded invisible users from results" do test "excluded invisible users from results" do
user = insert(:user, %{nickname: "john t1000"}) user = insert(:user, %{nickname: "john t1000"})


+ 13
- 18
test/user_test.exs View File

@@ -24,7 +24,7 @@ defmodule Pleroma.UserTest do
:ok :ok
end end


clear_config([:instance, :account_activation_required])
setup do: clear_config([:instance, :account_activation_required])


describe "service actors" do describe "service actors" do
test "returns updated invisible actor" do test "returns updated invisible actor" do
@@ -297,7 +297,7 @@ defmodule Pleroma.UserTest do
end end


describe "unfollow/2" do describe "unfollow/2" do
clear_config([:instance, :external_user_synchronization])
setup do: clear_config([:instance, :external_user_synchronization])


test "unfollow with syncronizes external user" do test "unfollow with syncronizes external user" do
Pleroma.Config.put([:instance, :external_user_synchronization], true) Pleroma.Config.put([:instance, :external_user_synchronization], true)
@@ -375,10 +375,9 @@ defmodule Pleroma.UserTest do
password_confirmation: "test", password_confirmation: "test",
email: "email@example.com" email: "email@example.com"
} }

clear_config([:instance, :autofollowed_nicknames])
clear_config([:instance, :welcome_message])
clear_config([:instance, :welcome_user_nickname])
setup do: clear_config([:instance, :autofollowed_nicknames])
setup do: clear_config([:instance, :welcome_message])
setup do: clear_config([:instance, :welcome_user_nickname])


test "it autofollows accounts that are set for it" do test "it autofollows accounts that are set for it" do
user = insert(:user) user = insert(:user)
@@ -412,7 +411,7 @@ defmodule Pleroma.UserTest do
assert activity.actor == welcome_user.ap_id assert activity.actor == welcome_user.ap_id
end end


clear_config([:instance, :account_activation_required])
setup do: clear_config([:instance, :account_activation_required])


test "it requires an email, name, nickname and password, bio is optional when account_activation_required is enabled" do test "it requires an email, name, nickname and password, bio is optional when account_activation_required is enabled" do
Pleroma.Config.put([:instance, :account_activation_required], true) Pleroma.Config.put([:instance, :account_activation_required], true)
@@ -475,10 +474,7 @@ defmodule Pleroma.UserTest do
password_confirmation: "test", password_confirmation: "test",
email: "email@example.com" email: "email@example.com"
} }

clear_config([:instance, :account_activation_required]) do
Pleroma.Config.put([:instance, :account_activation_required], true)
end
setup do: clear_config([:instance, :account_activation_required], true)


test "it creates unconfirmed user" do test "it creates unconfirmed user" do
changeset = User.register_changeset(%User{}, @full_user_data) changeset = User.register_changeset(%User{}, @full_user_data)
@@ -621,9 +617,8 @@ defmodule Pleroma.UserTest do
ap_id: "http...", ap_id: "http...",
avatar: %{some: "avatar"} avatar: %{some: "avatar"}
} }

clear_config([:instance, :user_bio_length])
clear_config([:instance, :user_name_length])
setup do: clear_config([:instance, :user_bio_length])
setup do: clear_config([:instance, :user_name_length])


test "it confirms validity" do test "it confirms validity" do
cs = User.remote_user_creation(@valid_remote) cs = User.remote_user_creation(@valid_remote)
@@ -1116,7 +1111,7 @@ defmodule Pleroma.UserTest do
[user: user] [user: user]
end end


clear_config([:instance, :federating])
setup do: clear_config([:instance, :federating])


test ".delete_user_activities deletes all create activities", %{user: user} do test ".delete_user_activities deletes all create activities", %{user: user} do
{:ok, activity} = CommonAPI.post(user, %{"status" => "2hu"}) {:ok, activity} = CommonAPI.post(user, %{"status" => "2hu"})
@@ -1297,7 +1292,7 @@ defmodule Pleroma.UserTest do
end end


describe "account_status/1" do describe "account_status/1" do
clear_config([:instance, :account_activation_required])
setup do: clear_config([:instance, :account_activation_required])


test "return confirmation_pending for unconfirm user" do test "return confirmation_pending for unconfirm user" do
Pleroma.Config.put([:instance, :account_activation_required], true) Pleroma.Config.put([:instance, :account_activation_required], true)
@@ -1665,7 +1660,7 @@ defmodule Pleroma.UserTest do
end end


describe "following/followers synchronization" do describe "following/followers synchronization" do
clear_config([:instance, :external_user_synchronization])
setup do: clear_config([:instance, :external_user_synchronization])


test "updates the counters normally on following/getting a follow when disabled" do test "updates the counters normally on following/getting a follow when disabled" do
Pleroma.Config.put([:instance, :external_user_synchronization], false) Pleroma.Config.put([:instance, :external_user_synchronization], false)
@@ -1770,7 +1765,7 @@ defmodule Pleroma.UserTest do
[local_user: local_user, remote_user: remote_user] [local_user: local_user, remote_user: remote_user]
end end


clear_config([:instance, :limit_to_local_content])
setup do: clear_config([:instance, :limit_to_local_content])


test "allows getting remote users by id no matter what :limit_to_local_content is set to", %{ test "allows getting remote users by id no matter what :limit_to_local_content is set to", %{
remote_user: remote_user remote_user: remote_user


+ 4
- 6
test/web/activity_pub/activity_pub_controller_test.exs View File

@@ -26,12 +26,10 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest do
:ok :ok
end end


clear_config([:instance, :federating]) do
Config.put([:instance, :federating], true)
end
setup do: clear_config([:instance, :federating], true)


describe "/relay" do describe "/relay" do
clear_config([:instance, :allow_relay])
setup do: clear_config([:instance, :allow_relay])


test "with the relay active, it returns the relay user", %{conn: conn} do test "with the relay active, it returns the relay user", %{conn: conn} do
res = res =
@@ -1227,8 +1225,8 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest do
|> json_response(403) |> json_response(403)
end end


clear_config([:media_proxy])
clear_config([Pleroma.Upload])
setup do: clear_config([:media_proxy])
setup do: clear_config([Pleroma.Upload])


test "POST /api/ap/upload_media", %{conn: conn} do test "POST /api/ap/upload_media", %{conn: conn} do
user = insert(:user) user = insert(:user)


+ 3
- 3
test/web/activity_pub/activity_pub_test.exs View File

@@ -27,7 +27,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do
:ok :ok
end end


clear_config([:instance, :federating])
setup do: clear_config([:instance, :federating])


describe "streaming out participations" do describe "streaming out participations" do
test "it streams them out" do test "it streams them out" do
@@ -1396,7 +1396,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do
end end


describe "deletion" do describe "deletion" do
clear_config([:instance, :rewrite_policy])
setup do: clear_config([:instance, :rewrite_policy])


test "it reverts deletion on error" do test "it reverts deletion on error" do
note = insert(:note_activity) note = insert(:note_activity)
@@ -1580,7 +1580,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do
end end


describe "update" do describe "update" do
clear_config([:instance, :max_pinned_statuses])
setup do: clear_config([:instance, :max_pinned_statuses])


test "it creates an update activity with the new user data" do test "it creates an update activity with the new user data" do
user = insert(:user) user = insert(:user)


+ 1
- 1
test/web/activity_pub/mrf/hellthread_policy_test.exs View File

@@ -26,7 +26,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.HellthreadPolicyTest do
[user: user, message: message] [user: user, message: message]
end end


clear_config(:mrf_hellthread)
setup do: clear_config(:mrf_hellthread)


describe "reject" do describe "reject" do
test "rejects the message if the recipient count is above reject_threshold", %{ test "rejects the message if the recipient count is above reject_threshold", %{


+ 1
- 1
test/web/activity_pub/mrf/keyword_policy_test.exs View File

@@ -7,7 +7,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.KeywordPolicyTest do


alias Pleroma.Web.ActivityPub.MRF.KeywordPolicy alias Pleroma.Web.ActivityPub.MRF.KeywordPolicy


clear_config(:mrf_keyword)
setup do: clear_config(:mrf_keyword)


setup do setup do
Pleroma.Config.put([:mrf_keyword], %{reject: [], federated_timeline_removal: [], replace: []}) Pleroma.Config.put([:mrf_keyword], %{reject: [], federated_timeline_removal: [], replace: []})


+ 1
- 1
test/web/activity_pub/mrf/mention_policy_test.exs View File

@@ -7,7 +7,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.MentionPolicyTest do


alias Pleroma.Web.ActivityPub.MRF.MentionPolicy alias Pleroma.Web.ActivityPub.MRF.MentionPolicy


clear_config(:mrf_mention)
setup do: clear_config(:mrf_mention)


test "pass filter if allow list is empty" do test "pass filter if allow list is empty" do
Pleroma.Config.delete([:mrf_mention]) Pleroma.Config.delete([:mrf_mention])


+ 1
- 1
test/web/activity_pub/mrf/mrf_test.exs View File

@@ -60,7 +60,7 @@ defmodule Pleroma.Web.ActivityPub.MRFTest do
end end


describe "describe/0" do describe "describe/0" do
clear_config([:instance, :rewrite_policy])
setup do: clear_config([:instance, :rewrite_policy])


test "it works as expected with noop policy" do test "it works as expected with noop policy" do
expected = %{ expected = %{


+ 5
- 6
test/web/activity_pub/mrf/object_age_policy_test.exs View File

@@ -9,12 +9,11 @@ defmodule Pleroma.Web.ActivityPub.MRF.ObjectAgePolicyTest do
alias Pleroma.Web.ActivityPub.MRF.ObjectAgePolicy alias Pleroma.Web.ActivityPub.MRF.ObjectAgePolicy
alias Pleroma.Web.ActivityPub.Visibility alias Pleroma.Web.ActivityPub.Visibility


clear_config([:mrf_object_age]) do
Config.put(:mrf_object_age,
threshold: 172_800,
actions: [:delist, :strip_followers]
)
end
setup do:
clear_config(:mrf_object_age,
threshold: 172_800,
actions: [:delist, :strip_followers]
)


setup_all do setup_all do
Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end) Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end)


+ 1
- 1
test/web/activity_pub/mrf/reject_non_public_test.exs View File

@@ -8,7 +8,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.RejectNonPublicTest do


alias Pleroma.Web.ActivityPub.MRF.RejectNonPublic alias Pleroma.Web.ActivityPub.MRF.RejectNonPublic


clear_config([:mrf_rejectnonpublic])
setup do: clear_config([:mrf_rejectnonpublic])


describe "public message" do describe "public message" do
test "it's allowed when address is public" do test "it's allowed when address is public" do


+ 11
- 12
test/web/activity_pub/mrf/simple_policy_test.exs View File

@@ -8,18 +8,17 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicyTest do
alias Pleroma.Config alias Pleroma.Config
alias Pleroma.Web.ActivityPub.MRF.SimplePolicy alias Pleroma.Web.ActivityPub.MRF.SimplePolicy


clear_config([:mrf_simple]) do
Config.put(:mrf_simple,
media_removal: [],
media_nsfw: [],
federated_timeline_removal: [],
report_removal: [],
reject: [],
accept: [],
avatar_removal: [],
banner_removal: []
)
end
setup do:
clear_config(:mrf_simple,
media_removal: [],
media_nsfw: [],
federated_timeline_removal: [],
report_removal: [],
reject: [],
accept: [],
avatar_removal: [],
banner_removal: []
)


describe "when :media_removal" do describe "when :media_removal" do
test "is empty" do test "is empty" do


+ 1
- 2
test/web/activity_pub/mrf/subchain_policy_test.exs View File

@@ -13,8 +13,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.SubchainPolicyTest do
"type" => "Create", "type" => "Create",
"object" => %{"content" => "hi"} "object" => %{"content" => "hi"}
} }

clear_config([:mrf_subchain, :match_actor])
setup do: clear_config([:mrf_subchain, :match_actor])


test "it matches and processes subchains when the actor matches a configured target" do test "it matches and processes subchains when the actor matches a configured target" do
Pleroma.Config.put([:mrf_subchain, :match_actor], %{ Pleroma.Config.put([:mrf_subchain, :match_actor], %{


+ 1
- 1
test/web/activity_pub/mrf/user_allowlist_policy_test.exs View File

@@ -7,7 +7,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.UserAllowListPolicyTest do


alias Pleroma.Web.ActivityPub.MRF.UserAllowListPolicy alias Pleroma.Web.ActivityPub.MRF.UserAllowListPolicy


clear_config([:mrf_user_allowlist, :localhost])
setup do: clear_config([:mrf_user_allowlist, :localhost])


test "pass filter if allow list is empty" do test "pass filter if allow list is empty" do
actor = insert(:user) actor = insert(:user)


+ 2
- 2
test/web/activity_pub/mrf/vocabulary_policy_test.exs View File

@@ -8,7 +8,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.VocabularyPolicyTest do
alias Pleroma.Web.ActivityPub.MRF.VocabularyPolicy alias Pleroma.Web.ActivityPub.MRF.VocabularyPolicy


describe "accept" do describe "accept" do
clear_config([:mrf_vocabulary, :accept])
setup do: clear_config([:mrf_vocabulary, :accept])


test "it accepts based on parent activity type" do test "it accepts based on parent activity type" do
Pleroma.Config.put([:mrf_vocabulary, :accept], ["Like"]) Pleroma.Config.put([:mrf_vocabulary, :accept], ["Like"])
@@ -65,7 +65,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.VocabularyPolicyTest do
end end


describe "reject" do describe "reject" do
clear_config([:mrf_vocabulary, :reject])
setup do: clear_config([:mrf_vocabulary, :reject])


test "it rejects based on parent activity type" do test "it rejects based on parent activity type" do
Pleroma.Config.put([:mrf_vocabulary, :reject], ["Like"]) Pleroma.Config.put([:mrf_vocabulary, :reject], ["Like"])


+ 1
- 3
test/web/activity_pub/publisher_test.exs View File

@@ -23,9 +23,7 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do
:ok :ok
end end


clear_config_all([:instance, :federating]) do
Pleroma.Config.put([:instance, :federating], true)
end
setup_all do: clear_config([:instance, :federating], true)


describe "gather_webfinger_links/1" do describe "gather_webfinger_links/1" do
test "it returns links" do test "it returns links" do


+ 1
- 1
test/web/activity_pub/relay_test.exs View File

@@ -68,7 +68,7 @@ defmodule Pleroma.Web.ActivityPub.RelayTest do
end end


describe "publish/1" do describe "publish/1" do
clear_config([:instance, :federating])
setup do: clear_config([:instance, :federating])


test "returns error when activity not `Create` type" do test "returns error when activity not `Create` type" do
activity = insert(:like_activity) activity = insert(:like_activity)


+ 1
- 1
test/web/activity_pub/transmogrifier/follow_handling_test.exs View File

@@ -19,7 +19,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.FollowHandlingTest do
end end


describe "handle_incoming" do describe "handle_incoming" do
clear_config([:user, :deny_follow_blocked])
setup do: clear_config([:user, :deny_follow_blocked])


test "it works for osada follow request" do test "it works for osada follow request" do
user = insert(:user) user = insert(:user)


+ 7
- 15
test/web/activity_pub/transmogrifier_test.exs View File

@@ -25,7 +25,7 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do
:ok :ok
end end


clear_config([:instance, :max_remote_account_fields])
setup do: clear_config([:instance, :max_remote_account_fields])


describe "handle_incoming" do describe "handle_incoming" do
test "it ignores an incoming notice if we already have it" do test "it ignores an incoming notice if we already have it" do
@@ -1351,11 +1351,8 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do
end end


describe "`handle_incoming/2`, Mastodon format `replies` handling" do describe "`handle_incoming/2`, Mastodon format `replies` handling" do
clear_config([:activitypub, :note_replies_output_limit]) do
Pleroma.Config.put([:activitypub, :note_replies_output_limit], 5)
end

clear_config([:instance, :federation_incoming_replies_max_depth])
setup do: clear_config([:activitypub, :note_replies_output_limit], 5)
setup do: clear_config([:instance, :federation_incoming_replies_max_depth])


setup do setup do
data = data =
@@ -1394,11 +1391,8 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do
end end


describe "`handle_incoming/2`, Pleroma format `replies` handling" do describe "`handle_incoming/2`, Pleroma format `replies` handling" do
clear_config([:activitypub, :note_replies_output_limit]) do
Pleroma.Config.put([:activitypub, :note_replies_output_limit], 5)
end

clear_config([:instance, :federation_incoming_replies_max_depth])
setup do: clear_config([:activitypub, :note_replies_output_limit], 5)
setup do: clear_config([:instance, :federation_incoming_replies_max_depth])


setup do setup do
user = insert(:user) user = insert(:user)
@@ -1882,7 +1876,7 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do
end end


describe "fix_in_reply_to/2" do describe "fix_in_reply_to/2" do
clear_config([:instance, :federation_incoming_replies_max_depth])
setup do: clear_config([:instance, :federation_incoming_replies_max_depth])


setup do setup do
data = Poison.decode!(File.read!("test/fixtures/mastodon-post-activity.json")) data = Poison.decode!(File.read!("test/fixtures/mastodon-post-activity.json"))
@@ -2145,9 +2139,7 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do
end end


describe "set_replies/1" do describe "set_replies/1" do
clear_config([:activitypub, :note_replies_output_limit]) do
Pleroma.Config.put([:activitypub, :note_replies_output_limit], 2)
end
setup do: clear_config([:activitypub, :note_replies_output_limit], 2)


test "returns unmodified object if activity doesn't have self-replies" do test "returns unmodified object if activity doesn't have self-replies" do
data = Poison.decode!(File.read!("test/fixtures/mastodon-post-activity.json")) data = Poison.decode!(File.read!("test/fixtures/mastodon-post-activity.json"))


+ 1
- 3
test/web/activity_pub/views/object_view_test.exs View File

@@ -37,9 +37,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectViewTest do
end end


describe "note activity's `replies` collection rendering" do describe "note activity's `replies` collection rendering" do
clear_config([:activitypub, :note_replies_output_limit]) do
Pleroma.Config.put([:activitypub, :note_replies_output_limit], 5)
end
setup do: clear_config([:activitypub, :note_replies_output_limit], 5)


test "renders `replies` collection for a note activity" do test "renders `replies` collection for a note activity" do
user = insert(:user) user = insert(:user)


+ 9
- 24
test/web/admin_api/admin_api_controller_test.exs View File

@@ -43,9 +43,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
end end


describe "with [:auth, :enforce_oauth_admin_scope_usage]," do describe "with [:auth, :enforce_oauth_admin_scope_usage]," do
clear_config([:auth, :enforce_oauth_admin_scope_usage]) do
Config.put([:auth, :enforce_oauth_admin_scope_usage], true)
end
setup do: clear_config([:auth, :enforce_oauth_admin_scope_usage], true)


test "GET /api/pleroma/admin/users/:nickname requires admin:read:accounts or broader scope", test "GET /api/pleroma/admin/users/:nickname requires admin:read:accounts or broader scope",
%{admin: admin} do %{admin: admin} do
@@ -93,9 +91,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
end end


describe "unless [:auth, :enforce_oauth_admin_scope_usage]," do describe "unless [:auth, :enforce_oauth_admin_scope_usage]," do
clear_config([:auth, :enforce_oauth_admin_scope_usage]) do
Config.put([:auth, :enforce_oauth_admin_scope_usage], false)
end
setup do: clear_config([:auth, :enforce_oauth_admin_scope_usage], false)


test "GET /api/pleroma/admin/users/:nickname requires " <> test "GET /api/pleroma/admin/users/:nickname requires " <>
"read:accounts or admin:read:accounts or broader scope", "read:accounts or admin:read:accounts or broader scope",
@@ -581,13 +577,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
end end


describe "POST /api/pleroma/admin/email_invite, with valid config" do describe "POST /api/pleroma/admin/email_invite, with valid config" do
clear_config([:instance, :registrations_open]) do
Config.put([:instance, :registrations_open], false)
end

clear_config([:instance, :invites_enabled]) do
Config.put([:instance, :invites_enabled], true)
end
setup do: clear_config([:instance, :registrations_open], false)
setup do: clear_config([:instance, :invites_enabled], true)


test "sends invitation and returns 204", %{admin: admin, conn: conn} do test "sends invitation and returns 204", %{admin: admin, conn: conn} do
recipient_email = "foo@bar.com" recipient_email = "foo@bar.com"
@@ -638,8 +629,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
end end


describe "POST /api/pleroma/admin/users/email_invite, with invalid config" do describe "POST /api/pleroma/admin/users/email_invite, with invalid config" do
clear_config([:instance, :registrations_open])
clear_config([:instance, :invites_enabled])
setup do: clear_config([:instance, :registrations_open])
setup do: clear_config([:instance, :invites_enabled])


test "it returns 500 if `invites_enabled` is not enabled", %{conn: conn} do test "it returns 500 if `invites_enabled` is not enabled", %{conn: conn} do
Config.put([:instance, :registrations_open], false) Config.put([:instance, :registrations_open], false)
@@ -1888,9 +1879,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
end end


describe "GET /api/pleroma/admin/config" do describe "GET /api/pleroma/admin/config" do
clear_config(:configurable_from_database) do
Config.put(:configurable_from_database, true)
end
setup do: clear_config(:configurable_from_database, true)


test "when configuration from database is off", %{conn: conn} do test "when configuration from database is off", %{conn: conn} do
Config.put(:configurable_from_database, false) Config.put(:configurable_from_database, false)
@@ -2041,9 +2030,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
end) end)
end end


clear_config(:configurable_from_database) do
Config.put(:configurable_from_database, true)
end
setup do: clear_config(:configurable_from_database, true)


@tag capture_log: true @tag capture_log: true
test "create new config setting in db", %{conn: conn} do test "create new config setting in db", %{conn: conn} do
@@ -3034,9 +3021,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
end end


describe "GET /api/pleroma/admin/restart" do describe "GET /api/pleroma/admin/restart" do
clear_config(:configurable_from_database) do
Config.put(:configurable_from_database, true)
end
setup do: clear_config(:configurable_from_database, true)


test "pleroma restarts", %{conn: conn} do test "pleroma restarts", %{conn: conn} do
capture_log(fn -> capture_log(fn ->


+ 1
- 1
test/web/chat_channel_test.exs View File

@@ -21,7 +21,7 @@ defmodule Pleroma.Web.ChatChannelTest do
end end


describe "message lengths" do describe "message lengths" do
clear_config([:instance, :chat_limit])
setup do: clear_config([:instance, :chat_limit])


test "it ignores messages of length zero", %{socket: socket} do test "it ignores messages of length zero", %{socket: socket} do
push(socket, "new_msg", %{"text" => ""}) push(socket, "new_msg", %{"text" => ""})


+ 3
- 3
test/web/common_api/common_api_test.exs View File

@@ -17,9 +17,9 @@ defmodule Pleroma.Web.CommonAPITest do


require Pleroma.Constants require Pleroma.Constants


clear_config([:instance, :safe_dm_mentions])
clear_config([:instance, :limit])
clear_config([:instance, :max_pinned_statuses])
setup do: clear_config([:instance, :safe_dm_mentions])
setup do: clear_config([:instance, :limit])
setup do: clear_config([:instance, :max_pinned_statuses])


test "when replying to a conversation / participation, it will set the correct context id even if no explicit reply_to is given" do 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) user = insert(:user)


+ 4
- 7
test/web/federator_test.exs View File

@@ -21,13 +21,10 @@ defmodule Pleroma.Web.FederatorTest do
:ok :ok
end end


clear_config_all([:instance, :federating]) do
Pleroma.Config.put([:instance, :federating], true)
end

clear_config([:instance, :allow_relay])
clear_config([:instance, :rewrite_policy])
clear_config([:mrf_keyword])
setup_all do: clear_config([:instance, :federating], true)
setup do: clear_config([:instance, :allow_relay])
setup do: clear_config([:instance, :rewrite_policy])
setup do: clear_config([:mrf_keyword])


describe "Publish an activity" do describe "Publish an activity" do
setup do setup do


+ 46
- 16
test/web/feed/tag_controller_test.exs View File

@@ -8,9 +8,11 @@ defmodule Pleroma.Web.Feed.TagControllerTest do
import Pleroma.Factory import Pleroma.Factory
import SweetXml import SweetXml


alias Pleroma.Object
alias Pleroma.Web.CommonAPI
alias Pleroma.Web.Feed.FeedView alias Pleroma.Web.Feed.FeedView


clear_config([:feed])
setup do: clear_config([:feed])


test "gets a feed (ATOM)", %{conn: conn} do test "gets a feed (ATOM)", %{conn: conn} do
Pleroma.Config.put( Pleroma.Config.put(
@@ -19,9 +21,9 @@ defmodule Pleroma.Web.Feed.TagControllerTest do
) )


user = insert(:user) user = insert(:user)
{:ok, activity1} = Pleroma.Web.CommonAPI.post(user, %{"status" => "yeah #PleromaArt"})
{:ok, activity1} = CommonAPI.post(user, %{"status" => "yeah #PleromaArt"})


object = Pleroma.Object.normalize(activity1)
object = Object.normalize(activity1)


object_data = object_data =
Map.put(object.data, "attachment", [ Map.put(object.data, "attachment", [
@@ -41,14 +43,13 @@ defmodule Pleroma.Web.Feed.TagControllerTest do
|> Ecto.Changeset.change(data: object_data) |> Ecto.Changeset.change(data: object_data)
|> Pleroma.Repo.update() |> Pleroma.Repo.update()


{:ok, _activity2} =
Pleroma.Web.CommonAPI.post(user, %{"status" => "42 This is :moominmamma #PleromaArt"})
{:ok, activity2} = CommonAPI.post(user, %{"status" => "42 This is :moominmamma #PleromaArt"})


{:ok, _activity3} = Pleroma.Web.CommonAPI.post(user, %{"status" => "This is :moominmamma"})
{:ok, _activity3} = CommonAPI.post(user, %{"status" => "This is :moominmamma"})


response = response =
conn conn
|> put_req_header("content-type", "application/atom+xml")
|> put_req_header("accept", "application/atom+xml")
|> get(tag_feed_path(conn, :feed, "pleromaart.atom")) |> get(tag_feed_path(conn, :feed, "pleromaart.atom"))
|> response(200) |> response(200)


@@ -63,6 +64,21 @@ defmodule Pleroma.Web.Feed.TagControllerTest do


assert xpath(xml, ~x"//feed/entry/author/name/text()"ls) == [user.nickname, user.nickname] assert xpath(xml, ~x"//feed/entry/author/name/text()"ls) == [user.nickname, user.nickname]
assert xpath(xml, ~x"//feed/entry/author/id/text()"ls) == [user.ap_id, user.ap_id] assert xpath(xml, ~x"//feed/entry/author/id/text()"ls) == [user.ap_id, user.ap_id]

conn =
conn
|> put_req_header("accept", "application/atom+xml")
|> get("/tags/pleromaart.atom", %{"max_id" => activity2.id})

assert get_resp_header(conn, "content-type") == ["application/atom+xml; charset=utf-8"]
resp = response(conn, 200)
xml = parse(resp)

assert xpath(xml, ~x"//feed/title/text()") == '#pleromaart'

assert xpath(xml, ~x"//feed/entry/title/text()"l) == [
'yeah #PleromaArt'
]
end end


test "gets a feed (RSS)", %{conn: conn} do test "gets a feed (RSS)", %{conn: conn} do
@@ -72,9 +88,9 @@ defmodule Pleroma.Web.Feed.TagControllerTest do
) )


user = insert(:user) user = insert(:user)
{:ok, activity1} = Pleroma.Web.CommonAPI.post(user, %{"status" => "yeah #PleromaArt"})
{:ok, activity1} = CommonAPI.post(user, %{"status" => "yeah #PleromaArt"})


object = Pleroma.Object.normalize(activity1)
object = Object.normalize(activity1)


object_data = object_data =
Map.put(object.data, "attachment", [ Map.put(object.data, "attachment", [
@@ -94,14 +110,13 @@ defmodule Pleroma.Web.Feed.TagControllerTest do
|> Ecto.Changeset.change(data: object_data) |> Ecto.Changeset.change(data: object_data)
|> Pleroma.Repo.update() |> Pleroma.Repo.update()


{:ok, activity2} =
Pleroma.Web.CommonAPI.post(user, %{"status" => "42 This is :moominmamma #PleromaArt"})
{:ok, activity2} = CommonAPI.post(user, %{"status" => "42 This is :moominmamma #PleromaArt"})


{:ok, _activity3} = Pleroma.Web.CommonAPI.post(user, %{"status" => "This is :moominmamma"})
{:ok, _activity3} = CommonAPI.post(user, %{"status" => "This is :moominmamma"})


response = response =
conn conn
|> put_req_header("content-type", "application/rss+xml")
|> put_req_header("accept", "application/rss+xml")
|> get(tag_feed_path(conn, :feed, "pleromaart.rss")) |> get(tag_feed_path(conn, :feed, "pleromaart.rss"))
|> response(200) |> response(200)


@@ -131,8 +146,8 @@ defmodule Pleroma.Web.Feed.TagControllerTest do
"https://peertube.moe/static/webseed/df5f464b-be8d-46fb-ad81-2d4c2d1630e3-480.mp4" "https://peertube.moe/static/webseed/df5f464b-be8d-46fb-ad81-2d4c2d1630e3-480.mp4"
] ]


obj1 = Pleroma.Object.normalize(activity1)
obj2 = Pleroma.Object.normalize(activity2)
obj1 = Object.normalize(activity1)
obj2 = Object.normalize(activity2)


assert xpath(xml, ~x"//channel/item/description/text()"sl) == [ assert xpath(xml, ~x"//channel/item/description/text()"sl) == [
HtmlEntities.decode(FeedView.activity_content(obj2)), HtmlEntities.decode(FeedView.activity_content(obj2)),
@@ -141,7 +156,7 @@ defmodule Pleroma.Web.Feed.TagControllerTest do


response = response =
conn conn
|> put_req_header("content-type", "application/atom+xml")
|> put_req_header("accept", "application/rss+xml")
|> get(tag_feed_path(conn, :feed, "pleromaart")) |> get(tag_feed_path(conn, :feed, "pleromaart"))
|> response(200) |> response(200)


@@ -150,5 +165,20 @@ defmodule Pleroma.Web.Feed.TagControllerTest do


assert xpath(xml, ~x"//channel/description/text()"s) == assert xpath(xml, ~x"//channel/description/text()"s) ==
"These are public toots tagged with #pleromaart. You can interact with them if you have an account anywhere in the fediverse." "These are public toots tagged with #pleromaart. You can interact with them if you have an account anywhere in the fediverse."

conn =
conn
|> put_req_header("accept", "application/rss+xml")
|> get("/tags/pleromaart.rss", %{"max_id" => activity2.id})

assert get_resp_header(conn, "content-type") == ["application/rss+xml; charset=utf-8"]
resp = response(conn, 200)
xml = parse(resp)

assert xpath(xml, ~x"//channel/title/text()") == '#pleromaart'

assert xpath(xml, ~x"//channel/item/title/text()"l) == [
'yeah #PleromaArt'
]
end end
end end

+ 84
- 7
test/web/feed/user_controller_test.exs View File

@@ -12,12 +12,10 @@ defmodule Pleroma.Web.Feed.UserControllerTest do
alias Pleroma.Object alias Pleroma.Object
alias Pleroma.User alias Pleroma.User


clear_config([:instance, :federating]) do
Config.put([:instance, :federating], true)
end
setup do: clear_config([:instance, :federating], true)


describe "feed" do describe "feed" do
clear_config([:feed])
setup do: clear_config([:feed])


test "gets a feed", %{conn: conn} do test "gets a feed", %{conn: conn} do
Config.put( Config.put(
@@ -54,12 +52,12 @@ defmodule Pleroma.Web.Feed.UserControllerTest do
} }
) )


_note_activity2 = insert(:note_activity, note: note2)
note_activity2 = insert(:note_activity, note: note2)
object = Object.normalize(note_activity) object = Object.normalize(note_activity)


resp = resp =
conn conn
|> put_req_header("content-type", "application/atom+xml")
|> put_req_header("accept", "application/atom+xml")
|> get(user_feed_path(conn, :feed, user.nickname)) |> get(user_feed_path(conn, :feed, user.nickname))
|> response(200) |> response(200)


@@ -70,12 +68,91 @@ defmodule Pleroma.Web.Feed.UserControllerTest do


assert activity_titles == ['42 This...', 'This is...'] assert activity_titles == ['42 This...', 'This is...']
assert resp =~ object.data["content"] assert resp =~ object.data["content"]

resp =
conn
|> put_req_header("accept", "application/atom+xml")
|> get("/users/#{user.nickname}/feed", %{"max_id" => note_activity2.id})
|> response(200)

activity_titles =
resp
|> SweetXml.parse()
|> SweetXml.xpath(~x"//entry/title/text()"l)

assert activity_titles == ['This is...']
end

test "gets a rss feed", %{conn: conn} do
Pleroma.Config.put(
[:feed, :post_title],
%{max_length: 10, omission: "..."}
)

activity = insert(:note_activity)

note =
insert(:note,
data: %{
"content" => "This is :moominmamma: note ",
"attachment" => [
%{
"url" => [
%{"mediaType" => "image/png", "href" => "https://pleroma.gov/image.png"}
]
}
],
"inReplyTo" => activity.data["id"]
}
)

note_activity = insert(:note_activity, note: note)
user = User.get_cached_by_ap_id(note_activity.data["actor"])

note2 =
insert(:note,
user: user,
data: %{
"content" => "42 This is :moominmamma: note ",
"inReplyTo" => activity.data["id"]
}
)

note_activity2 = insert(:note_activity, note: note2)
object = Object.normalize(note_activity)

resp =
conn
|> put_req_header("accept", "application/rss+xml")
|> get("/users/#{user.nickname}/feed.rss")
|> response(200)

activity_titles =
resp
|> SweetXml.parse()
|> SweetXml.xpath(~x"//item/title/text()"l)

assert activity_titles == ['42 This...', 'This is...']
assert resp =~ object.data["content"]

resp =
conn
|> put_req_header("accept", "application/rss+xml")
|> get("/users/#{user.nickname}/feed.rss", %{"max_id" => note_activity2.id})
|> response(200)

activity_titles =
resp
|> SweetXml.parse()
|> SweetXml.xpath(~x"//item/title/text()"l)

assert activity_titles == ['This is...']
end end


test "returns 404 for a missing feed", %{conn: conn} do test "returns 404 for a missing feed", %{conn: conn} do
conn = conn =
conn conn
|> put_req_header("content-type", "application/atom+xml")
|> put_req_header("accept", "application/atom+xml")
|> get(user_feed_path(conn, :feed, "nonexisting")) |> get(user_feed_path(conn, :feed, "nonexisting"))


assert response(conn, 404) assert response(conn, 404)


+ 1
- 3
test/web/instances/instance_test.exs View File

@@ -10,9 +10,7 @@ defmodule Pleroma.Instances.InstanceTest do


import Pleroma.Factory import Pleroma.Factory


clear_config_all([:instance, :federation_reachability_timeout_days]) do
Pleroma.Config.put([:instance, :federation_reachability_timeout_days], 1)
end
setup_all do: clear_config([:instance, :federation_reachability_timeout_days], 1)


describe "set_reachable/1" do describe "set_reachable/1" do
test "clears `unreachable_since` of existing matching Instance record having non-nil `unreachable_since`" do test "clears `unreachable_since` of existing matching Instance record having non-nil `unreachable_since`" do


+ 1
- 3
test/web/instances/instances_test.exs View File

@@ -7,9 +7,7 @@ defmodule Pleroma.InstancesTest do


use Pleroma.DataCase use Pleroma.DataCase


clear_config_all([:instance, :federation_reachability_timeout_days]) do
Pleroma.Config.put([:instance, :federation_reachability_timeout_days], 1)
end
setup_all do: clear_config([:instance, :federation_reachability_timeout_days], 1)


describe "reachable?/1" do describe "reachable?/1" do
test "returns `true` for host / url with unknown reachability status" do test "returns `true` for host / url with unknown reachability status" do


+ 1
- 1
test/web/masto_fe_controller_test.exs View File

@@ -10,7 +10,7 @@ defmodule Pleroma.Web.MastodonAPI.MastoFEController do


import Pleroma.Factory import Pleroma.Factory


clear_config([:instance, :public])
setup do: clear_config([:instance, :public])


test "put settings", %{conn: conn} do test "put settings", %{conn: conn} do
user = insert(:user) user = insert(:user)


+ 2
- 1
test/web/mastodon_api/controllers/account_controller/update_credentials_test.exs View File

@@ -9,7 +9,8 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do
use Pleroma.Web.ConnCase use Pleroma.Web.ConnCase


import Pleroma.Factory import Pleroma.Factory
clear_config([:instance, :max_account_fields])

setup do: clear_config([:instance, :max_account_fields])


describe "updating credentials" do describe "updating credentials" do
setup do: oauth_access(["write:accounts"]) setup do: oauth_access(["write:accounts"])


+ 196
- 9
test/web/mastodon_api/controllers/account_controller_test.exs View File

@@ -5,6 +5,7 @@
defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
use Pleroma.Web.ConnCase use Pleroma.Web.ConnCase


alias Pleroma.Config
alias Pleroma.Repo alias Pleroma.Repo
alias Pleroma.User alias Pleroma.User
alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.ActivityPub.ActivityPub
@@ -15,7 +16,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
import Pleroma.Factory import Pleroma.Factory


describe "account fetching" do describe "account fetching" do
clear_config([:instance, :limit_to_local_content])
setup do: clear_config([:instance, :limit_to_local_content])


test "works by id" do test "works by id" do
user = insert(:user) user = insert(:user)
@@ -46,7 +47,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
end end


test "works by nickname for remote users" do test "works by nickname for remote users" do
Pleroma.Config.put([:instance, :limit_to_local_content], false)
Config.put([:instance, :limit_to_local_content], false)
user = insert(:user, nickname: "user@example.com", local: false) user = insert(:user, nickname: "user@example.com", local: false)


conn = conn =
@@ -58,7 +59,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
end end


test "respects limit_to_local_content == :all for remote user nicknames" do test "respects limit_to_local_content == :all for remote user nicknames" do
Pleroma.Config.put([:instance, :limit_to_local_content], :all)
Config.put([:instance, :limit_to_local_content], :all)


user = insert(:user, nickname: "user@example.com", local: false) user = insert(:user, nickname: "user@example.com", local: false)


@@ -70,7 +71,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
end end


test "respects limit_to_local_content == :unauthenticated for remote user nicknames" do test "respects limit_to_local_content == :unauthenticated for remote user nicknames" do
Pleroma.Config.put([:instance, :limit_to_local_content], :unauthenticated)
Config.put([:instance, :limit_to_local_content], :unauthenticated)


user = insert(:user, nickname: "user@example.com", local: false) user = insert(:user, nickname: "user@example.com", local: false)
reading_user = insert(:user) reading_user = insert(:user)
@@ -140,6 +141,98 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
end end
end end


defp local_and_remote_users do
local = insert(:user)
remote = insert(:user, local: false)
{:ok, local: local, remote: remote}
end

describe "user fetching with restrict unauthenticated profiles for local and remote" do
setup do: local_and_remote_users()

setup do: clear_config([:restrict_unauthenticated, :profiles, :local], true)

setup do: clear_config([:restrict_unauthenticated, :profiles, :remote], true)

test "if user is unauthenticated", %{conn: conn, local: local, remote: remote} do
res_conn = get(conn, "/api/v1/accounts/#{local.id}")

assert json_response(res_conn, :not_found) == %{
"error" => "Can't find user"
}

res_conn = get(conn, "/api/v1/accounts/#{remote.id}")

assert json_response(res_conn, :not_found) == %{
"error" => "Can't find user"
}
end

test "if user is authenticated", %{local: local, remote: remote} do
%{conn: conn} = oauth_access(["read"])

res_conn = get(conn, "/api/v1/accounts/#{local.id}")
assert %{"id" => _} = json_response(res_conn, 200)

res_conn = get(conn, "/api/v1/accounts/#{remote.id}")
assert %{"id" => _} = json_response(res_conn, 200)
end
end

describe "user fetching with restrict unauthenticated profiles for local" do
setup do: local_and_remote_users()

setup do: clear_config([:restrict_unauthenticated, :profiles, :local], true)

test "if user is unauthenticated", %{conn: conn, local: local, remote: remote} do
res_conn = get(conn, "/api/v1/accounts/#{local.id}")

assert json_response(res_conn, :not_found) == %{
"error" => "Can't find user"
}

res_conn = get(conn, "/api/v1/accounts/#{remote.id}")
assert %{"id" => _} = json_response(res_conn, 200)
end

test "if user is authenticated", %{local: local, remote: remote} do
%{conn: conn} = oauth_access(["read"])

res_conn = get(conn, "/api/v1/accounts/#{local.id}")
assert %{"id" => _} = json_response(res_conn, 200)

res_conn = get(conn, "/api/v1/accounts/#{remote.id}")
assert %{"id" => _} = json_response(res_conn, 200)
end
end

describe "user fetching with restrict unauthenticated profiles for remote" do
setup do: local_and_remote_users()

setup do: clear_config([:restrict_unauthenticated, :profiles, :remote], true)

test "if user is unauthenticated", %{conn: conn, local: local, remote: remote} do
res_conn = get(conn, "/api/v1/accounts/#{local.id}")
assert %{"id" => _} = json_response(res_conn, 200)

res_conn = get(conn, "/api/v1/accounts/#{remote.id}")

assert json_response(res_conn, :not_found) == %{
"error" => "Can't find user"
}
end

test "if user is authenticated", %{local: local, remote: remote} do
%{conn: conn} = oauth_access(["read"])

res_conn = get(conn, "/api/v1/accounts/#{local.id}")
assert %{"id" => _} = json_response(res_conn, 200)

res_conn = get(conn, "/api/v1/accounts/#{remote.id}")
assert %{"id" => _} = json_response(res_conn, 200)
end
end

describe "user timelines" do describe "user timelines" do
setup do: oauth_access(["read:statuses"]) setup do: oauth_access(["read:statuses"])


@@ -293,6 +386,102 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
end end
end end


defp local_and_remote_activities(%{local: local, remote: remote}) do
insert(:note_activity, user: local)
insert(:note_activity, user: remote, local: false)

:ok
end

describe "statuses with restrict unauthenticated profiles for local and remote" do
setup do: local_and_remote_users()
setup :local_and_remote_activities

setup do: clear_config([:restrict_unauthenticated, :profiles, :local], true)

setup do: clear_config([:restrict_unauthenticated, :profiles, :remote], true)

test "if user is unauthenticated", %{conn: conn, local: local, remote: remote} do
res_conn = get(conn, "/api/v1/accounts/#{local.id}/statuses")

assert json_response(res_conn, :not_found) == %{
"error" => "Can't find user"
}

res_conn = get(conn, "/api/v1/accounts/#{remote.id}/statuses")

assert json_response(res_conn, :not_found) == %{
"error" => "Can't find user"
}
end

test "if user is authenticated", %{local: local, remote: remote} do
%{conn: conn} = oauth_access(["read"])

res_conn = get(conn, "/api/v1/accounts/#{local.id}/statuses")
assert length(json_response(res_conn, 200)) == 1

res_conn = get(conn, "/api/v1/accounts/#{remote.id}/statuses")
assert length(json_response(res_conn, 200)) == 1
end
end

describe "statuses with restrict unauthenticated profiles for local" do
setup do: local_and_remote_users()
setup :local_and_remote_activities

setup do: clear_config([:restrict_unauthenticated, :profiles, :local], true)

test "if user is unauthenticated", %{conn: conn, local: local, remote: remote} do
res_conn = get(conn, "/api/v1/accounts/#{local.id}/statuses")

assert json_response(res_conn, :not_found) == %{
"error" => "Can't find user"
}

res_conn = get(conn, "/api/v1/accounts/#{remote.id}/statuses")
assert length(json_response(res_conn, 200)) == 1
end

test "if user is authenticated", %{local: local, remote: remote} do
%{conn: conn} = oauth_access(["read"])

res_conn = get(conn, "/api/v1/accounts/#{local.id}/statuses")
assert length(json_response(res_conn, 200)) == 1

res_conn = get(conn, "/api/v1/accounts/#{remote.id}/statuses")
assert length(json_response(res_conn, 200)) == 1
end
end

describe "statuses with restrict unauthenticated profiles for remote" do
setup do: local_and_remote_users()
setup :local_and_remote_activities

setup do: clear_config([:restrict_unauthenticated, :profiles, :remote], true)

test "if user is unauthenticated", %{conn: conn, local: local, remote: remote} do
res_conn = get(conn, "/api/v1/accounts/#{local.id}/statuses")
assert length(json_response(res_conn, 200)) == 1

res_conn = get(conn, "/api/v1/accounts/#{remote.id}/statuses")

assert json_response(res_conn, :not_found) == %{
"error" => "Can't find user"
}
end

test "if user is authenticated", %{local: local, remote: remote} do
%{conn: conn} = oauth_access(["read"])

res_conn = get(conn, "/api/v1/accounts/#{local.id}/statuses")
assert length(json_response(res_conn, 200)) == 1

res_conn = get(conn, "/api/v1/accounts/#{remote.id}/statuses")
assert length(json_response(res_conn, 200)) == 1
end
end

describe "followers" do describe "followers" do
setup do: oauth_access(["read:accounts"]) setup do: oauth_access(["read:accounts"])


@@ -601,7 +790,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
[valid_params: valid_params] [valid_params: valid_params]
end end


clear_config([:instance, :account_activation_required])
setup do: clear_config([:instance, :account_activation_required])


test "Account registration via Application", %{conn: conn} do test "Account registration via Application", %{conn: conn} do
conn = conn =
@@ -699,7 +888,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
end) end)
end end


clear_config([:instance, :account_activation_required])
setup do: clear_config([:instance, :account_activation_required])


test "returns bad_request if missing email params when :account_activation_required is enabled", test "returns bad_request if missing email params when :account_activation_required is enabled",
%{conn: conn, valid_params: valid_params} do %{conn: conn, valid_params: valid_params} do
@@ -756,9 +945,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
end end


describe "create account by app / rate limit" do describe "create account by app / rate limit" do
clear_config([:rate_limit, :app_account_creation]) do
Pleroma.Config.put([:rate_limit, :app_account_creation], {10_000, 2})
end
setup do: clear_config([:rate_limit, :app_account_creation], {10_000, 2})


test "respects rate limit setting", %{conn: conn} do test "respects rate limit setting", %{conn: conn} do
app_token = insert(:oauth_token, user: nil) app_token = insert(:oauth_token, user: nil)


+ 2
- 2
test/web/mastodon_api/controllers/media_controller_test.exs View File

@@ -22,8 +22,8 @@ defmodule Pleroma.Web.MastodonAPI.MediaControllerTest do
[image: image] [image: image]
end end


clear_config([:media_proxy])
clear_config([Pleroma.Upload])
setup do: clear_config([:media_proxy])
setup do: clear_config([Pleroma.Upload])


test "returns uploaded image", %{conn: conn, image: image} do test "returns uploaded image", %{conn: conn, image: image} do
desc = "Description of the image" desc = "Description of the image"


+ 45
- 0
test/web/mastodon_api/controllers/notification_controller_test.exs View File

@@ -304,6 +304,51 @@ defmodule Pleroma.Web.MastodonAPI.NotificationControllerTest do
assert [%{"id" => ^reblog_notification_id}] = json_response(conn_res, 200) assert [%{"id" => ^reblog_notification_id}] = json_response(conn_res, 200)
end end


test "filters notifications using include_types" do
%{user: user, conn: conn} = oauth_access(["read:notifications"])
other_user = insert(:user)

{:ok, mention_activity} = CommonAPI.post(other_user, %{"status" => "hey @#{user.nickname}"})
{:ok, create_activity} = CommonAPI.post(user, %{"status" => "hey"})
{:ok, favorite_activity, _} = CommonAPI.favorite(create_activity.id, other_user)
{:ok, reblog_activity, _} = CommonAPI.repeat(create_activity.id, other_user)
{:ok, _, _, follow_activity} = CommonAPI.follow(other_user, user)

mention_notification_id = get_notification_id_by_activity(mention_activity)
favorite_notification_id = get_notification_id_by_activity(favorite_activity)
reblog_notification_id = get_notification_id_by_activity(reblog_activity)
follow_notification_id = get_notification_id_by_activity(follow_activity)

conn_res = get(conn, "/api/v1/notifications", %{include_types: ["follow"]})

assert [%{"id" => ^follow_notification_id}] = json_response(conn_res, 200)

conn_res = get(conn, "/api/v1/notifications", %{include_types: ["mention"]})

assert [%{"id" => ^mention_notification_id}] = json_response(conn_res, 200)

conn_res = get(conn, "/api/v1/notifications", %{include_types: ["favourite"]})

assert [%{"id" => ^favorite_notification_id}] = json_response(conn_res, 200)

conn_res = get(conn, "/api/v1/notifications", %{include_types: ["reblog"]})

assert [%{"id" => ^reblog_notification_id}] = json_response(conn_res, 200)

result = conn |> get("/api/v1/notifications") |> json_response(200)

assert length(result) == 4

result =
conn
|> get("/api/v1/notifications", %{
include_types: ["follow", "mention", "favourite", "reblog"]
})
|> json_response(200)

assert length(result) == 4
end

test "destroy multiple" do test "destroy multiple" do
%{user: user, conn: conn} = oauth_access(["read:notifications", "write:notifications"]) %{user: user, conn: conn} = oauth_access(["read:notifications", "write:notifications"])
other_user = insert(:user) other_user = insert(:user)


+ 1
- 1
test/web/mastodon_api/controllers/scheduled_activity_controller_test.exs View File

@@ -11,7 +11,7 @@ defmodule Pleroma.Web.MastodonAPI.ScheduledActivityControllerTest do
import Pleroma.Factory import Pleroma.Factory
import Ecto.Query import Ecto.Query


clear_config([ScheduledActivity, :enabled])
setup do: clear_config([ScheduledActivity, :enabled])


test "shows scheduled activities" do test "shows scheduled activities" do
%{user: user, conn: conn} = oauth_access(["read:statuses"]) %{user: user, conn: conn} = oauth_access(["read:statuses"])


+ 157
- 6
test/web/mastodon_api/controllers/status_controller_test.exs View File

@@ -19,9 +19,9 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do


import Pleroma.Factory import Pleroma.Factory


clear_config([:instance, :federating])
clear_config([:instance, :allow_relay])
clear_config([:rich_media, :enabled])
setup do: clear_config([:instance, :federating])
setup do: clear_config([:instance, :allow_relay])
setup do: clear_config([:rich_media, :enabled])


describe "posting statuses" do describe "posting statuses" do
setup do: oauth_access(["write:statuses"]) setup do: oauth_access(["write:statuses"])
@@ -476,6 +476,95 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do
assert id == to_string(activity.id) assert id == to_string(activity.id)
end end


defp local_and_remote_activities do
local = insert(:note_activity)
remote = insert(:note_activity, local: false)
{:ok, local: local, remote: remote}
end

describe "status with restrict unauthenticated activities for local and remote" do
setup do: local_and_remote_activities()

setup do: clear_config([:restrict_unauthenticated, :activities, :local], true)

setup do: clear_config([:restrict_unauthenticated, :activities, :remote], true)

test "if user is unauthenticated", %{conn: conn, local: local, remote: remote} do
res_conn = get(conn, "/api/v1/statuses/#{local.id}")

assert json_response(res_conn, :not_found) == %{
"error" => "Record not found"
}

res_conn = get(conn, "/api/v1/statuses/#{remote.id}")

assert json_response(res_conn, :not_found) == %{
"error" => "Record not found"
}
end

test "if user is authenticated", %{local: local, remote: remote} do
%{conn: conn} = oauth_access(["read"])
res_conn = get(conn, "/api/v1/statuses/#{local.id}")
assert %{"id" => _} = json_response(res_conn, 200)

res_conn = get(conn, "/api/v1/statuses/#{remote.id}")
assert %{"id" => _} = json_response(res_conn, 200)
end
end

describe "status with restrict unauthenticated activities for local" do
setup do: local_and_remote_activities()

setup do: clear_config([:restrict_unauthenticated, :activities, :local], true)

test "if user is unauthenticated", %{conn: conn, local: local, remote: remote} do
res_conn = get(conn, "/api/v1/statuses/#{local.id}")

assert json_response(res_conn, :not_found) == %{
"error" => "Record not found"
}

res_conn = get(conn, "/api/v1/statuses/#{remote.id}")
assert %{"id" => _} = json_response(res_conn, 200)
end

test "if user is authenticated", %{local: local, remote: remote} do
%{conn: conn} = oauth_access(["read"])
res_conn = get(conn, "/api/v1/statuses/#{local.id}")
assert %{"id" => _} = json_response(res_conn, 200)

res_conn = get(conn, "/api/v1/statuses/#{remote.id}")
assert %{"id" => _} = json_response(res_conn, 200)
end
end

describe "status with restrict unauthenticated activities for remote" do
setup do: local_and_remote_activities()

setup do: clear_config([:restrict_unauthenticated, :activities, :remote], true)

test "if user is unauthenticated", %{conn: conn, local: local, remote: remote} do
res_conn = get(conn, "/api/v1/statuses/#{local.id}")
assert %{"id" => _} = json_response(res_conn, 200)

res_conn = get(conn, "/api/v1/statuses/#{remote.id}")

assert json_response(res_conn, :not_found) == %{
"error" => "Record not found"
}
end

test "if user is authenticated", %{local: local, remote: remote} do
%{conn: conn} = oauth_access(["read"])
res_conn = get(conn, "/api/v1/statuses/#{local.id}")
assert %{"id" => _} = json_response(res_conn, 200)

res_conn = get(conn, "/api/v1/statuses/#{remote.id}")
assert %{"id" => _} = json_response(res_conn, 200)
end
end

test "getting a status that doesn't exist returns 404" do test "getting a status that doesn't exist returns 404" do
%{conn: conn} = oauth_access(["read:statuses"]) %{conn: conn} = oauth_access(["read:statuses"])
activity = insert(:note_activity) activity = insert(:note_activity)
@@ -514,6 +603,70 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do
assert [%{"id" => ^id1}, %{"id" => ^id2}] = Enum.sort_by(json_response(conn, :ok), & &1["id"]) assert [%{"id" => ^id1}, %{"id" => ^id2}] = Enum.sort_by(json_response(conn, :ok), & &1["id"])
end end


describe "getting statuses by ids with restricted unauthenticated for local and remote" do
setup do: local_and_remote_activities()

setup do: clear_config([:restrict_unauthenticated, :activities, :local], true)

setup do: clear_config([:restrict_unauthenticated, :activities, :remote], true)

test "if user is unauthenticated", %{conn: conn, local: local, remote: remote} do
res_conn = get(conn, "/api/v1/statuses", %{ids: [local.id, remote.id]})

assert json_response(res_conn, 200) == []
end

test "if user is authenticated", %{local: local, remote: remote} do
%{conn: conn} = oauth_access(["read"])

res_conn = get(conn, "/api/v1/statuses", %{ids: [local.id, remote.id]})

assert length(json_response(res_conn, 200)) == 2
end
end

describe "getting statuses by ids with restricted unauthenticated for local" do
setup do: local_and_remote_activities()

setup do: clear_config([:restrict_unauthenticated, :activities, :local], true)

test "if user is unauthenticated", %{conn: conn, local: local, remote: remote} do
res_conn = get(conn, "/api/v1/statuses", %{ids: [local.id, remote.id]})

remote_id = remote.id
assert [%{"id" => ^remote_id}] = json_response(res_conn, 200)
end

test "if user is authenticated", %{local: local, remote: remote} do
%{conn: conn} = oauth_access(["read"])

res_conn = get(conn, "/api/v1/statuses", %{ids: [local.id, remote.id]})

assert length(json_response(res_conn, 200)) == 2
end
end

describe "getting statuses by ids with restricted unauthenticated for remote" do
setup do: local_and_remote_activities()

setup do: clear_config([:restrict_unauthenticated, :activities, :remote], true)

test "if user is unauthenticated", %{conn: conn, local: local, remote: remote} do
res_conn = get(conn, "/api/v1/statuses", %{ids: [local.id, remote.id]})

local_id = local.id
assert [%{"id" => ^local_id}] = json_response(res_conn, 200)
end

test "if user is authenticated", %{local: local, remote: remote} do
%{conn: conn} = oauth_access(["read"])

res_conn = get(conn, "/api/v1/statuses", %{ids: [local.id, remote.id]})

assert length(json_response(res_conn, 200)) == 2
end
end

describe "deleting a status" do describe "deleting a status" do
test "when you created it" do test "when you created it" do
%{user: author, conn: conn} = oauth_access(["write:statuses"]) %{user: author, conn: conn} = oauth_access(["write:statuses"])
@@ -739,9 +892,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do
%{activity: activity} %{activity: activity}
end end


clear_config([:instance, :max_pinned_statuses]) do
Config.put([:instance, :max_pinned_statuses], 1)
end
setup do: clear_config([:instance, :max_pinned_statuses], 1)


test "pin status", %{conn: conn, user: user, activity: activity} do test "pin status", %{conn: conn, user: user, activity: activity} do
id_str = to_string(activity.id) id_str = to_string(activity.id)


+ 92
- 11
test/web/mastodon_api/controllers/timeline_controller_test.exs View File

@@ -12,8 +12,6 @@ defmodule Pleroma.Web.MastodonAPI.TimelineControllerTest do
alias Pleroma.User alias Pleroma.User
alias Pleroma.Web.CommonAPI alias Pleroma.Web.CommonAPI


clear_config([:instance, :public])

setup do setup do
mock(fn env -> apply(HttpRequestMock, :request, [env]) end) mock(fn env -> apply(HttpRequestMock, :request, [env]) end)
:ok :ok
@@ -80,15 +78,6 @@ defmodule Pleroma.Web.MastodonAPI.TimelineControllerTest do
assert [%{"content" => "test"}] = json_response(conn, :ok) assert [%{"content" => "test"}] = json_response(conn, :ok)
end end


test "the public timeline when public is set to false", %{conn: conn} do
Config.put([:instance, :public], false)

assert %{"error" => "This resource requires authentication."} ==
conn
|> get("/api/v1/timelines/public", %{"local" => "False"})
|> json_response(:forbidden)
end

test "the public timeline includes only public statuses for an authenticated user" do test "the public timeline includes only public statuses for an authenticated user" do
%{user: user, conn: conn} = oauth_access(["read:statuses"]) %{user: user, conn: conn} = oauth_access(["read:statuses"])


@@ -102,6 +91,98 @@ defmodule Pleroma.Web.MastodonAPI.TimelineControllerTest do
end end
end end


defp local_and_remote_activities do
insert(:note_activity)
insert(:note_activity, local: false)
:ok
end

describe "public with restrict unauthenticated timeline for local and federated timelines" do
setup do: local_and_remote_activities()

setup do: clear_config([:restrict_unauthenticated, :timelines, :local], true)

setup do: clear_config([:restrict_unauthenticated, :timelines, :federated], true)

test "if user is unauthenticated", %{conn: conn} do
res_conn = get(conn, "/api/v1/timelines/public", %{"local" => "true"})

assert json_response(res_conn, :unauthorized) == %{
"error" => "authorization required for timeline view"
}

res_conn = get(conn, "/api/v1/timelines/public", %{"local" => "false"})

assert json_response(res_conn, :unauthorized) == %{
"error" => "authorization required for timeline view"
}
end

test "if user is authenticated" do
%{conn: conn} = oauth_access(["read:statuses"])

res_conn = get(conn, "/api/v1/timelines/public", %{"local" => "true"})
assert length(json_response(res_conn, 200)) == 1

res_conn = get(conn, "/api/v1/timelines/public", %{"local" => "false"})
assert length(json_response(res_conn, 200)) == 2
end
end

describe "public with restrict unauthenticated timeline for local" do
setup do: local_and_remote_activities()

setup do: clear_config([:restrict_unauthenticated, :timelines, :local], true)

test "if user is unauthenticated", %{conn: conn} do
res_conn = get(conn, "/api/v1/timelines/public", %{"local" => "true"})

assert json_response(res_conn, :unauthorized) == %{
"error" => "authorization required for timeline view"
}

res_conn = get(conn, "/api/v1/timelines/public", %{"local" => "false"})
assert length(json_response(res_conn, 200)) == 2
end

test "if user is authenticated", %{conn: _conn} do
%{conn: conn} = oauth_access(["read:statuses"])

res_conn = get(conn, "/api/v1/timelines/public", %{"local" => "true"})
assert length(json_response(res_conn, 200)) == 1

res_conn = get(conn, "/api/v1/timelines/public", %{"local" => "false"})
assert length(json_response(res_conn, 200)) == 2
end
end

describe "public with restrict unauthenticated timeline for remote" do
setup do: local_and_remote_activities()

setup do: clear_config([:restrict_unauthenticated, :timelines, :federated], true)

test "if user is unauthenticated", %{conn: conn} do
res_conn = get(conn, "/api/v1/timelines/public", %{"local" => "true"})
assert length(json_response(res_conn, 200)) == 1

res_conn = get(conn, "/api/v1/timelines/public", %{"local" => "false"})

assert json_response(res_conn, :unauthorized) == %{
"error" => "authorization required for timeline view"
}
end

test "if user is authenticated", %{conn: _conn} do
%{conn: conn} = oauth_access(["read:statuses"])

res_conn = get(conn, "/api/v1/timelines/public", %{"local" => "true"})
assert length(json_response(res_conn, 200)) == 1

res_conn = get(conn, "/api/v1/timelines/public", %{"local" => "false"})
assert length(json_response(res_conn, 200)) == 2
end
end

describe "direct" do describe "direct" do
test "direct timeline", %{conn: conn} do test "direct timeline", %{conn: conn} do
user_one = insert(:user) user_one = insert(:user)


+ 2
- 2
test/web/media_proxy/media_proxy_controller_test.exs View File

@@ -7,8 +7,8 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyControllerTest do
import Mock import Mock
alias Pleroma.Config alias Pleroma.Config


clear_config(:media_proxy)
clear_config([Pleroma.Web.Endpoint, :secret_key_base])
setup do: clear_config(:media_proxy)
setup do: clear_config([Pleroma.Web.Endpoint, :secret_key_base])


test "it returns 404 when MediaProxy disabled", %{conn: conn} do test "it returns 404 when MediaProxy disabled", %{conn: conn} do
Config.put([:media_proxy, :enabled], false) Config.put([:media_proxy, :enabled], false)


+ 2
- 2
test/web/media_proxy/media_proxy_test.exs View File

@@ -8,8 +8,8 @@ defmodule Pleroma.Web.MediaProxyTest do
import Pleroma.Web.MediaProxy import Pleroma.Web.MediaProxy
alias Pleroma.Web.MediaProxy.MediaProxyController alias Pleroma.Web.MediaProxy.MediaProxyController


clear_config([:media_proxy, :enabled])
clear_config(Pleroma.Upload)
setup do: clear_config([:media_proxy, :enabled])
setup do: clear_config(Pleroma.Upload)


describe "when enabled" do describe "when enabled" do
setup do setup do


+ 1
- 1
test/web/metadata/opengraph_test.exs View File

@@ -7,7 +7,7 @@ defmodule Pleroma.Web.Metadata.Providers.OpenGraphTest do
import Pleroma.Factory import Pleroma.Factory
alias Pleroma.Web.Metadata.Providers.OpenGraph alias Pleroma.Web.Metadata.Providers.OpenGraph


clear_config([Pleroma.Web.Metadata, :unfurl_nsfw])
setup do: clear_config([Pleroma.Web.Metadata, :unfurl_nsfw])


test "it renders all supported types of attachments and skips unknown types" do test "it renders all supported types of attachments and skips unknown types" do
user = insert(:user) user = insert(:user)


+ 1
- 1
test/web/metadata/twitter_card_test.exs View File

@@ -13,7 +13,7 @@ defmodule Pleroma.Web.Metadata.Providers.TwitterCardTest do
alias Pleroma.Web.Metadata.Utils alias Pleroma.Web.Metadata.Utils
alias Pleroma.Web.Router alias Pleroma.Web.Router


clear_config([Pleroma.Web.Metadata, :unfurl_nsfw])
setup do: clear_config([Pleroma.Web.Metadata, :unfurl_nsfw])


test "it renders twitter card for user info" do test "it renders twitter card for user info" do
user = insert(:user, name: "Jimmy Hendriks", bio: "born 19 March 1994") user = insert(:user, name: "Jimmy Hendriks", bio: "born 19 March 1994")


+ 3
- 3
test/web/node_info_test.exs View File

@@ -7,8 +7,8 @@ defmodule Pleroma.Web.NodeInfoTest do


import Pleroma.Factory import Pleroma.Factory


clear_config([:mrf_simple])
clear_config(:instance)
setup do: clear_config([:mrf_simple])
setup do: clear_config(:instance)


test "GET /.well-known/nodeinfo", %{conn: conn} do test "GET /.well-known/nodeinfo", %{conn: conn} do
links = links =
@@ -105,7 +105,7 @@ defmodule Pleroma.Web.NodeInfoTest do
end end


describe "`metadata/federation/enabled`" do describe "`metadata/federation/enabled`" do
clear_config([:instance, :federating])
setup do: clear_config([:instance, :federating])


test "it shows if federation is enabled/disabled", %{conn: conn} do test "it shows if federation is enabled/disabled", %{conn: conn} do
Pleroma.Config.put([:instance, :federating], true) Pleroma.Config.put([:instance, :federating], true)


+ 2
- 6
test/web/oauth/ldap_authorization_test.exs View File

@@ -12,13 +12,9 @@ defmodule Pleroma.Web.OAuth.LDAPAuthorizationTest do


@skip if !Code.ensure_loaded?(:eldap), do: :skip @skip if !Code.ensure_loaded?(:eldap), do: :skip


clear_config_all([:ldap, :enabled]) do
Pleroma.Config.put([:ldap, :enabled], true)
end
setup_all do: clear_config([:ldap, :enabled], true)


clear_config_all(Pleroma.Web.Auth.Authenticator) do
Pleroma.Config.put(Pleroma.Web.Auth.Authenticator, Pleroma.Web.Auth.LDAPAuthenticator)
end
setup_all do: clear_config(Pleroma.Web.Auth.Authenticator, Pleroma.Web.Auth.LDAPAuthenticator)


@tag @skip @tag @skip
test "authorizes the existing user using LDAP credentials" do test "authorizes the existing user using LDAP credentials" do


+ 3
- 9
test/web/oauth/oauth_controller_test.exs View File

@@ -17,8 +17,7 @@ defmodule Pleroma.Web.OAuth.OAuthControllerTest do
key: "_test", key: "_test",
signing_salt: "cooldude" signing_salt: "cooldude"
] ]

clear_config([:instance, :account_activation_required])
setup do: clear_config([:instance, :account_activation_required])


describe "in OAuth consumer mode, " do describe "in OAuth consumer mode, " do
setup do setup do
@@ -31,12 +30,7 @@ defmodule Pleroma.Web.OAuth.OAuthControllerTest do
] ]
end end


clear_config([:auth, :oauth_consumer_strategies]) do
Pleroma.Config.put(
[:auth, :oauth_consumer_strategies],
~w(twitter facebook)
)
end
setup do: clear_config([:auth, :oauth_consumer_strategies], ~w(twitter facebook))


test "GET /oauth/authorize renders auth forms, including OAuth consumer form", %{ test "GET /oauth/authorize renders auth forms, including OAuth consumer form", %{
app: app, app: app,
@@ -944,7 +938,7 @@ defmodule Pleroma.Web.OAuth.OAuthControllerTest do
end end


describe "POST /oauth/token - refresh token" do describe "POST /oauth/token - refresh token" do
clear_config([:oauth2, :issue_new_refresh_token])
setup do: clear_config([:oauth2, :issue_new_refresh_token])


test "issues a new access token with keep fresh token" do test "issues a new access token with keep fresh token" do
Pleroma.Config.put([:oauth2, :issue_new_refresh_token], true) Pleroma.Config.put([:oauth2, :issue_new_refresh_token], true)


+ 1
- 3
test/web/ostatus/ostatus_controller_test.exs View File

@@ -17,9 +17,7 @@ defmodule Pleroma.Web.OStatus.OStatusControllerTest do
:ok :ok
end end


clear_config([:instance, :federating]) do
Config.put([:instance, :federating], true)
end
setup do: clear_config([:instance, :federating], true)


# Note: see ActivityPubControllerTest for JSON format tests # Note: see ActivityPubControllerTest for JSON format tests
describe "GET /objects/:uuid (text/html)" do describe "GET /objects/:uuid (text/html)" do


+ 1
- 3
test/web/pleroma_api/controllers/account_controller_test.exs View File

@@ -27,9 +27,7 @@ defmodule Pleroma.Web.PleromaAPI.AccountControllerTest do
[user: user] [user: user]
end end


clear_config([:instance, :account_activation_required]) do
Config.put([:instance, :account_activation_required], true)
end
setup do: clear_config([:instance, :account_activation_required], true)


test "resend account confirmation email", %{conn: conn, user: user} do test "resend account confirmation email", %{conn: conn, user: user} do
conn conn


+ 1
- 4
test/web/pleroma_api/controllers/emoji_api_controller_test.exs View File

@@ -12,10 +12,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do
Pleroma.Config.get!([:instance, :static_dir]), Pleroma.Config.get!([:instance, :static_dir]),
"emoji" "emoji"
) )

clear_config([:auth, :enforce_oauth_admin_scope_usage]) do
Pleroma.Config.put([:auth, :enforce_oauth_admin_scope_usage], false)
end
setup do: clear_config([:auth, :enforce_oauth_admin_scope_usage], false)


test "shared & non-shared pack information in list_packs is ok" do test "shared & non-shared pack information in list_packs is ok" do
conn = build_conn() conn = build_conn()


+ 1
- 1
test/web/plugs/federating_plug_test.exs View File

@@ -5,7 +5,7 @@
defmodule Pleroma.Web.FederatingPlugTest do defmodule Pleroma.Web.FederatingPlugTest do
use Pleroma.Web.ConnCase use Pleroma.Web.ConnCase


clear_config([:instance, :federating])
setup do: clear_config([:instance, :federating])


test "returns and halt the conn when federating is disabled" do test "returns and halt the conn when federating is disabled" do
Pleroma.Config.put([:instance, :federating], false) Pleroma.Config.put([:instance, :federating], false)


+ 1
- 1
test/web/rich_media/helpers_test.exs View File

@@ -19,7 +19,7 @@ defmodule Pleroma.Web.RichMedia.HelpersTest do
:ok :ok
end end


clear_config([:rich_media, :enabled])
setup do: clear_config([:rich_media, :enabled])


test "refuses to crawl incomplete URLs" do test "refuses to crawl incomplete URLs" do
user = insert(:user) user = insert(:user)


+ 2
- 7
test/web/static_fe/static_fe_controller_test.exs View File

@@ -8,13 +8,8 @@ defmodule Pleroma.Web.StaticFE.StaticFEControllerTest do


import Pleroma.Factory import Pleroma.Factory


clear_config_all([:static_fe, :enabled]) do
Config.put([:static_fe, :enabled], true)
end

clear_config([:instance, :federating]) do
Config.put([:instance, :federating], true)
end
setup_all do: clear_config([:static_fe, :enabled], true)
setup do: clear_config([:instance, :federating], true)


setup %{conn: conn} do setup %{conn: conn} do
conn = put_req_header(conn, "accept", "text/html") conn = put_req_header(conn, "accept", "text/html")


+ 1
- 2
test/web/streamer/streamer_test.exs View File

@@ -19,8 +19,7 @@ defmodule Pleroma.Web.StreamerTest do


@streamer_timeout 150 @streamer_timeout 150
@streamer_start_wait 10 @streamer_start_wait 10

clear_config([:instance, :skip_thread_containment])
setup do: clear_config([:instance, :skip_thread_containment])


describe "user streams" do describe "user streams" do
setup do setup do


Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save