diff options
Diffstat (limited to 'test')
18 files changed, 462 insertions, 74 deletions
| diff --git a/test/activity_expiration_test.exs b/test/activity_expiration_test.exs index 4948fae16..2fc593b8c 100644 --- a/test/activity_expiration_test.exs +++ b/test/activity_expiration_test.exs @@ -7,6 +7,8 @@ defmodule Pleroma.ActivityExpirationTest do    alias Pleroma.ActivityExpiration    import Pleroma.Factory +  clear_config([ActivityExpiration, :enabled]) +    test "finds activities due to be deleted only" do      activity = insert(:note_activity)      expiration_due = insert(:expiration_in_the_past, %{activity_id: activity.id}) @@ -24,4 +26,27 @@ defmodule Pleroma.ActivityExpirationTest do      now = NaiveDateTime.utc_now()      assert {:error, _} = ActivityExpiration.create(activity, now)    end + +  test "deletes an expiration activity" do +    Pleroma.Config.put([ActivityExpiration, :enabled], true) +    activity = insert(:note_activity) + +    naive_datetime = +      NaiveDateTime.add( +        NaiveDateTime.utc_now(), +        -:timer.minutes(2), +        :millisecond +      ) + +    expiration = +      insert( +        :expiration_in_the_past, +        %{activity_id: activity.id, scheduled_at: naive_datetime} +      ) + +    Pleroma.Workers.Cron.PurgeExpiredActivitiesWorker.perform(:ops, :pid) + +    refute Pleroma.Repo.get(Pleroma.Activity, activity.id) +    refute Pleroma.Repo.get(Pleroma.ActivityExpiration, expiration.id) +  end  end diff --git a/test/daemons/activity_expiration_daemon_test.exs b/test/daemons/activity_expiration_daemon_test.exs deleted file mode 100644 index b51132fb0..000000000 --- a/test/daemons/activity_expiration_daemon_test.exs +++ /dev/null @@ -1,17 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/> -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.ActivityExpirationWorkerTest do -  use Pleroma.DataCase -  alias Pleroma.Activity -  import Pleroma.Factory - -  test "deletes an activity" do -    activity = insert(:note_activity) -    expiration = insert(:expiration_in_the_past, %{activity_id: activity.id}) -    Pleroma.Daemons.ActivityExpirationDaemon.perform(:execute, expiration.id) - -    refute Repo.get(Activity, activity.id) -  end -end diff --git a/test/daemons/scheduled_activity_daemon_test.exs b/test/daemons/scheduled_activity_daemon_test.exs deleted file mode 100644 index c8e464491..000000000 --- a/test/daemons/scheduled_activity_daemon_test.exs +++ /dev/null @@ -1,19 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/> -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.ScheduledActivityDaemonTest do -  use Pleroma.DataCase -  alias Pleroma.ScheduledActivity -  import Pleroma.Factory - -  test "creates a status from the scheduled activity" do -    user = insert(:user) -    scheduled_activity = insert(:scheduled_activity, user: user, params: %{status: "hi"}) -    Pleroma.Daemons.ScheduledActivityDaemon.perform(:execute, scheduled_activity.id) - -    refute Repo.get(ScheduledActivity, scheduled_activity.id) -    activity = Repo.all(Pleroma.Activity) |> Enum.find(&(&1.actor == user.ap_id)) -    assert Pleroma.Object.normalize(activity).data["content"] == "hi" -  end -end diff --git a/test/scheduled_activity_test.exs b/test/scheduled_activity_test.exs index dcf12fb49..6c13d300a 100644 --- a/test/scheduled_activity_test.exs +++ b/test/scheduled_activity_test.exs @@ -8,11 +8,51 @@ defmodule Pleroma.ScheduledActivityTest do    alias Pleroma.ScheduledActivity    import Pleroma.Factory +  clear_config([ScheduledActivity, :enabled]) +    setup context do      DataCase.ensure_local_uploader(context)    end    describe "creation" do +    test "scheduled activities with jobs when ScheduledActivity enabled" do +      Pleroma.Config.put([ScheduledActivity, :enabled], true) +      user = insert(:user) + +      today = +        NaiveDateTime.utc_now() +        |> NaiveDateTime.add(:timer.minutes(6), :millisecond) +        |> NaiveDateTime.to_iso8601() + +      attrs = %{params: %{}, scheduled_at: today} +      {:ok, sa1} = ScheduledActivity.create(user, attrs) +      {:ok, sa2} = ScheduledActivity.create(user, attrs) + +      jobs = +        Repo.all(from(j in Oban.Job, where: j.queue == "scheduled_activities", select: j.args)) + +      assert jobs == [%{"activity_id" => sa1.id}, %{"activity_id" => sa2.id}] +    end + +    test "scheduled activities without jobs when ScheduledActivity disabled" do +      Pleroma.Config.put([ScheduledActivity, :enabled], false) +      user = insert(:user) + +      today = +        NaiveDateTime.utc_now() +        |> NaiveDateTime.add(:timer.minutes(6), :millisecond) +        |> NaiveDateTime.to_iso8601() + +      attrs = %{params: %{}, scheduled_at: today} +      {:ok, _sa1} = ScheduledActivity.create(user, attrs) +      {:ok, _sa2} = ScheduledActivity.create(user, attrs) + +      jobs = +        Repo.all(from(j in Oban.Job, where: j.queue == "scheduled_activities", select: j.args)) + +      assert jobs == [] +    end +      test "when daily user limit is exceeded" do        user = insert(:user) @@ -24,6 +64,7 @@ defmodule Pleroma.ScheduledActivityTest do        attrs = %{params: %{}, scheduled_at: today}        {:ok, _} = ScheduledActivity.create(user, attrs)        {:ok, _} = ScheduledActivity.create(user, attrs) +        {:error, changeset} = ScheduledActivity.create(user, attrs)        assert changeset.errors == [scheduled_at: {"daily limit exceeded", []}]      end diff --git a/test/support/helpers.ex b/test/support/helpers.ex index 9f817622d..d36c29cef 100644 --- a/test/support/helpers.ex +++ b/test/support/helpers.ex @@ -54,6 +54,12 @@ defmodule Pleroma.Tests.Helpers do            clear_config_all: 2          ] +      def to_datetime(naive_datetime) do +        naive_datetime +        |> DateTime.from_naive!("Etc/UTC") +        |> DateTime.truncate(:second) +      end +        def collect_ids(collection) do          collection          |> Enum.map(& &1.id) diff --git a/test/tasks/config_test.exs b/test/tasks/config_test.exs index d79d34276..2f9405550 100644 --- a/test/tasks/config_test.exs +++ b/test/tasks/config_test.exs @@ -145,7 +145,7 @@ defmodule Mix.Tasks.Pleroma.ConfigTest do            mrf_transparency_exclusions: [],            autofollowed_nicknames: [],            max_pinned_statuses: 1, -          no_attachment_links: true, +          attachment_links: false,            welcome_user_nickname: nil,            welcome_message: nil,            max_report_comment_size: 1000, @@ -190,7 +190,7 @@ defmodule Mix.Tasks.Pleroma.ConfigTest do          end        assert file == -               "#{header}\n\nconfig :pleroma, :instance,\n  name: \"Pleroma\",\n  email: \"example@example.com\",\n  notify_email: \"noreply@example.com\",\n  description: \"A Pleroma instance, an alternative fediverse server\",\n  limit: 5000,\n  chat_limit: 5000,\n  remote_limit: 100_000,\n  upload_limit: 16_000_000,\n  avatar_upload_limit: 2_000_000,\n  background_upload_limit: 4_000_000,\n  banner_upload_limit: 4_000_000,\n  poll_limits: %{\n    max_expiration: 31_536_000,\n    max_option_chars: 200,\n    max_options: 20,\n    min_expiration: 0\n  },\n  registrations_open: true,\n  federating: true,\n  federation_incoming_replies_max_depth: 100,\n  federation_reachability_timeout_days: 7,\n  federation_publisher_modules: [Pleroma.Web.ActivityPub.Publisher],\n  allow_relay: true,\n  rewrite_policy: Pleroma.Web.ActivityPub.MRF.NoOpPolicy,\n  public: true,\n  quarantined_instances: [],\n  managed_config: true,\n  static_dir: \"instance/static/\",\n  allowed_post_formats: [\"text/plain\", \"text/html\", \"text/markdown\", \"text/bbcode\"],\n  mrf_transparency: true,\n  mrf_transparency_exclusions: [],\n  autofollowed_nicknames: [],\n  max_pinned_statuses: 1,\n  no_attachment_links: true,\n  welcome_user_nickname: nil,\n  welcome_message: nil,\n  max_report_comment_size: 1000,\n  safe_dm_mentions: false,\n  healthcheck: false,\n  remote_post_retention_days: 90,\n  skip_thread_containment: true,\n  limit_to_local_content: :unauthenticated,\n  user_bio_length: 5000,\n  user_name_length: 100,\n  max_account_fields: 10,\n  max_remote_account_fields: 20,\n  account_field_name_length: 512,\n  account_field_value_length: 2048,\n  external_user_synchronization: true,\n  extended_nickname_format: true,\n  multi_factor_authentication: [\n    totp: [digits: 6, period: 30],\n    backup_codes: [number: 2, length: 6]\n  ]\n" +               "#{header}\n\nconfig :pleroma, :instance,\n  name: \"Pleroma\",\n  email: \"example@example.com\",\n  notify_email: \"noreply@example.com\",\n  description: \"A Pleroma instance, an alternative fediverse server\",\n  limit: 5000,\n  chat_limit: 5000,\n  remote_limit: 100_000,\n  upload_limit: 16_000_000,\n  avatar_upload_limit: 2_000_000,\n  background_upload_limit: 4_000_000,\n  banner_upload_limit: 4_000_000,\n  poll_limits: %{\n    max_expiration: 31_536_000,\n    max_option_chars: 200,\n    max_options: 20,\n    min_expiration: 0\n  },\n  registrations_open: true,\n  federating: true,\n  federation_incoming_replies_max_depth: 100,\n  federation_reachability_timeout_days: 7,\n  federation_publisher_modules: [Pleroma.Web.ActivityPub.Publisher],\n  allow_relay: true,\n  rewrite_policy: Pleroma.Web.ActivityPub.MRF.NoOpPolicy,\n  public: true,\n  quarantined_instances: [],\n  managed_config: true,\n  static_dir: \"instance/static/\",\n  allowed_post_formats: [\"text/plain\", \"text/html\", \"text/markdown\", \"text/bbcode\"],\n  mrf_transparency: true,\n  mrf_transparency_exclusions: [],\n  autofollowed_nicknames: [],\n  max_pinned_statuses: 1,\n  attachment_links: false,\n  welcome_user_nickname: nil,\n  welcome_message: nil,\n  max_report_comment_size: 1000,\n  safe_dm_mentions: false,\n  healthcheck: false,\n  remote_post_retention_days: 90,\n  skip_thread_containment: true,\n  limit_to_local_content: :unauthenticated,\n  user_bio_length: 5000,\n  user_name_length: 100,\n  max_account_fields: 10,\n  max_remote_account_fields: 20,\n  account_field_name_length: 512,\n  account_field_value_length: 2048,\n  external_user_synchronization: true,\n  extended_nickname_format: true,\n  multi_factor_authentication: [\n    totp: [digits: 6, period: 30],\n    backup_codes: [number: 2, length: 6]\n  ]\n"      end    end  end diff --git a/test/web/common_api/common_api_utils_test.exs b/test/web/common_api/common_api_utils_test.exs index 4b761e039..848300ef3 100644 --- a/test/web/common_api/common_api_utils_test.exs +++ b/test/web/common_api/common_api_utils_test.exs @@ -575,11 +575,11 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do    end    describe "maybe_add_attachments/3" do -    test "returns parsed results when no_links is true" do +    test "returns parsed results when attachment_links is false" do        assert Utils.maybe_add_attachments(                 {"test", [], ["tags"]},                 [], -               true +               false               ) == {"test", [], ["tags"]}      end @@ -589,7 +589,7 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do        assert Utils.maybe_add_attachments(                 {"test", [], ["tags"]},                 [attachment], -               false +               true               ) == {                 "test<br><a href=\"SakuraPM.png\" class='attachment'>SakuraPM.png</a>",                 [], diff --git a/test/web/mastodon_api/controllers/scheduled_activity_controller_test.exs b/test/web/mastodon_api/controllers/scheduled_activity_controller_test.exs index 9666a7f2e..6317d1b47 100644 --- a/test/web/mastodon_api/controllers/scheduled_activity_controller_test.exs +++ b/test/web/mastodon_api/controllers/scheduled_activity_controller_test.exs @@ -9,6 +9,9 @@ defmodule Pleroma.Web.MastodonAPI.ScheduledActivityControllerTest do    alias Pleroma.ScheduledActivity    import Pleroma.Factory +  import Ecto.Query + +  clear_config([ScheduledActivity, :enabled])    test "shows scheduled activities" do      %{user: user, conn: conn} = oauth_access(["read:statuses"]) @@ -52,11 +55,26 @@ defmodule Pleroma.Web.MastodonAPI.ScheduledActivityControllerTest do    end    test "updates a scheduled activity" do +    Pleroma.Config.put([ScheduledActivity, :enabled], true)      %{user: user, conn: conn} = oauth_access(["write:statuses"]) -    scheduled_activity = insert(:scheduled_activity, user: user) -    new_scheduled_at = -      NaiveDateTime.add(NaiveDateTime.utc_now(), :timer.minutes(120), :millisecond) +    scheduled_at = Timex.shift(NaiveDateTime.utc_now(), minutes: 60) + +    {:ok, scheduled_activity} = +      ScheduledActivity.create( +        user, +        %{ +          scheduled_at: scheduled_at, +          params: build(:note).data +        } +      ) + +    job = Repo.one(from(j in Oban.Job, where: j.queue == "scheduled_activities")) + +    assert job.args == %{"activity_id" => scheduled_activity.id} +    assert DateTime.truncate(job.scheduled_at, :second) == to_datetime(scheduled_at) + +    new_scheduled_at = Timex.shift(NaiveDateTime.utc_now(), minutes: 120)      res_conn =        put(conn, "/api/v1/scheduled_statuses/#{scheduled_activity.id}", %{ @@ -65,6 +83,9 @@ defmodule Pleroma.Web.MastodonAPI.ScheduledActivityControllerTest do      assert %{"scheduled_at" => expected_scheduled_at} = json_response(res_conn, 200)      assert expected_scheduled_at == Pleroma.Web.CommonAPI.Utils.to_masto_date(new_scheduled_at) +    job = refresh_record(job) + +    assert DateTime.truncate(job.scheduled_at, :second) == to_datetime(new_scheduled_at)      res_conn = put(conn, "/api/v1/scheduled_statuses/404", %{scheduled_at: new_scheduled_at}) @@ -72,8 +93,22 @@ defmodule Pleroma.Web.MastodonAPI.ScheduledActivityControllerTest do    end    test "deletes a scheduled activity" do +    Pleroma.Config.put([ScheduledActivity, :enabled], true)      %{user: user, conn: conn} = oauth_access(["write:statuses"]) -    scheduled_activity = insert(:scheduled_activity, user: user) +    scheduled_at = Timex.shift(NaiveDateTime.utc_now(), minutes: 60) + +    {:ok, scheduled_activity} = +      ScheduledActivity.create( +        user, +        %{ +          scheduled_at: scheduled_at, +          params: build(:note).data +        } +      ) + +    job = Repo.one(from(j in Oban.Job, where: j.queue == "scheduled_activities")) + +    assert job.args == %{"activity_id" => scheduled_activity.id}      res_conn =        conn @@ -81,7 +116,8 @@ defmodule Pleroma.Web.MastodonAPI.ScheduledActivityControllerTest do        |> delete("/api/v1/scheduled_statuses/#{scheduled_activity.id}")      assert %{} = json_response(res_conn, 200) -    assert nil == Repo.get(ScheduledActivity, scheduled_activity.id) +    refute Repo.get(ScheduledActivity, scheduled_activity.id) +    refute Repo.get(Oban.Job, job.id)      res_conn =        conn diff --git a/test/web/mastodon_api/controllers/status_controller_test.exs b/test/web/mastodon_api/controllers/status_controller_test.exs index 83138d7ef..810f371cb 100644 --- a/test/web/mastodon_api/controllers/status_controller_test.exs +++ b/test/web/mastodon_api/controllers/status_controller_test.exs @@ -121,6 +121,32 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do                 NaiveDateTime.to_iso8601(expiration.scheduled_at)      end +    test "it fails to create a status if `expires_in` is less or equal than an hour", %{ +      conn: conn +    } do +      # 1 hour +      expires_in = 60 * 60 + +      assert %{"error" => "Expiry date is too soon"} = +               conn +               |> post("api/v1/statuses", %{ +                 "status" => "oolong", +                 "expires_in" => expires_in +               }) +               |> json_response(422) + +      # 30 minutes +      expires_in = 30 * 60 + +      assert %{"error" => "Expiry date is too soon"} = +               conn +               |> post("api/v1/statuses", %{ +                 "status" => "oolong", +                 "expires_in" => expires_in +               }) +               |> json_response(422) +    end +      test "posting an undefined status with an attachment", %{user: user, conn: conn} do        file = %Plug.Upload{          content_type: "image/jpg", diff --git a/test/web/mastodon_api/views/status_view_test.exs b/test/web/mastodon_api/views/status_view_test.exs index fc110417c..560f8179f 100644 --- a/test/web/mastodon_api/views/status_view_test.exs +++ b/test/web/mastodon_api/views/status_view_test.exs @@ -37,15 +37,15 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do      status = StatusView.render("show.json", activity: activity)      assert status[:pleroma][:emoji_reactions] == [ -             %{emoji: "☕", count: 2, reacted: false}, -             %{emoji: "🍵", count: 1, reacted: false} +             %{name: "☕", count: 2, me: false}, +             %{name: "🍵", count: 1, me: false}             ]      status = StatusView.render("show.json", activity: activity, for: user)      assert status[:pleroma][:emoji_reactions] == [ -             %{emoji: "☕", count: 2, reacted: true}, -             %{emoji: "🍵", count: 1, reacted: false} +             %{name: "☕", count: 2, me: true}, +             %{name: "🍵", count: 1, me: false}             ]    end @@ -491,7 +491,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do          title: "Example website"        } -      %{provider_name: "Example site name"} = +      %{provider_name: "example.com"} =          StatusView.render("card.json", %{page_url: page_url, rich_media: card})      end @@ -506,7 +506,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do          description: "Example description"        } -      %{provider_name: "Example site name"} = +      %{provider_name: "example.com"} =          StatusView.render("card.json", %{page_url: page_url, rich_media: card})      end    end diff --git a/test/web/node_info_test.exs b/test/web/node_info_test.exs index 9a574a38d..39dd72cec 100644 --- a/test/web/node_info_test.exs +++ b/test/web/node_info_test.exs @@ -6,6 +6,7 @@ defmodule Pleroma.Web.NodeInfoTest do    use Pleroma.Web.ConnCase    import Pleroma.Factory +  clear_config([:mrf_simple])    test "GET /.well-known/nodeinfo", %{conn: conn} do      links = diff --git a/test/web/pleroma_api/controllers/pleroma_api_controller_test.exs b/test/web/pleroma_api/controllers/pleroma_api_controller_test.exs index be5007de5..36868db38 100644 --- a/test/web/pleroma_api/controllers/pleroma_api_controller_test.exs +++ b/test/web/pleroma_api/controllers/pleroma_api_controller_test.exs @@ -14,7 +14,7 @@ defmodule Pleroma.Web.PleromaAPI.PleromaAPIControllerTest do    import Pleroma.Factory -  test "POST /api/v1/pleroma/statuses/:id/react_with_emoji", %{conn: conn} do +  test "PUT /api/v1/pleroma/statuses/:id/reactions/:emoji", %{conn: conn} do      user = insert(:user)      other_user = insert(:user) @@ -24,18 +24,19 @@ defmodule Pleroma.Web.PleromaAPI.PleromaAPIControllerTest do        conn        |> assign(:user, other_user)        |> assign(:token, insert(:oauth_token, user: other_user, scopes: ["write:statuses"])) -      |> post("/api/v1/pleroma/statuses/#{activity.id}/react_with_emoji", %{"emoji" => "☕"}) +      |> put("/api/v1/pleroma/statuses/#{activity.id}/reactions/☕")        |> json_response(200) +    # We return the status, but this our implementation detail.      assert %{"id" => id} = result      assert to_string(activity.id) == id      assert result["pleroma"]["emoji_reactions"] == [ -             %{"emoji" => "☕", "count" => 1, "reacted" => true} +             %{"name" => "☕", "count" => 1, "me" => true}             ]    end -  test "POST /api/v1/pleroma/statuses/:id/unreact_with_emoji", %{conn: conn} do +  test "DELETE /api/v1/pleroma/statuses/:id/reactions/:emoji", %{conn: conn} do      user = insert(:user)      other_user = insert(:user) @@ -46,7 +47,7 @@ defmodule Pleroma.Web.PleromaAPI.PleromaAPIControllerTest do        conn        |> assign(:user, other_user)        |> assign(:token, insert(:oauth_token, user: other_user, scopes: ["write:statuses"])) -      |> post("/api/v1/pleroma/statuses/#{activity.id}/unreact_with_emoji", %{"emoji" => "☕"}) +      |> delete("/api/v1/pleroma/statuses/#{activity.id}/reactions/☕")      assert %{"id" => id} = json_response(result, 200)      assert to_string(activity.id) == id @@ -56,7 +57,7 @@ defmodule Pleroma.Web.PleromaAPI.PleromaAPIControllerTest do      assert object.data["reaction_count"] == 0    end -  test "GET /api/v1/pleroma/statuses/:id/emoji_reactions_by", %{conn: conn} do +  test "GET /api/v1/pleroma/statuses/:id/reactions", %{conn: conn} do      user = insert(:user)      other_user = insert(:user)      doomed_user = insert(:user) @@ -65,7 +66,7 @@ defmodule Pleroma.Web.PleromaAPI.PleromaAPIControllerTest do      result =        conn -      |> get("/api/v1/pleroma/statuses/#{activity.id}/emoji_reactions_by") +      |> get("/api/v1/pleroma/statuses/#{activity.id}/reactions")        |> json_response(200)      assert result == [] @@ -77,11 +78,10 @@ defmodule Pleroma.Web.PleromaAPI.PleromaAPIControllerTest do      result =        conn -      |> get("/api/v1/pleroma/statuses/#{activity.id}/emoji_reactions_by") +      |> get("/api/v1/pleroma/statuses/#{activity.id}/reactions")        |> json_response(200) -    [%{"emoji" => "🎅", "count" => 1, "accounts" => [represented_user], "reacted" => false}] = -      result +    [%{"name" => "🎅", "count" => 1, "accounts" => [represented_user], "me" => false}] = result      assert represented_user["id"] == other_user.id @@ -89,10 +89,10 @@ defmodule Pleroma.Web.PleromaAPI.PleromaAPIControllerTest do        conn        |> assign(:user, other_user)        |> assign(:token, insert(:oauth_token, user: other_user, scopes: ["read:statuses"])) -      |> get("/api/v1/pleroma/statuses/#{activity.id}/emoji_reactions_by") +      |> get("/api/v1/pleroma/statuses/#{activity.id}/reactions")        |> json_response(200) -    assert [%{"emoji" => "🎅", "count" => 1, "accounts" => [_represented_user], "reacted" => true}] = +    assert [%{"name" => "🎅", "count" => 1, "accounts" => [_represented_user], "me" => true}] =               result    end diff --git a/test/web/rich_media/parsers/twitter_card_test.exs b/test/web/rich_media/parsers/twitter_card_test.exs index 751ca614c..f2ebbde7e 100644 --- a/test/web/rich_media/parsers/twitter_card_test.exs +++ b/test/web/rich_media/parsers/twitter_card_test.exs @@ -7,11 +7,14 @@ defmodule Pleroma.Web.RichMedia.Parsers.TwitterCardTest do    alias Pleroma.Web.RichMedia.Parsers.TwitterCard    test "returns error when html not contains twitter card" do -    assert TwitterCard.parse("", %{}) == {:error, "No twitter card metadata found"} +    assert TwitterCard.parse([{"html", [], [{"head", [], []}, {"body", [], []}]}], %{}) == +             {:error, "No twitter card metadata found"}    end    test "parses twitter card with only name attributes" do -    html = File.read!("test/fixtures/nypd-facial-recognition-children-teenagers3.html") +    html = +      File.read!("test/fixtures/nypd-facial-recognition-children-teenagers3.html") +      |> Floki.parse_document!()      assert TwitterCard.parse(html, %{}) ==               {:ok, @@ -26,7 +29,9 @@ defmodule Pleroma.Web.RichMedia.Parsers.TwitterCardTest do    end    test "parses twitter card with only property attributes" do -    html = File.read!("test/fixtures/nypd-facial-recognition-children-teenagers2.html") +    html = +      File.read!("test/fixtures/nypd-facial-recognition-children-teenagers2.html") +      |> Floki.parse_document!()      assert TwitterCard.parse(html, %{}) ==               {:ok, @@ -45,7 +50,9 @@ defmodule Pleroma.Web.RichMedia.Parsers.TwitterCardTest do    end    test "parses twitter card with name & property attributes" do -    html = File.read!("test/fixtures/nypd-facial-recognition-children-teenagers.html") +    html = +      File.read!("test/fixtures/nypd-facial-recognition-children-teenagers.html") +      |> Floki.parse_document!()      assert TwitterCard.parse(html, %{}) ==               {:ok, @@ -73,7 +80,8 @@ defmodule Pleroma.Web.RichMedia.Parsers.TwitterCardTest do          "YTQ5MF9EQVIgZXhodW1hdGlvbiBvZiBNYXJnYXJldCBDb3JiaW4gZ3JhdmUgMTkyNi5qcGciXSxbInAiLCJjb252ZXJ0IiwiIl0sWyJwIiwiY29udmVydCIsIi1xdWFsaXR5IDgxIC1hdXRvLW9" <>          "yaWVudCJdLFsicCIsInRodW1iIiwiNjAweD4iXV0/DAR%20exhumation%20of%20Margaret%20Corbin%20grave%201926.jpg" -    html = File.read!("test/fixtures/margaret-corbin-grave-west-point.html") +    html = +      File.read!("test/fixtures/margaret-corbin-grave-west-point.html") |> Floki.parse_document!()      assert TwitterCard.parse(html, %{}) ==               {:ok, @@ -87,7 +95,9 @@ defmodule Pleroma.Web.RichMedia.Parsers.TwitterCardTest do    end    test "takes first founded title in html head if there is html markup error" do -    html = File.read!("test/fixtures/nypd-facial-recognition-children-teenagers4.html") +    html = +      File.read!("test/fixtures/nypd-facial-recognition-children-teenagers4.html") +      |> Floki.parse_document!()      assert TwitterCard.parse(html, %{}) ==               {:ok, diff --git a/test/web/twitter_api/twitter_api_controller_test.exs b/test/web/twitter_api/twitter_api_controller_test.exs new file mode 100644 index 000000000..ab0a2c3df --- /dev/null +++ b/test/web/twitter_api/twitter_api_controller_test.exs @@ -0,0 +1,142 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.TwitterAPI.ControllerTest do +  use Pleroma.Web.ConnCase + +  alias Pleroma.Builders.ActivityBuilder +  alias Pleroma.Repo +  alias Pleroma.User +  alias Pleroma.Web.OAuth.Token + +  import Pleroma.Factory + +  describe "POST /api/qvitter/statuses/notifications/read" do +    test "without valid credentials", %{conn: conn} do +      conn = post(conn, "/api/qvitter/statuses/notifications/read", %{"latest_id" => 1_234_567}) +      assert json_response(conn, 403) == %{"error" => "Invalid credentials."} +    end + +    test "with credentials, without any params" do +      %{user: current_user, conn: conn} = +        oauth_access(["read:notifications", "write:notifications"]) + +      conn = +        conn +        |> assign(:user, current_user) +        |> post("/api/qvitter/statuses/notifications/read") + +      assert json_response(conn, 400) == %{ +               "error" => "You need to specify latest_id", +               "request" => "/api/qvitter/statuses/notifications/read" +             } +    end + +    test "with credentials, with params" do +      %{user: current_user, conn: conn} = +        oauth_access(["read:notifications", "write:notifications"]) + +      other_user = insert(:user) + +      {:ok, _activity} = +        ActivityBuilder.insert(%{"to" => [current_user.ap_id]}, %{user: other_user}) + +      response_conn = +        conn +        |> assign(:user, current_user) +        |> get("/api/v1/notifications") + +      [notification] = response = json_response(response_conn, 200) + +      assert length(response) == 1 + +      assert notification["pleroma"]["is_seen"] == false + +      response_conn = +        conn +        |> assign(:user, current_user) +        |> post("/api/qvitter/statuses/notifications/read", %{"latest_id" => notification["id"]}) + +      [notification] = response = json_response(response_conn, 200) + +      assert length(response) == 1 + +      assert notification["pleroma"]["is_seen"] == true +    end +  end + +  describe "GET /api/account/confirm_email/:id/:token" do +    setup do +      {:ok, user} = +        insert(:user) +        |> User.confirmation_changeset(need_confirmation: true) +        |> Repo.update() + +      assert user.confirmation_pending + +      [user: user] +    end + +    test "it redirects to root url", %{conn: conn, user: user} do +      conn = get(conn, "/api/account/confirm_email/#{user.id}/#{user.confirmation_token}") + +      assert 302 == conn.status +    end + +    test "it confirms the user account", %{conn: conn, user: user} do +      get(conn, "/api/account/confirm_email/#{user.id}/#{user.confirmation_token}") + +      user = User.get_cached_by_id(user.id) + +      refute user.confirmation_pending +      refute user.confirmation_token +    end + +    test "it returns 500 if user cannot be found by id", %{conn: conn, user: user} do +      conn = get(conn, "/api/account/confirm_email/0/#{user.confirmation_token}") + +      assert 500 == conn.status +    end + +    test "it returns 500 if token is invalid", %{conn: conn, user: user} do +      conn = get(conn, "/api/account/confirm_email/#{user.id}/wrong_token") + +      assert 500 == conn.status +    end +  end + +  describe "GET /api/oauth_tokens" do +    setup do +      token = insert(:oauth_token) |> Repo.preload(:user) + +      %{token: token} +    end + +    test "renders list", %{token: token} do +      response = +        build_conn() +        |> assign(:user, token.user) +        |> get("/api/oauth_tokens") + +      keys = +        json_response(response, 200) +        |> hd() +        |> Map.keys() + +      assert keys -- ["id", "app_name", "valid_until"] == [] +    end + +    test "revoke token", %{token: token} do +      response = +        build_conn() +        |> assign(:user, token.user) +        |> delete("/api/oauth_tokens/#{token.id}") + +      tokens = Token.get_user_tokens(token.user) + +      assert tokens == [] +      assert response.status == 201 +    end +  end +end diff --git a/test/workers/cron/clear_oauth_token_worker_test.exs b/test/workers/cron/clear_oauth_token_worker_test.exs new file mode 100644 index 000000000..adea47326 --- /dev/null +++ b/test/workers/cron/clear_oauth_token_worker_test.exs @@ -0,0 +1,22 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Workers.Cron.ClearOauthTokenWorkerTest do +  use Pleroma.DataCase + +  import Pleroma.Factory +  alias Pleroma.Workers.Cron.ClearOauthTokenWorker + +  clear_config([:oauth2, :clean_expired_tokens]) + +  test "deletes expired tokens" do +    insert(:oauth_token, +      valid_until: NaiveDateTime.add(NaiveDateTime.utc_now(), -60 * 10) +    ) + +    Pleroma.Config.put([:oauth2, :clean_expired_tokens], true) +    ClearOauthTokenWorker.perform(:opts, :job) +    assert Pleroma.Repo.all(Pleroma.Web.OAuth.Token) == [] +  end +end diff --git a/test/daemons/digest_email_daemon_test.exs b/test/workers/cron/digest_emails_worker_test.exs index faf592d5f..073615d9e 100644 --- a/test/daemons/digest_email_daemon_test.exs +++ b/test/workers/cron/digest_emails_worker_test.exs @@ -2,16 +2,24 @@  # Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>  # SPDX-License-Identifier: AGPL-3.0-only -defmodule Pleroma.DigestEmailDaemonTest do +defmodule Pleroma.Workers.Cron.DigestEmailsWorkerTest do    use Pleroma.DataCase +    import Pleroma.Factory -  alias Pleroma.Daemons.DigestEmailDaemon    alias Pleroma.Tests.ObanHelpers    alias Pleroma.User    alias Pleroma.Web.CommonAPI +  clear_config([:email_notifications, :digest]) +    test "it sends digest emails" do +    Pleroma.Config.put([:email_notifications, :digest], %{ +      active: true, +      inactivity_threshold: 7, +      interval: 7 +    }) +      user = insert(:user)      date = @@ -23,8 +31,7 @@ defmodule Pleroma.DigestEmailDaemonTest do      {:ok, _} = User.switch_email_notifications(user2, "digest", true)      CommonAPI.post(user, %{"status" => "hey @#{user2.nickname}!"}) -    DigestEmailDaemon.perform() -    ObanHelpers.perform_all() +    Pleroma.Workers.Cron.DigestEmailsWorker.perform(:opts, :pid)      # Performing job(s) enqueued at previous step      ObanHelpers.perform_all() diff --git a/test/workers/cron/purge_expired_activities_worker_test.exs b/test/workers/cron/purge_expired_activities_worker_test.exs new file mode 100644 index 000000000..c2561683e --- /dev/null +++ b/test/workers/cron/purge_expired_activities_worker_test.exs @@ -0,0 +1,56 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Workers.Cron.PurgeExpiredActivitiesWorkerTest do +  use Pleroma.DataCase + +  alias Pleroma.ActivityExpiration +  alias Pleroma.Workers.Cron.PurgeExpiredActivitiesWorker + +  import Pleroma.Factory +  import ExUnit.CaptureLog + +  clear_config([ActivityExpiration, :enabled]) + +  test "deletes an expiration activity" do +    Pleroma.Config.put([ActivityExpiration, :enabled], true) +    activity = insert(:note_activity) + +    naive_datetime = +      NaiveDateTime.add( +        NaiveDateTime.utc_now(), +        -:timer.minutes(2), +        :millisecond +      ) + +    expiration = +      insert( +        :expiration_in_the_past, +        %{activity_id: activity.id, scheduled_at: naive_datetime} +      ) + +    Pleroma.Workers.Cron.PurgeExpiredActivitiesWorker.perform(:ops, :pid) + +    refute Pleroma.Repo.get(Pleroma.Activity, activity.id) +    refute Pleroma.Repo.get(Pleroma.ActivityExpiration, expiration.id) +  end + +  describe "delete_activity/1" do +    test "adds log message if activity isn't find" do +      assert capture_log([level: :error], fn -> +               PurgeExpiredActivitiesWorker.delete_activity(%ActivityExpiration{ +                 activity_id: "test-activity" +               }) +             end) =~ "Couldn't delete expired activity: not found activity" +    end + +    test "adds log message if actor isn't find" do +      assert capture_log([level: :error], fn -> +               PurgeExpiredActivitiesWorker.delete_activity(%ActivityExpiration{ +                 activity_id: "test-activity" +               }) +             end) =~ "Couldn't delete expired activity: not found activity" +    end +  end +end diff --git a/test/workers/scheduled_activity_worker_test.exs b/test/workers/scheduled_activity_worker_test.exs new file mode 100644 index 000000000..1405d7142 --- /dev/null +++ b/test/workers/scheduled_activity_worker_test.exs @@ -0,0 +1,52 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Workers.ScheduledActivityWorkerTest do +  use Pleroma.DataCase + +  alias Pleroma.ScheduledActivity +  alias Pleroma.Workers.ScheduledActivityWorker + +  import Pleroma.Factory +  import ExUnit.CaptureLog + +  clear_config([ScheduledActivity, :enabled]) + +  test "creates a status from the scheduled activity" do +    Pleroma.Config.put([ScheduledActivity, :enabled], true) +    user = insert(:user) + +    naive_datetime = +      NaiveDateTime.add( +        NaiveDateTime.utc_now(), +        -:timer.minutes(2), +        :millisecond +      ) + +    scheduled_activity = +      insert( +        :scheduled_activity, +        scheduled_at: naive_datetime, +        user: user, +        params: %{status: "hi"} +      ) + +    ScheduledActivityWorker.perform( +      %{"activity_id" => scheduled_activity.id}, +      :pid +    ) + +    refute Repo.get(ScheduledActivity, scheduled_activity.id) +    activity = Repo.all(Pleroma.Activity) |> Enum.find(&(&1.actor == user.ap_id)) +    assert Pleroma.Object.normalize(activity).data["content"] == "hi" +  end + +  test "adds log message if ScheduledActivity isn't find" do +    Pleroma.Config.put([ScheduledActivity, :enabled], true) + +    assert capture_log([level: :error], fn -> +             ScheduledActivityWorker.perform(%{"activity_id" => 42}, :pid) +           end) =~ "Couldn't find scheduled activity" +  end +end | 
