Merge branch 'develop' into gun
authorAlexander Strizhakov <alex.strizhakov@gmail.com>
Fri, 20 Mar 2020 17:47:54 +0000 (20:47 +0300)
committerAlexander Strizhakov <alex.strizhakov@gmail.com>
Fri, 20 Mar 2020 17:47:54 +0000 (20:47 +0300)
108 files changed:
.gitlab-ci.yml
CHANGELOG.md
config/config.exs
config/description.exs
docs/API/differences_in_mastoapi_responses.md
docs/configuration/cheatsheet.md
lib/pleroma/user.ex
lib/pleroma/web/activity_pub/visibility.ex
lib/pleroma/web/controller_helper.ex
lib/pleroma/web/feed/tag_controller.ex
lib/pleroma/web/feed/user_controller.ex
lib/pleroma/web/mastodon_api/controllers/account_controller.ex
lib/pleroma/web/mastodon_api/controllers/status_controller.ex
lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex
lib/pleroma/web/mastodon_api/mastodon_api.ex
lib/pleroma/web/nodeinfo/nodeinfo_controller.ex
lib/pleroma/web/router.ex
lib/pleroma/web/templates/feed/feed/_activity.atom.eex [moved from lib/pleroma/web/templates/feed/feed/_activity.xml.eex with 100% similarity]
lib/pleroma/web/templates/feed/feed/_activity.rss.eex [new file with mode: 0644]
lib/pleroma/web/templates/feed/feed/_author.atom.eex [moved from lib/pleroma/web/templates/feed/feed/_author.xml.eex with 100% similarity]
lib/pleroma/web/templates/feed/feed/_author.rss.eex [new file with mode: 0644]
lib/pleroma/web/templates/feed/feed/user.atom.eex [moved from lib/pleroma/web/templates/feed/feed/user.xml.eex with 85% similarity]
lib/pleroma/web/templates/feed/feed/user.rss.eex [new file with mode: 0644]
test/activity_expiration_test.exs
test/activity_test.exs
test/captcha_test.exs
test/config/transfer_task_test.exs
test/conversation_test.exs
test/emails/mailer_test.exs
test/http/request_builder_test.exs
test/object/fetcher_test.exs
test/object_test.exs
test/plugs/admin_secret_authentication_plug_test.exs
test/plugs/ensure_public_or_authenticated_plug_test.exs
test/plugs/http_security_plug_test.exs
test/plugs/instance_static_test.exs
test/plugs/oauth_scopes_plug_test.exs
test/plugs/rate_limiter_test.exs
test/plugs/remote_ip_test.exs
test/plugs/user_enabled_plug_test.exs
test/plugs/user_is_admin_plug_test.exs
test/repo_test.exs
test/scheduled_activity_test.exs
test/support/helpers.ex
test/tasks/config_test.exs
test/tasks/robots_txt_test.exs
test/upload/filter/anonymize_filename_test.exs
test/upload/filter/mogrify_test.exs
test/upload/filter_test.exs
test/upload_test.exs
test/uploaders/s3_test.exs
test/user_search_test.exs
test/user_test.exs
test/web/activity_pub/activity_pub_controller_test.exs
test/web/activity_pub/activity_pub_test.exs
test/web/activity_pub/mrf/hellthread_policy_test.exs
test/web/activity_pub/mrf/keyword_policy_test.exs
test/web/activity_pub/mrf/mention_policy_test.exs
test/web/activity_pub/mrf/mrf_test.exs
test/web/activity_pub/mrf/object_age_policy_test.exs
test/web/activity_pub/mrf/reject_non_public_test.exs
test/web/activity_pub/mrf/simple_policy_test.exs
test/web/activity_pub/mrf/subchain_policy_test.exs
test/web/activity_pub/mrf/user_allowlist_policy_test.exs
test/web/activity_pub/mrf/vocabulary_policy_test.exs
test/web/activity_pub/publisher_test.exs
test/web/activity_pub/relay_test.exs
test/web/activity_pub/transmogrifier/follow_handling_test.exs
test/web/activity_pub/transmogrifier_test.exs
test/web/activity_pub/views/object_view_test.exs
test/web/admin_api/admin_api_controller_test.exs
test/web/chat_channel_test.exs
test/web/common_api/common_api_test.exs
test/web/federator_test.exs
test/web/feed/tag_controller_test.exs
test/web/feed/user_controller_test.exs
test/web/instances/instance_test.exs
test/web/instances/instances_test.exs
test/web/masto_fe_controller_test.exs
test/web/mastodon_api/controllers/account_controller/update_credentials_test.exs
test/web/mastodon_api/controllers/account_controller_test.exs
test/web/mastodon_api/controllers/media_controller_test.exs
test/web/mastodon_api/controllers/notification_controller_test.exs
test/web/mastodon_api/controllers/scheduled_activity_controller_test.exs
test/web/mastodon_api/controllers/status_controller_test.exs
test/web/mastodon_api/controllers/timeline_controller_test.exs
test/web/media_proxy/media_proxy_controller_test.exs
test/web/media_proxy/media_proxy_test.exs
test/web/metadata/opengraph_test.exs
test/web/metadata/twitter_card_test.exs
test/web/node_info_test.exs
test/web/oauth/ldap_authorization_test.exs
test/web/oauth/oauth_controller_test.exs
test/web/ostatus/ostatus_controller_test.exs
test/web/pleroma_api/controllers/account_controller_test.exs
test/web/pleroma_api/controllers/emoji_api_controller_test.exs
test/web/plugs/federating_plug_test.exs
test/web/rich_media/helpers_test.exs
test/web/static_fe/static_fe_controller_test.exs
test/web/streamer/streamer_test.exs
test/web/twitter_api/remote_follow_controller_test.exs
test/web/twitter_api/twitter_api_test.exs
test/web/twitter_api/util_controller_test.exs
test/web/web_finger/web_finger_controller_test.exs
test/workers/cron/clear_oauth_token_worker_test.exs
test/workers/cron/digest_emails_worker_test.exs
test/workers/cron/purge_expired_activities_worker_test.exs
test/workers/scheduled_activity_worker_test.exs

index 5d0d3316a23871d69eedf83b0f8c50eb2e82b28a..1b7c03ebb9e235cfc9470ac42d69df93c8028973 100644 (file)
@@ -62,19 +62,21 @@ unit-testing:
     - mix ecto.migrate
     - 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:
   stage: test
index 122f97b69a034aefd5cf536774490196c7425c7e..841dd8afaea7580d2d93d5bb082541703015d0b2 100644 (file)
@@ -10,6 +10,14 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
 ### Removed
 - **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
 ### Security
 - Mastodon API: Fix being able to request enourmous amount of statuses in timelines leading to DoS. Now limited to 40 per request.
index 154eda48a00007b852137679b8f6e611d28a6d98..232a91bf132c8063f8f0f730121bb68eade6ad6f 100644 (file)
@@ -645,6 +645,11 @@ config :pleroma, :hackney_pools,
     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
 # of this file so it overrides the configuration defined above.
 import_config "#{Mix.env()}.exs"
index ee10515a74bcdb4b42511008d01083096262425a..056f5971d121c1a4ff6db10d05cbf61098c2985a 100644 (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."
+          }
+        ]
+      }
+    ]
   }
 ]
index b12d3092cc1947c77754bc8aaaa1d8f389398169..dc8f54d2a3498ea59e935b053739c232946b0a1f 100644 (file)
@@ -117,6 +117,7 @@ The `type` value is `pleroma:emoji_reaction`. Has these fields:
 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`.
+- `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`
 
index 5dda75811427a83c8b3cbf00411435b92fcb35f6..681ab6b93ddf4162b3deba2ad33df2782b5c777d 100644 (file)
@@ -907,3 +907,21 @@ config :auto_linker,
 ## :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.
+
+
+
+## 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`
\ No newline at end of file
index 911dde6e2876bc9fba1b7dc093554e872a1c3269..8693c0b8090c28c633a49d4110efdfba71c8d157 100644 (file)
@@ -237,7 +237,18 @@ defmodule Pleroma.User do
 
   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
     account_status(user) == :active || superuser?(for_user)
index 6f226fc927dd451eb78913e9bb7b10777a6ee3aa..453a6842edbc88d83f9bc740ddd1875c2b0aa590 100644 (file)
@@ -44,6 +44,7 @@ defmodule Pleroma.Web.ActivityPub.Visibility do
   def is_list?(%{data: %{"listMessage" => _}}), do: true
   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?(%{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?(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
 
   def visible_for_user?(activity, user) do
     x = [user.ap_id | User.following(user)]
     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
 
   def entire_thread_visible_for_user?(%Activity{} = activity, %User{} = user) do
index c9a3a25854785fdc4decd8360d4e283d5e4c7de0..ad293cda937e4c2f379013a55dc0f883bb992f5e 100644 (file)
@@ -87,7 +87,8 @@ defmodule Pleroma.Web.ControllerHelper do
     render_error(conn, :not_implemented, "Can't display this activity")
   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
index 75c9ea17e468439edf901efd65bca27a4520c378..8133f8480366bc2c14c6fa36538b0435e3d928d4 100644 (file)
@@ -9,18 +9,18 @@ defmodule Pleroma.Web.Feed.TagController do
   alias Pleroma.Web.ActivityPub.ActivityPub
   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
     {format, tag} = parse_tag(raw_tag)
 
     activities =
       %{"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()
 
     conn
-    |> put_resp_content_type("application/atom+xml")
+    |> put_resp_content_type("application/#{format}+xml")
     |> put_view(FeedView)
     |> render("tag.#{format}",
       activities: activities,
index 9ba602d9f062b8b3674f453f8f0aaa7cbae3687a..e27f859299dbc9f3e47dc83601d2bba6b9df7ee6 100644 (file)
@@ -11,7 +11,7 @@ defmodule Pleroma.Web.Feed.UserController do
   alias Pleroma.Web.ActivityPub.ActivityPubController
   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])
 
@@ -40,19 +40,28 @@ defmodule Pleroma.Web.Feed.UserController do
   end
 
   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
       activities =
         %{
           "type" => ["Create"],
           "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()
 
       conn
-      |> put_resp_content_type("application/atom+xml")
+      |> put_resp_content_type("application/#{format}+xml")
       |> put_view(FeedView)
-      |> render("user.xml",
+      |> render("user.#{format}",
         user: user,
         activities: activities,
         feed_config: Pleroma.Config.get([:feed])
index 88c997b9f75e2510262c6a945f3d9de514a7c10c..6dbf11ac92ff080f470d7df30277ff52f0a945fc 100644 (file)
@@ -60,7 +60,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do
 
   plug(
     Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug
-    when action != :create
+    when action not in [:create, :show, :statuses]
   )
 
   @relations [:follow, :unfollow]
@@ -259,7 +259,8 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do
 
   @doc "GET /api/v1/accounts/:id/statuses"
   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
         |> Map.put("tag", params["tagged"])
@@ -271,6 +272,8 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do
       |> add_link_headers(activities)
       |> put_view(StatusView)
       |> render("index.json", activities: activities, for: reading_user, as: :activity)
+    else
+      _e -> render_error(conn, :not_found, "Can't find user")
     end
   end
 
index 5c90065f6f9298dbb207cab596786d65175baae7..37afe6949f29f1e116beb5f6c1d88fdf3c19852f 100644 (file)
@@ -76,7 +76,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do
     %{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
 
index 09e08271b10f0b210bbab8c49af1033b9849b1f7..91f41416d4aad5381a1ee80c9989e0af34dfc905 100644 (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:lists"]} when action == :list)
 
-  plug(Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug)
+  plug(Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug when action != :public)
 
   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
     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
 
   def hashtag_fetching(params, user, local_only) do
index a2dc9bc71cc5efaa5014765bf5a3a6146e848b07..70da64a7a8f0fe8d7e7e36181f263a942109e1e9 100644 (file)
@@ -55,6 +55,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPI do
 
     user
     |> Notification.for_user_query(options)
+    |> restrict(:include_types, options)
     |> restrict(:exclude_types, options)
     |> restrict(:account_ap_id, options)
     |> Pagination.fetch_paginated(params)
@@ -69,6 +70,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPI do
   defp cast_params(params) do
     param_types = %{
       exclude_types: {:array, :string},
+      include_types: {:array, :string},
       exclude_visibilities: {:array, :string},
       reblogs: :boolean,
       with_muted: :boolean,
@@ -79,14 +81,16 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPI do
     changeset.changes
   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
-    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
 
   defp restrict(query, :account_ap_id, %{account_ap_id: account_ap_id}) do
@@ -94,4 +98,10 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPI do
   end
 
   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
index 18eb413338e223c6aa64b5204b6bccd87effc5e9..30838b1eb76d467845144f1437c49a42eb38a6ea 100644 (file)
@@ -60,6 +60,7 @@ defmodule Pleroma.Web.Nodeinfo.NodeinfoController do
         "pleroma_explicit_addressing",
         "shareable_emoji_packs",
         "multifetch",
+        "pleroma:api/v1/notifications:include_types_filter",
         if Config.get([:media_proxy, :enabled]) do
           "media_proxy"
         end,
index e4e3ee704eac2705cfa3d1cdad6baa50455e3e1e..3f36f6c1a8d000b7e3f7de3f554a77dd02a2888d 100644 (file)
@@ -513,7 +513,7 @@ defmodule Pleroma.Web.Router do
   end
 
   pipeline :ostatus do
-    plug(:accepts, ["html", "xml", "atom", "activity+json", "json"])
+    plug(:accepts, ["html", "xml", "rss", "atom", "activity+json", "json"])
     plug(Pleroma.Plugs.StaticFEPlug)
   end
 
diff --git a/lib/pleroma/web/templates/feed/feed/_activity.rss.eex b/lib/pleroma/web/templates/feed/feed/_activity.rss.eex
new file mode 100644 (file)
index 0000000..a4dbed6
--- /dev/null
@@ -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>
diff --git a/lib/pleroma/web/templates/feed/feed/_author.rss.eex b/lib/pleroma/web/templates/feed/feed/_author.rss.eex
new file mode 100644 (file)
index 0000000..526aedd
--- /dev/null
@@ -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>
similarity index 85%
rename from lib/pleroma/web/templates/feed/feed/user.xml.eex
rename to lib/pleroma/web/templates/feed/feed/user.atom.eex
index d274c08ae06d1b5082e2ff3bb3ad6215b3400ac4..c6acd848f2efd07907170b6e8aa7e320fbb9e16a 100644 (file)
   <logo><%= logo(@user) %></logo>
   <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 %>
     <link rel="next" href="<%= '#{user_feed_url(@conn, :feed, @user.nickname)}.atom?max_id=#{last_activity(@activities).id}' %>" type="application/atom+xml"/>
   <% end %>
 
   <%= 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 %>
 </feed>
diff --git a/lib/pleroma/web/templates/feed/feed/user.rss.eex b/lib/pleroma/web/templates/feed/feed/user.rss.eex
new file mode 100644 (file)
index 0000000..d691204
--- /dev/null
@@ -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>
index 4cda5e98509efe9cbea92f2497d11b9263e1fd98..e899d45093660d001675e69f8068004c8299a838 100644 (file)
@@ -7,7 +7,7 @@ defmodule Pleroma.ActivityExpirationTest do
   alias Pleroma.ActivityExpiration
   import Pleroma.Factory
 
-  clear_config([ActivityExpiration, :enabled])
+  setup do: clear_config([ActivityExpiration, :enabled])
 
   test "finds activities due to be deleted only" do
     activity = insert(:note_activity)
index 46b55beaaac2dac5ef64cb0dedd6e36e80496cbc..0c19f481b0e836e6cb61e08c7ce389f9b6f9a369 100644 (file)
@@ -138,7 +138,7 @@ defmodule Pleroma.ActivityTest do
       }
     end
 
-    clear_config([:instance, :limit_to_local_content])
+    setup do: clear_config([:instance, :limit_to_local_content])
 
     test "finds utf8 text in statuses", %{
       japanese_activity: japanese_activity,
index 5e29b48b07d90d1645dd9d03dc8997010da6ca20..ac1d846e833f7d2f19e281b8e3cdd139afae318c 100644 (file)
@@ -12,8 +12,7 @@ defmodule Pleroma.CaptchaTest do
   alias Pleroma.Captcha.Native
 
   @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
     setup do
index 01d04761d2c165418c528c65607d02d799ce1876..0265a61560d9d24df391e1d64b3e4e880ab6934c 100644 (file)
@@ -10,9 +10,7 @@ defmodule Pleroma.Config.TransferTaskTest do
   alias Pleroma.Config.TransferTask
   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
     refute Application.get_env(:pleroma, :test_key)
index dc0027d0440a00fdc5fc79735b1b12f69c2a0731..056a0e920eb89803d3253b62604d6a45b3eed8e8 100644 (file)
@@ -11,9 +11,7 @@ defmodule Pleroma.ConversationTest do
 
   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
     user = insert(:user)
index f30aa6a7201bc98fea853dd9d9c200b075ae3a03..e6e34cba8a3eba3f9efc98cb6ae2f9091e8b3cb5 100644 (file)
@@ -14,8 +14,7 @@ defmodule Pleroma.Emails.MailerTest do
     subject: "Pleroma test email",
     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
     Pleroma.Config.put([Pleroma.Emails.Mailer, :enabled], false)
index f6eeac6c07c08c82196dda21f38da1e1e9bfbd75..f11528c3feb5138cc4710f03cee047056e0f90f0 100644 (file)
@@ -10,8 +10,8 @@ defmodule Pleroma.HTTP.RequestBuilderTest do
   alias Pleroma.HTTP.RequestBuilder
 
   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
       assert RequestBuilder.headers(%Request{}, []) == %Request{headers: []}
index 4775ee1520857d9aba5a8b5adfb77263944efe16..c06e91f1274fb912fe8a4406e4e3e6c641468370 100644 (file)
@@ -28,8 +28,7 @@ defmodule Pleroma.Object.FetcherTest do
 
   describe "max thread distance restriction" do
     @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
       Pleroma.Config.put([:instance, :federation_incoming_replies_max_depth], 0)
@@ -160,7 +159,7 @@ defmodule Pleroma.Object.FetcherTest do
   end
 
   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",
                    Pleroma.Signature,
index 85b2a3f6d2738706eac37068a49476b4bdc514d9..fe583decd7ed1d591cc8975af6d95619b46d015e 100644 (file)
@@ -74,8 +74,8 @@ defmodule Pleroma.ObjectTest do
   end
 
   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
       Pleroma.Config.put([Pleroma.Upload, :uploader], Pleroma.Uploaders.Local)
index 2e300ac0cf6da12932364e467385ab40e2a6daf7..100016c62842461e987b0c04f82efa71fe6a45a2 100644 (file)
@@ -23,7 +23,7 @@ defmodule Pleroma.Plugs.AdminSecretAuthenticationPlugTest do
   end
 
   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
       Pleroma.Config.put(:admin_token, "password123")
index 3fcb4d37280894a84a6068a361ce2e16f65d4af9..411252274c5f0f0a008d8604bcd9257cbde8ced8 100644 (file)
@@ -9,7 +9,7 @@ defmodule Pleroma.Plugs.EnsurePublicOrAuthenticatedPlugTest do
   alias Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug
   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
     Config.put([:instance, :public], false)
index 944a9a139bc4c7fc9c1da7e944e10f0e007e773f..84e4c274fb5b54a2a0ba9c0a470ebc3cf99fa4db 100644 (file)
@@ -7,9 +7,9 @@ defmodule Pleroma.Web.Plugs.HTTPSecurityPlugTest do
   alias Pleroma.Config
   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
     setup do
index 8cd9b5712a00f135b4701a2ebf9c92c7c72dd87d..b8f070d6ad6f7b7742b15ab27b2df56db54abc51 100644 (file)
@@ -12,9 +12,7 @@ defmodule Pleroma.Web.RuntimeStaticPlugTest do
     on_exit(fn -> File.rm_rf(@dir) 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
     bundled_index = get(build_conn(), "/")
index 1b3aa85b6e3eee68c72d1823b80257cf66101db5..e79ecf263842db21eb6d0915c2dc4a5f132d5aae 100644 (file)
@@ -193,7 +193,7 @@ defmodule Pleroma.Plugs.OAuthScopesPlugTest do
   end
 
   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
       {:ok, %{f: &OAuthScopesPlug.transform_scopes/2}}
index c6e494c13de85b29be7787353742b4609c3b6eab..0ce9f3a0aed9c64cac93180fc904ce59230f8a52 100644 (file)
@@ -12,14 +12,12 @@ defmodule Pleroma.Plugs.RateLimiterTest do
   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
-
-  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
     @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
       Config.put([:rate_limit, @limiter_name], {1, 1})
index 9c3737b0b5e21a69ab54f57d8d12365f842734c3..752ab32e7b6bd32ca1fd7c0e49e167ed3a9a75e2 100644 (file)
@@ -9,8 +9,7 @@ defmodule Pleroma.Plugs.RemoteIpTest do
   alias Pleroma.Plugs.RemoteIp
 
   import Pleroma.Tests.Helpers, only: [clear_config: 1, clear_config: 2]
-
-  clear_config(RemoteIp)
+  setup do: clear_config(RemoteIp)
 
   test "disabled" do
     Pleroma.Config.put(RemoteIp, enabled: false)
index 931513d832e4042cb7007ca5fe9fc3ec7bde42e1..b219d8abffa35f759470dccedbefbba9ceddb7f6 100644 (file)
@@ -8,7 +8,7 @@ defmodule Pleroma.Plugs.UserEnabledPlugTest do
   alias Pleroma.Plugs.UserEnabledPlug
   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
     ret_conn =
index 015d51018c35bd1ef24aef733b34ad9891f0520a..fd6a50e534e62079d33993470f000322fac93792 100644 (file)
@@ -9,9 +9,7 @@ defmodule Pleroma.Plugs.UserIsAdminPlugTest do
   import Pleroma.Factory
 
   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
       user = insert(:user, is_admin: true)
@@ -42,9 +40,7 @@ defmodule Pleroma.Plugs.UserIsAdminPlugTest do
   end
 
   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
       admin_user = insert(:user, is_admin: true)
index 75e85f9742e01b008fa52de35efbd907e9a4c557..daffc65427487492b2d5d4113f0889ece8648d9c 100644 (file)
@@ -67,7 +67,7 @@ defmodule Pleroma.RepoTest do
       :ok
     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
       assert_raise Pleroma.Repo.UnappliedMigrationsError, fn ->
index 4369e7e8a8567aebf56eee0708d84acb19eacd69..7faa5660daa5856269c42873075bfddf12229a09 100644 (file)
@@ -8,7 +8,7 @@ defmodule Pleroma.ScheduledActivityTest do
   alias Pleroma.ScheduledActivity
   import Pleroma.Factory
 
-  clear_config([ScheduledActivity, :enabled])
+  setup do: clear_config([ScheduledActivity, :enabled])
 
   setup context do
     DataCase.ensure_local_uploader(context)
index 6bf4b019e94b35a57e6a2ca5b264687855852216..e68e9bfd2f357cda28c5fe41dd75616fa11f76fe 100644 (file)
@@ -17,35 +17,17 @@ defmodule Pleroma.Tests.Helpers do
 
   defmacro clear_config(config_path, do: yield) 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
 
-  @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
-      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
@@ -55,9 +37,7 @@ defmodule Pleroma.Tests.Helpers do
       import Pleroma.Tests.Helpers,
         only: [
           clear_config: 1,
-          clear_config: 2,
-          clear_config_all: 1,
-          clear_config_all: 2
+          clear_config: 2
         ]
 
       def to_datetime(naive_datetime) do
index a6c0de351004b6c0cbe3f0bb26aa9a76914b6586..3dee4f0829dc12afe34dd3ebb0e1292f52c743a9 100644 (file)
@@ -20,9 +20,7 @@ defmodule Mix.Tasks.Pleroma.ConfigTest do
     :ok
   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
     Mix.Tasks.Pleroma.Config.migrate_to_db("config/not_existance_config_file.exs")
index e03c9c19214ca20e05c9693dfb75341001f8d037..7040a0e4e1a5bd6afa3bf66029b0e0e7c615c437 100644 (file)
@@ -7,7 +7,7 @@ defmodule Mix.Tasks.Pleroma.RobotsTxtTest do
   use Pleroma.Tests.Helpers
   alias Mix.Tasks.Pleroma.RobotsTxt
 
-  clear_config([:instance, :static_dir])
+  setup do: clear_config([:instance, :static_dir])
 
   test "creates new dir" do
     path = "test/fixtures/new_dir/"
index 330158580517c8b839c0a033008eebac75b543e0..2d5c580f1ca4b909bd1c8aa814a1249e59a5a5b5 100644 (file)
@@ -18,7 +18,7 @@ defmodule Pleroma.Upload.Filter.AnonymizeFilenameTest do
     %{upload_file: upload_file}
   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
     Config.put([Upload.Filter.AnonymizeFilename, :text], "custom-file.png")
index 52483d80c5061a7dfdadeb6efbbcb495e4b5ec52..b6a463e8c8dd080fcc550ff334a59f8b9348ffdd 100644 (file)
@@ -10,7 +10,7 @@ defmodule Pleroma.Upload.Filter.MogrifyTest do
   alias Pleroma.Upload
   alias Pleroma.Upload.Filter
 
-  clear_config([Filter.Mogrify, :args])
+  setup do: clear_config([Filter.Mogrify, :args])
 
   test "apply mogrify filter" do
     Config.put([Filter.Mogrify, :args], [{"tint", "40"}])
index 2ffc5247bb5c1c3e934281a2cf8ab557ac545591..352b664024ed68e94a0f3477b3b37e04d55da685 100644 (file)
@@ -8,7 +8,7 @@ defmodule Pleroma.Upload.FilterTest do
   alias Pleroma.Config
   alias Pleroma.Upload.Filter
 
-  clear_config([Pleroma.Upload.Filter.AnonymizeFilename, :text])
+  setup do: clear_config([Pleroma.Upload.Filter.AnonymizeFilename, :text])
 
   test "applies filters" do
     Config.put([Pleroma.Upload.Filter.AnonymizeFilename, :text], "custom-file.png")
index 6ce42b630cd251127eeb877a4fb23b08bffefbbc..060a940bbaaa88e77042b903f1cbd0471cc63def 100644 (file)
@@ -250,9 +250,7 @@ defmodule Pleroma.UploadTest do
   end
 
   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
       base_url = Pleroma.Config.get([Pleroma.Upload, :base_url])
index fdc7eff410c6fe9696fa72d765edf1340ff7f1db..6950ccb254ef13100a06e22a74d41a4e474c6e43 100644 (file)
@@ -11,12 +11,11 @@ defmodule Pleroma.Uploaders.S3Test do
   import Mock
   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
     test "it returns path to local folder for files" do
index 406cc8fb25a50fee31fd7335992e5f86c0def81f..cb847b516df2d1e36ac3deecae17aad620c3cf7a 100644 (file)
@@ -15,7 +15,7 @@ defmodule Pleroma.UserSearchTest do
   end
 
   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
       user = insert(:user, %{nickname: "john t1000"})
index b07fed42bac84b2eb9b0830887e0ad4f74893f4c..119a36ec1da2a026d7cea247f711c1cbbf5adbc9 100644 (file)
@@ -24,7 +24,7 @@ defmodule Pleroma.UserTest do
     :ok
   end
 
-  clear_config([:instance, :account_activation_required])
+  setup do: clear_config([:instance, :account_activation_required])
 
   describe "service actors" do
     test "returns updated invisible actor" do
@@ -297,7 +297,7 @@ defmodule Pleroma.UserTest do
   end
 
   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
       Pleroma.Config.put([:instance, :external_user_synchronization], true)
@@ -375,10 +375,9 @@ defmodule Pleroma.UserTest do
       password_confirmation: "test",
       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
       user = insert(:user)
@@ -412,7 +411,7 @@ defmodule Pleroma.UserTest do
       assert activity.actor == welcome_user.ap_id
     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
       Pleroma.Config.put([:instance, :account_activation_required], true)
@@ -475,10 +474,7 @@ defmodule Pleroma.UserTest do
       password_confirmation: "test",
       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
       changeset = User.register_changeset(%User{}, @full_user_data)
@@ -621,9 +617,8 @@ defmodule Pleroma.UserTest do
       ap_id: "http...",
       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
       cs = User.remote_user_creation(@valid_remote)
@@ -1116,7 +1111,7 @@ defmodule Pleroma.UserTest do
       [user: user]
     end
 
-    clear_config([:instance, :federating])
+    setup do: clear_config([:instance, :federating])
 
     test ".delete_user_activities deletes all create activities", %{user: user} do
       {:ok, activity} = CommonAPI.post(user, %{"status" => "2hu"})
@@ -1297,7 +1292,7 @@ defmodule Pleroma.UserTest do
   end
 
   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
       Pleroma.Config.put([:instance, :account_activation_required], true)
@@ -1665,7 +1660,7 @@ defmodule Pleroma.UserTest do
   end
 
   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
       Pleroma.Config.put([:instance, :external_user_synchronization], false)
@@ -1770,7 +1765,7 @@ defmodule Pleroma.UserTest do
       [local_user: local_user, remote_user: remote_user]
     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", %{
       remote_user: remote_user
index bd8e0b5cc8ea1df1e59e64b61c17d68d7530e3a8..573853afaea529ad417c1e8e125bcb8472f39575 100644 (file)
@@ -26,12 +26,10 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest do
     :ok
   end
 
-  clear_config([:instance, :federating]) do
-    Config.put([:instance, :federating], true)
-  end
+  setup do: clear_config([:instance, :federating], true)
 
   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
       res =
@@ -1227,8 +1225,8 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest do
       |> json_response(403)
     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
       user = insert(:user)
index d86c8260e82914033d32556316360465bb646ec8..a43dd34f01fa79ddb0889f05eb8d40243e9cfe58 100644 (file)
@@ -27,7 +27,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do
     :ok
   end
 
-  clear_config([:instance, :federating])
+  setup do: clear_config([:instance, :federating])
 
   describe "streaming out participations" do
     test "it streams them out" do
@@ -1396,7 +1396,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do
   end
 
   describe "deletion" do
-    clear_config([:instance, :rewrite_policy])
+    setup do: clear_config([:instance, :rewrite_policy])
 
     test "it reverts deletion on error" do
       note = insert(:note_activity)
@@ -1580,7 +1580,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do
   end
 
   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
       user = insert(:user)
index 916b95692f64d676558a1bbbdbb2cb1a156bfde3..95ef0b16800d74f0338ac6b8661d5bafc8273fb7 100644 (file)
@@ -26,7 +26,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.HellthreadPolicyTest do
     [user: user, message: message]
   end
 
-  clear_config(:mrf_hellthread)
+  setup do: clear_config(:mrf_hellthread)
 
   describe "reject" do
     test "rejects the message if the recipient count is above reject_threshold", %{
index 18242a889633441388f7e901387c615c0dbda7dd..fd1f7aec804ef13ea635ed2ba9923741e1c48335 100644 (file)
@@ -7,7 +7,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.KeywordPolicyTest do
 
   alias Pleroma.Web.ActivityPub.MRF.KeywordPolicy
 
-  clear_config(:mrf_keyword)
+  setup do: clear_config(:mrf_keyword)
 
   setup do
     Pleroma.Config.put([:mrf_keyword], %{reject: [], federated_timeline_removal: [], replace: []})
index 08f7be542f99315e8f1bf3a72d4eeb429300bb91..aa003bef5182d53b741f0468f26fb7c6f8ec4161 100644 (file)
@@ -7,7 +7,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.MentionPolicyTest do
 
   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
     Pleroma.Config.delete([:mrf_mention])
index 04709df17b4cce3198e4f792f385b802f5e4f889..c941066f2ead00d882846807a5816925e096d731 100644 (file)
@@ -60,7 +60,7 @@ defmodule Pleroma.Web.ActivityPub.MRFTest do
   end
 
   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
       expected = %{
index e521fae442887777a25122b33f2016bf239edc96..7ee195eeb51f3e988735bd5a53ba174331173504 100644 (file)
@@ -9,12 +9,11 @@ defmodule Pleroma.Web.ActivityPub.MRF.ObjectAgePolicyTest do
   alias Pleroma.Web.ActivityPub.MRF.ObjectAgePolicy
   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
     Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end)
index 5cc68bca85b002dab7cf6ddc3c0fe2a585334468..f36299b861072768f02fe3f8f9af5aa848041cfc 100644 (file)
@@ -8,7 +8,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.RejectNonPublicTest do
 
   alias Pleroma.Web.ActivityPub.MRF.RejectNonPublic
 
-  clear_config([:mrf_rejectnonpublic])
+  setup do: clear_config([:mrf_rejectnonpublic])
 
   describe "public message" do
     test "it's allowed when address is public" do
index e825a15143fb051ba23f3392cf896e167550d57c..91c24c2d96fac2a31fabb75ef48bc1ec8a7e5808 100644 (file)
@@ -8,18 +8,17 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicyTest do
   alias Pleroma.Config
   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
     test "is empty" do
index 221b8958e39be5a8032f0848ff04a44ffd93576e..fff66cb7e5355b77a02993572b33d26f7f705b61 100644 (file)
@@ -13,8 +13,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.SubchainPolicyTest do
     "type" => "Create",
     "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
     Pleroma.Config.put([:mrf_subchain, :match_actor], %{
index 87c9e1b295b8074b190131894b2766225639a56e..724bae058619e61d23fb4d76980c0924cba187d3 100644 (file)
@@ -7,7 +7,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.UserAllowListPolicyTest do
 
   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
     actor = insert(:user)
index d9207b095a4f9fe0385537d14355d088938782aa..69f22bb77cabcfe8ca36d8c5c877917900eb8134 100644 (file)
@@ -8,7 +8,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.VocabularyPolicyTest do
   alias Pleroma.Web.ActivityPub.MRF.VocabularyPolicy
 
   describe "accept" do
-    clear_config([:mrf_vocabulary, :accept])
+    setup do: clear_config([:mrf_vocabulary, :accept])
 
     test "it accepts based on parent activity type" do
       Pleroma.Config.put([:mrf_vocabulary, :accept], ["Like"])
@@ -65,7 +65,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.VocabularyPolicyTest do
   end
 
   describe "reject" do
-    clear_config([:mrf_vocabulary, :reject])
+    setup do: clear_config([:mrf_vocabulary, :reject])
 
     test "it rejects based on parent activity type" do
       Pleroma.Config.put([:mrf_vocabulary, :reject], ["Like"])
index da26b13f7040b8f880e1296231970e4cc4986512..801da03c1318c8f0fe539f0e9cad104b7f6cad13 100644 (file)
@@ -23,9 +23,7 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do
     :ok
   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
     test "it returns links" do
index 12bf90d90039b492fd6205ea2502d2abea8fd21c..9e16e39c445afd311e4d856e86d79e9a6e6497e9 100644 (file)
@@ -68,7 +68,7 @@ defmodule Pleroma.Web.ActivityPub.RelayTest do
   end
 
   describe "publish/1" do
-    clear_config([:instance, :federating])
+    setup do: clear_config([:instance, :federating])
 
     test "returns error when activity not `Create` type" do
       activity = insert(:like_activity)
index c3d3f9830248fb6ad70d3f23099c78dac3698696..967389fae465407cb372548a203eb2d1de270e28 100644 (file)
@@ -19,7 +19,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.FollowHandlingTest do
   end
 
   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
       user = insert(:user)
index efbca82f620b177bd9691ef19d612afd8369bac7..b2cabbd300745ff5b1dce17f980c7624d4213947 100644 (file)
@@ -25,7 +25,7 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do
     :ok
   end
 
-  clear_config([:instance, :max_remote_account_fields])
+  setup do: clear_config([:instance, :max_remote_account_fields])
 
   describe "handle_incoming" do
     test "it ignores an incoming notice if we already have it" do
@@ -1351,11 +1351,8 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do
   end
 
   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
       data =
@@ -1394,11 +1391,8 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do
   end
 
   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
       user = insert(:user)
@@ -1882,7 +1876,7 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do
   end
 
   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
       data = Poison.decode!(File.read!("test/fixtures/mastodon-post-activity.json"))
@@ -2145,9 +2139,7 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do
   end
 
   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
       data = Poison.decode!(File.read!("test/fixtures/mastodon-post-activity.json"))
index 09866e99be201dd9161d7ae522b828970d3a0e08..de5ffc5b3bae5831cde19f897bf7602f253a879b 100644 (file)
@@ -37,9 +37,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectViewTest do
   end
 
   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
       user = insert(:user)
index eb29deaed4765f3a0623ddc4bc1f31287badd307..4729ed9ed39c8700bc6c091b12269fdc724ebd37 100644 (file)
@@ -43,9 +43,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
   end
 
   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",
          %{admin: admin} do
@@ -93,9 +91,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
   end
 
   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 " <>
            "read:accounts or admin:read:accounts or broader scope",
@@ -581,13 +577,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
   end
 
   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
       recipient_email = "foo@bar.com"
@@ -638,8 +629,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
   end
 
   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
       Config.put([:instance, :registrations_open], false)
@@ -1888,9 +1879,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
   end
 
   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
       Config.put(:configurable_from_database, false)
@@ -2041,9 +2030,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
       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
     test "create new config setting in db", %{conn: conn} do
@@ -3034,9 +3021,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
   end
 
   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
       capture_log(fn ->
index 68c24a9f97966606cf1f2417d88110a12f6c47fa..f18f3a212ea28d3a5e53aab2f9bfa2dd679ed33d 100644 (file)
@@ -21,7 +21,7 @@ defmodule Pleroma.Web.ChatChannelTest do
   end
 
   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
       push(socket, "new_msg", %{"text" => ""})
index b80523160eca66bdf4f85d05c3cf44874a332396..0da0bd2e2903fc83d2133a9f378ae9eb707aaa3b 100644 (file)
@@ -17,9 +17,9 @@ defmodule Pleroma.Web.CommonAPITest do
 
   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
     user = insert(:user)
index d2ee2267c07b60797fef3ae8446d851533cbc8a3..da844c24c2a7a8598a884685dbd039636c667b5b 100644 (file)
@@ -21,13 +21,10 @@ defmodule Pleroma.Web.FederatorTest do
     :ok
   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
     setup do
index 5950605e8bc016dcf299c3173eea4a0538b3e5c2..e863df86b0c7fa987a02149b98e5c99f40586696 100644 (file)
@@ -8,9 +8,11 @@ defmodule Pleroma.Web.Feed.TagControllerTest do
   import Pleroma.Factory
   import SweetXml
 
+  alias Pleroma.Object
+  alias Pleroma.Web.CommonAPI
   alias Pleroma.Web.Feed.FeedView
 
-  clear_config([:feed])
+  setup do: clear_config([:feed])
 
   test "gets a feed (ATOM)", %{conn: conn} do
     Pleroma.Config.put(
@@ -19,9 +21,9 @@ defmodule Pleroma.Web.Feed.TagControllerTest do
     )
 
     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 =
       Map.put(object.data, "attachment", [
@@ -41,14 +43,13 @@ defmodule Pleroma.Web.Feed.TagControllerTest do
     |> Ecto.Changeset.change(data: object_data)
     |> 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 =
       conn
-      |> put_req_header("content-type", "application/atom+xml")
+      |> put_req_header("accept", "application/atom+xml")
       |> get(tag_feed_path(conn, :feed, "pleromaart.atom"))
       |> 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/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
 
   test "gets a feed (RSS)", %{conn: conn} do
@@ -72,9 +88,9 @@ defmodule Pleroma.Web.Feed.TagControllerTest do
     )
 
     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 =
       Map.put(object.data, "attachment", [
@@ -94,14 +110,13 @@ defmodule Pleroma.Web.Feed.TagControllerTest do
     |> Ecto.Changeset.change(data: object_data)
     |> 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 =
       conn
-      |> put_req_header("content-type", "application/rss+xml")
+      |> put_req_header("accept", "application/rss+xml")
       |> get(tag_feed_path(conn, :feed, "pleromaart.rss"))
       |> response(200)
 
@@ -131,8 +146,8 @@ defmodule Pleroma.Web.Feed.TagControllerTest do
              "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) == [
              HtmlEntities.decode(FeedView.activity_content(obj2)),
@@ -141,7 +156,7 @@ defmodule Pleroma.Web.Feed.TagControllerTest do
 
     response =
       conn
-      |> put_req_header("content-type", "application/atom+xml")
+      |> put_req_header("accept", "application/rss+xml")
       |> get(tag_feed_path(conn, :feed, "pleromaart"))
       |> response(200)
 
@@ -150,5 +165,20 @@ defmodule Pleroma.Web.Feed.TagControllerTest do
 
     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."
+
+    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
index 00c50f00333851a74f4c6b99489f8dd46d752f64..05ad427c2487c2663e8b6efcd497aa083e5f608a 100644 (file)
@@ -12,12 +12,10 @@ defmodule Pleroma.Web.Feed.UserControllerTest do
   alias Pleroma.Object
   alias Pleroma.User
 
-  clear_config([:instance, :federating]) do
-    Config.put([:instance, :federating], true)
-  end
+  setup do: clear_config([:instance, :federating], true)
 
   describe "feed" do
-    clear_config([:feed])
+    setup do: clear_config([:feed])
 
     test "gets a feed", %{conn: conn} do
       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)
 
       resp =
         conn
-        |> put_req_header("content-type", "application/atom+xml")
+        |> put_req_header("accept", "application/atom+xml")
         |> get(user_feed_path(conn, :feed, user.nickname))
         |> response(200)
 
@@ -70,12 +68,91 @@ defmodule Pleroma.Web.Feed.UserControllerTest do
 
       assert activity_titles == ['42 This...', 'This is...']
       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
 
     test "returns 404 for a missing feed", %{conn: conn} do
       conn =
         conn
-        |> put_req_header("content-type", "application/atom+xml")
+        |> put_req_header("accept", "application/atom+xml")
         |> get(user_feed_path(conn, :feed, "nonexisting"))
 
       assert response(conn, 404)
index a3c93b986657de42abbfe80ace3928a2814e0b9b..e463200ca6f56d7c3c000efdd8e34fbdbac8d780 100644 (file)
@@ -10,9 +10,7 @@ defmodule Pleroma.Instances.InstanceTest do
 
   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
     test "clears `unreachable_since` of existing matching Instance record having non-nil `unreachable_since`" do
index c5d6abc9c115a357e348f8efaa9978e47cf91f20..d2618025c0bbdde67b4d25823790eb4963d7c71e 100644 (file)
@@ -7,9 +7,7 @@ defmodule Pleroma.InstancesTest do
 
   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
     test "returns `true` for host / url with unknown reachability status" do
index 9a2d76e0b46b6a579f23df37f1697d0f62172606..1d107d56c0087bab1f910a7af684593437447d5d 100644 (file)
@@ -10,7 +10,7 @@ defmodule Pleroma.Web.MastodonAPI.MastoFEController do
 
   import Pleroma.Factory
 
-  clear_config([:instance, :public])
+  setup do: clear_config([:instance, :public])
 
   test "put settings", %{conn: conn} do
     user = insert(:user)
index cba68859e4109052c8257a2cfa034603fa04eba2..43538cb1715f0cbc4e04c61d2707f53db0a88844 100644 (file)
@@ -9,7 +9,8 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do
   use Pleroma.Web.ConnCase
 
   import Pleroma.Factory
-  clear_config([:instance, :max_account_fields])
+
+  setup do: clear_config([:instance, :max_account_fields])
 
   describe "updating credentials" do
     setup do: oauth_access(["write:accounts"])
index 7efccd9c4faca58f9c248d60374fcad8c8ec5283..a9fa0ce48c40f1f6c127aa928676e35f0b862a3b 100644 (file)
@@ -5,6 +5,7 @@
 defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
   use Pleroma.Web.ConnCase
 
+  alias Pleroma.Config
   alias Pleroma.Repo
   alias Pleroma.User
   alias Pleroma.Web.ActivityPub.ActivityPub
@@ -15,7 +16,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
   import Pleroma.Factory
 
   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
       user = insert(:user)
@@ -46,7 +47,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
     end
 
     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)
 
       conn =
@@ -58,7 +59,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
     end
 
     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)
 
@@ -70,7 +71,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
     end
 
     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)
       reading_user = insert(:user)
@@ -140,6 +141,98 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
     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
     setup do: oauth_access(["read:statuses"])
 
@@ -293,6 +386,102 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
     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
     setup do: oauth_access(["read:accounts"])
 
@@ -601,7 +790,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
       [valid_params: valid_params]
     end
 
-    clear_config([:instance, :account_activation_required])
+    setup do: clear_config([:instance, :account_activation_required])
 
     test "Account registration via Application", %{conn: conn} do
       conn =
@@ -699,7 +888,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
       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",
          %{conn: conn, valid_params: valid_params} do
@@ -756,9 +945,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
   end
 
   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
       app_token = insert(:oauth_token, user: nil)
index 203fa73b029e1d4216900761f297c9848037834f..6ac4cf63b840695362bb5d440e6c80978c1778c9 100644 (file)
@@ -22,8 +22,8 @@ defmodule Pleroma.Web.MastodonAPI.MediaControllerTest do
       [image: image]
     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
       desc = "Description of the image"
index 4f6a88950939333f489fe539b165c0e7891286d3..23f94e3a609ada410da2636ec0fa51edf0ad2a90 100644 (file)
@@ -304,6 +304,51 @@ defmodule Pleroma.Web.MastodonAPI.NotificationControllerTest do
     assert [%{"id" => ^reblog_notification_id}] = json_response(conn_res, 200)
   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
     %{user: user, conn: conn} = oauth_access(["read:notifications", "write:notifications"])
     other_user = insert(:user)
index 3cd08c189613a0faea4c444d1fe0766ca84d4edc..f86274d57973e18943302eb12a52c9f9865274a8 100644 (file)
@@ -11,7 +11,7 @@ defmodule Pleroma.Web.MastodonAPI.ScheduledActivityControllerTest do
   import Pleroma.Factory
   import Ecto.Query
 
-  clear_config([ScheduledActivity, :enabled])
+  setup do: clear_config([ScheduledActivity, :enabled])
 
   test "shows scheduled activities" do
     %{user: user, conn: conn} = oauth_access(["read:statuses"])
index fbf63f608be841266a7889ca7d8891b759dff27e..d59974d50bf479dc236ac2a0d954e917a36b6a86 100644 (file)
@@ -19,9 +19,9 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do
 
   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
     setup do: oauth_access(["write:statuses"])
@@ -476,6 +476,95 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do
     assert id == to_string(activity.id)
   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
     %{conn: conn} = oauth_access(["read:statuses"])
     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"])
   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
     test "when you created it" do
       %{user: author, conn: conn} = oauth_access(["write:statuses"])
@@ -739,9 +892,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do
       %{activity: activity}
     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
       id_str = to_string(activity.id)
index 2c03b0a751122500dcdd9022179a67ff8facaad6..6fedb4223d8963bbeb7b4251820e8b4f2960caf2 100644 (file)
@@ -12,8 +12,6 @@ defmodule Pleroma.Web.MastodonAPI.TimelineControllerTest do
   alias Pleroma.User
   alias Pleroma.Web.CommonAPI
 
-  clear_config([:instance, :public])
-
   setup do
     mock(fn env -> apply(HttpRequestMock, :request, [env]) end)
     :ok
@@ -80,15 +78,6 @@ defmodule Pleroma.Web.MastodonAPI.TimelineControllerTest do
       assert [%{"content" => "test"}] = json_response(conn, :ok)
     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
       %{user: user, conn: conn} = oauth_access(["read:statuses"])
 
@@ -102,6 +91,98 @@ defmodule Pleroma.Web.MastodonAPI.TimelineControllerTest do
     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
     test "direct timeline", %{conn: conn} do
       user_one = insert(:user)
index 7ac7e4af11618669e94f3e88cefad2c9a5377bdd..da79d38a54585a7141b9862452cffda3e7ec0276 100644 (file)
@@ -7,8 +7,8 @@ defmodule Pleroma.Web.MediaProxy.MediaProxyControllerTest do
   import Mock
   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
     Config.put([:media_proxy, :enabled], false)
index 8f5fcf2ebfebf2634bb000cb272e7a78279e78e2..69c2d5dae89fe8dc3a34da08ed7ad8e87ec9f806 100644 (file)
@@ -8,8 +8,8 @@ defmodule Pleroma.Web.MediaProxyTest do
   import Pleroma.Web.MediaProxy
   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
     setup do
index 9d7c009eb274b256b8f902eeac6c914112482ebf..218540e6c36b9eb370a33486ccd3b44405c84b22 100644 (file)
@@ -7,7 +7,7 @@ defmodule Pleroma.Web.Metadata.Providers.OpenGraphTest do
   import Pleroma.Factory
   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
     user = insert(:user)
index 3d75d1ed56fbf2ac6cb8980cae3269675f6ecfa1..9e9c6853a8bd80565aa4c78f5d8821e35df35e8f 100644 (file)
@@ -13,7 +13,7 @@ defmodule Pleroma.Web.Metadata.Providers.TwitterCardTest do
   alias Pleroma.Web.Metadata.Utils
   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
     user = insert(:user, name: "Jimmy Hendriks", bio: "born 19 March 1994")
index ee10ad5db22a64a62cdc721d11936547fe8887eb..43f32260616e9fcca5a481f765a3526e88369806 100644 (file)
@@ -7,8 +7,8 @@ defmodule Pleroma.Web.NodeInfoTest do
 
   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
     links =
@@ -105,7 +105,7 @@ defmodule Pleroma.Web.NodeInfoTest do
   end
 
   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
       Pleroma.Config.put([:instance, :federating], true)
index c55b0ffc574fd50ca0a4c1cc01fe2178fb463cc6..a8fe8a841a6333fcc98c9e5c83e4a3820b164de9 100644 (file)
@@ -12,13 +12,9 @@ defmodule Pleroma.Web.OAuth.LDAPAuthorizationTest do
 
   @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
   test "authorizes the existing user using LDAP credentials" do
index cff469c2851e8b2d06a3f6f6cfca6bd2f768f55f..0b0972b17979f9aaad3521633201660854ff11db 100644 (file)
@@ -17,8 +17,7 @@ defmodule Pleroma.Web.OAuth.OAuthControllerTest do
     key: "_test",
     signing_salt: "cooldude"
   ]
-
-  clear_config([:instance, :account_activation_required])
+  setup do: clear_config([:instance, :account_activation_required])
 
   describe "in OAuth consumer mode, " do
     setup do
@@ -31,12 +30,7 @@ defmodule Pleroma.Web.OAuth.OAuthControllerTest do
       ]
     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", %{
       app: app,
@@ -944,7 +938,7 @@ defmodule Pleroma.Web.OAuth.OAuthControllerTest do
   end
 
   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
       Pleroma.Config.put([:oauth2, :issue_new_refresh_token], true)
index 3b84358e4a66009f15bc8df5aecf1e7674790367..6787b414b12d5eda7f202fe42e501dfc897a070b 100644 (file)
@@ -17,9 +17,7 @@ defmodule Pleroma.Web.OStatus.OStatusControllerTest do
     :ok
   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
   describe "GET /objects/:uuid (text/html)" do
index 245cc15796125cea78acfced7c3148e1bad505ad..2aa87ac30599724cda63926b5da0de2bd3f11e65 100644 (file)
@@ -27,9 +27,7 @@ defmodule Pleroma.Web.PleromaAPI.AccountControllerTest do
       [user: user]
     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
       conn
index 4b9f5cf9a1fb187842b9ba7f97e254baff6e5b28..435fb65921d83b582539a56405f2209778aaf605 100644 (file)
@@ -12,10 +12,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do
                     Pleroma.Config.get!([:instance, :static_dir]),
                     "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
     conn = build_conn()
index 13edc435960e2a53c632e9343514b08774160a0c..2f8aadadcfac1d98a605ade71b302265f0083d5b 100644 (file)
@@ -5,7 +5,7 @@
 defmodule Pleroma.Web.FederatingPlugTest do
   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
     Pleroma.Config.put([:instance, :federating], false)
index 8237802a76a0f4fe6c20b0402011c85cfc0bff1b..aa0c5c8304cb4912be852f355c3eeac23744b088 100644 (file)
@@ -19,7 +19,7 @@ defmodule Pleroma.Web.RichMedia.HelpersTest do
     :ok
   end
 
-  clear_config([:rich_media, :enabled])
+  setup do: clear_config([:rich_media, :enabled])
 
   test "refuses to crawl incomplete URLs" do
     user = insert(:user)
index c3d2ae3b41d046c7f82f7b7e25a717d593dc37d6..430683ea076d74e867fdfca40953f6171645d0c4 100644 (file)
@@ -8,13 +8,8 @@ defmodule Pleroma.Web.StaticFE.StaticFEControllerTest do
 
   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
     conn = put_req_header(conn, "accept", "text/html")
index a04d70f21612d18fe48d71f8e1725e3bf7a3031b..5b928629b85dcebc6bd6ac84fd5fe265b51a6dcc 100644 (file)
@@ -19,8 +19,7 @@ defmodule Pleroma.Web.StreamerTest do
 
   @streamer_timeout 150
   @streamer_start_wait 10
-
-  clear_config([:instance, :skip_thread_containment])
+  setup do: clear_config([:instance, :skip_thread_containment])
 
   describe "user streams" do
     setup do
index 73062f18fee0c1f726dfde99690ed24f6f7653fd..5ff8694a8d40d518cb12476331f7eaa95d5c5182 100644 (file)
@@ -17,13 +17,10 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowControllerTest do
     :ok
   end
 
-  clear_config_all([:instance, :federating]) do
-    Config.put([:instance, :federating], true)
-  end
-
-  clear_config([:instance])
-  clear_config([:frontend_configurations, :pleroma_fe])
-  clear_config([:user, :deny_follow_blocked])
+  setup_all do: clear_config([:instance, :federating], true)
+  setup do: clear_config([:instance])
+  setup do: clear_config([:frontend_configurations, :pleroma_fe])
+  setup do: clear_config([:user, :deny_follow_blocked])
 
   describe "GET /ostatus_subscribe - remote_follow/2" do
     test "adds status to pleroma instance if the `acct` is a status", %{conn: conn} do
index 14eed5f27adeb3301044c5d31695df6ba0e22d09..92f9aa0f515ce21fb5340a6ec65eb94e41770946 100644 (file)
@@ -117,9 +117,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
   end
 
   describe "register with one time token" do
-    clear_config([:instance, :registrations_open]) do
-      Pleroma.Config.put([:instance, :registrations_open], false)
-    end
+    setup do: clear_config([:instance, :registrations_open], false)
 
     test "returns user on success" do
       {:ok, invite} = UserInviteToken.create_invite()
@@ -184,9 +182,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
   end
 
   describe "registers with date limited token" do
-    clear_config([:instance, :registrations_open]) do
-      Pleroma.Config.put([:instance, :registrations_open], false)
-    end
+    setup do: clear_config([:instance, :registrations_open], false)
 
     setup do
       data = %{
@@ -246,9 +242,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
   end
 
   describe "registers with reusable token" do
-    clear_config([:instance, :registrations_open]) do
-      Pleroma.Config.put([:instance, :registrations_open], false)
-    end
+    setup do: clear_config([:instance, :registrations_open], false)
 
     test "returns user on success, after him registration fails" do
       {:ok, invite} = UserInviteToken.create_invite(%{max_use: 100})
@@ -292,9 +286,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
   end
 
   describe "registers with reusable date limited token" do
-    clear_config([:instance, :registrations_open]) do
-      Pleroma.Config.put([:instance, :registrations_open], false)
-    end
+    setup do: clear_config([:instance, :registrations_open], false)
 
     test "returns user on success" do
       {:ok, invite} = UserInviteToken.create_invite(%{expires_at: Date.utc_today(), max_use: 100})
index 9d757b5eff4cb9b3285eead30914501577e9f3f5..30e54bebd067eca25ea56b2a1fe737ec592090fa 100644 (file)
@@ -18,8 +18,8 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do
     :ok
   end
 
-  clear_config([:instance])
-  clear_config([:frontend_configurations, :pleroma_fe])
+  setup do: clear_config([:instance])
+  setup do: clear_config([:frontend_configurations, :pleroma_fe])
 
   describe "POST /api/pleroma/follow_import" do
     setup do: oauth_access(["follow"])
@@ -318,7 +318,7 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do
   end
 
   describe "GET /api/pleroma/healthcheck" do
-    clear_config([:instance, :healthcheck])
+    setup do: clear_config([:instance, :healthcheck])
 
     test "returns 503 when healthcheck disabled", %{conn: conn} do
       Config.put([:instance, :healthcheck], false)
@@ -427,9 +427,7 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do
   end
 
   describe "POST /main/ostatus - remote_subscribe/2" do
-    clear_config([:instance, :federating]) do
-      Config.put([:instance, :federating], true)
-    end
+    setup do: clear_config([:instance, :federating], true)
 
     test "renders subscribe form", %{conn: conn} do
       user = insert(:user)
index b65bf590498ee13ac0691bff19c685e3c19f04b4..0023f1e810e4cee2bed55d0cc49f73b51fe9f334 100644 (file)
@@ -14,9 +14,7 @@ defmodule Pleroma.Web.WebFinger.WebFingerControllerTest do
     :ok
   end
 
-  clear_config_all([:instance, :federating]) do
-    Pleroma.Config.put([:instance, :federating], true)
-  end
+  setup_all do: clear_config([:instance, :federating], true)
 
   test "GET host-meta" do
     response =
index f056b1a3e005560e7b1a51c871957ec14cabbb83..df82dc75db87485d297854fbdeac438eefe7967f 100644 (file)
@@ -8,7 +8,7 @@ defmodule Pleroma.Workers.Cron.ClearOauthTokenWorkerTest do
   import Pleroma.Factory
   alias Pleroma.Workers.Cron.ClearOauthTokenWorker
 
-  clear_config([:oauth2, :clean_expired_tokens])
+  setup do: clear_config([:oauth2, :clean_expired_tokens])
 
   test "deletes expired tokens" do
     insert(:oauth_token,
index 5d65b9fefff931f92e92ef4509bcb4921fc80381..0a63bf4e0cb522b0c15f3d14edd0ee15af754ad2 100644 (file)
@@ -11,7 +11,7 @@ defmodule Pleroma.Workers.Cron.DigestEmailsWorkerTest do
   alias Pleroma.User
   alias Pleroma.Web.CommonAPI
 
-  clear_config([:email_notifications, :digest])
+  setup do: clear_config([:email_notifications, :digest])
 
   setup do
     Pleroma.Config.put([:email_notifications, :digest], %{
index 56c5aa4096274b3a6fceae1af4f7a2e04bc5c209..5864f9e5f675f2d420cad8ac39de3b1b3ec8b94e 100644 (file)
@@ -11,7 +11,7 @@ defmodule Pleroma.Workers.Cron.PurgeExpiredActivitiesWorkerTest do
   import Pleroma.Factory
   import ExUnit.CaptureLog
 
-  clear_config([ActivityExpiration, :enabled])
+  setup do: clear_config([ActivityExpiration, :enabled])
 
   test "deletes an expiration activity" do
     Pleroma.Config.put([ActivityExpiration, :enabled], true)
index ab9f9c1259fe9efe8da4d11663f3e6d396c8d9d6..b312d975bf26273ee156acbfc3837851f5b60df0 100644 (file)
@@ -11,7 +11,7 @@ defmodule Pleroma.Workers.ScheduledActivityWorkerTest do
   import Pleroma.Factory
   import ExUnit.CaptureLog
 
-  clear_config([ScheduledActivity, :enabled])
+  setup do: clear_config([ScheduledActivity, :enabled])
 
   test "creates a status from the scheduled activity" do
     Pleroma.Config.put([ScheduledActivity, :enabled], true)