diff options
Diffstat (limited to 'test/web/mastodon_api')
| -rw-r--r-- | test/web/mastodon_api/push_subscription_view_test.exs | 23 | ||||
| -rw-r--r-- | test/web/mastodon_api/subscription_controller_test.exs | 192 | 
2 files changed, 215 insertions, 0 deletions
diff --git a/test/web/mastodon_api/push_subscription_view_test.exs b/test/web/mastodon_api/push_subscription_view_test.exs new file mode 100644 index 000000000..dc935fc82 --- /dev/null +++ b/test/web/mastodon_api/push_subscription_view_test.exs @@ -0,0 +1,23 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2018 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.MastodonAPI.PushSubscriptionViewTest do +  use Pleroma.DataCase +  import Pleroma.Factory +  alias Pleroma.Web.MastodonAPI.PushSubscriptionView, as: View +  alias Pleroma.Web.Push + +  test "Represent a subscription" do +    subscription = insert(:push_subscription, data: %{"alerts" => %{"mention" => true}}) + +    expected = %{ +      alerts: %{"mention" => true}, +      endpoint: subscription.endpoint, +      id: to_string(subscription.id), +      server_key: Keyword.get(Push.vapid_config(), :public_key) +    } + +    assert expected == View.render("push_subscription.json", %{subscription: subscription}) +  end +end diff --git a/test/web/mastodon_api/subscription_controller_test.exs b/test/web/mastodon_api/subscription_controller_test.exs new file mode 100644 index 000000000..7dfb02f63 --- /dev/null +++ b/test/web/mastodon_api/subscription_controller_test.exs @@ -0,0 +1,192 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.MastodonAPI.SubscriptionControllerTest do +  use Pleroma.Web.ConnCase + +  import Pleroma.Factory +  alias Pleroma.Web.Push +  alias Pleroma.Web.Push.Subscription + +  @sub %{ +    "endpoint" => "https://example.com/example/1234", +    "keys" => %{ +      "auth" => "8eDyX_uCN0XRhSbY5hs7Hg==", +      "p256dh" => +        "BCIWgsnyXDv1VkhqL2P7YRBvdeuDnlwAPT2guNhdIoW3IP7GmHh1SMKPLxRf7x8vJy6ZFK3ol2ohgn_-0yP7QQA=" +    } +  } +  @server_key Keyword.get(Push.vapid_config(), :public_key) + +  setup do +    user = insert(:user) +    token = insert(:oauth_token, user: user, scopes: ["push"]) + +    conn = +      build_conn() +      |> assign(:user, user) +      |> assign(:token, token) + +    %{conn: conn, user: user, token: token} +  end + +  defmacro assert_error_when_disable_push(do: yield) do +    quote do +      vapid_details = Application.get_env(:web_push_encryption, :vapid_details, []) +      Application.put_env(:web_push_encryption, :vapid_details, []) +      assert "Something went wrong" == unquote(yield) +      Application.put_env(:web_push_encryption, :vapid_details, vapid_details) +    end +  end + +  describe "creates push subscription" do +    test "returns error when push disabled ", %{conn: conn} do +      assert_error_when_disable_push do +        conn +        |> post("/api/v1/push/subscription", %{}) +        |> json_response(500) +      end +    end + +    test "successful creation", %{conn: conn} do +      result = +        conn +        |> post("/api/v1/push/subscription", %{ +          "data" => %{"alerts" => %{"mention" => true, "test" => true}}, +          "subscription" => @sub +        }) +        |> json_response(200) + +      [subscription] = Pleroma.Repo.all(Subscription) + +      assert %{ +               "alerts" => %{"mention" => true}, +               "endpoint" => subscription.endpoint, +               "id" => to_string(subscription.id), +               "server_key" => @server_key +             } == result +    end +  end + +  describe "gets a user subscription" do +    test "returns error when push disabled ", %{conn: conn} do +      assert_error_when_disable_push do +        conn +        |> get("/api/v1/push/subscription", %{}) +        |> json_response(500) +      end +    end + +    test "returns error when user hasn't subscription", %{conn: conn} do +      res = +        conn +        |> get("/api/v1/push/subscription", %{}) +        |> json_response(404) + +      assert "Not found" == res +    end + +    test "returns a user subsciption", %{conn: conn, user: user, token: token} do +      subscription = +        insert(:push_subscription, +          user: user, +          token: token, +          data: %{"alerts" => %{"mention" => true}} +        ) + +      res = +        conn +        |> get("/api/v1/push/subscription", %{}) +        |> json_response(200) + +      expect = %{ +        "alerts" => %{"mention" => true}, +        "endpoint" => "https://example.com/example/1234", +        "id" => to_string(subscription.id), +        "server_key" => @server_key +      } + +      assert expect == res +    end +  end + +  describe "updates a user subsciption" do +    setup %{conn: conn, user: user, token: token} do +      subscription = +        insert(:push_subscription, +          user: user, +          token: token, +          data: %{"alerts" => %{"mention" => true}} +        ) + +      %{conn: conn, user: user, token: token, subscription: subscription} +    end + +    test "returns error when push disabled ", %{conn: conn} do +      assert_error_when_disable_push do +        conn +        |> put("/api/v1/push/subscription", %{data: %{"alerts" => %{"mention" => false}}}) +        |> json_response(500) +      end +    end + +    test "returns updated subsciption", %{conn: conn, subscription: subscription} do +      res = +        conn +        |> put("/api/v1/push/subscription", %{ +          data: %{"alerts" => %{"mention" => false, "follow" => true}} +        }) +        |> json_response(200) + +      expect = %{ +        "alerts" => %{"follow" => true, "mention" => false}, +        "endpoint" => "https://example.com/example/1234", +        "id" => to_string(subscription.id), +        "server_key" => @server_key +      } + +      assert expect == res +    end +  end + +  describe "deletes the user subscription" do +    test "returns error when push disabled ", %{conn: conn} do +      assert_error_when_disable_push do +        conn +        |> delete("/api/v1/push/subscription", %{}) +        |> json_response(500) +      end +    end + +    test "returns error when user hasn't subscription", %{conn: conn} do +      res = +        conn +        |> delete("/api/v1/push/subscription", %{}) +        |> json_response(404) + +      assert "Not found" == res +    end + +    test "returns empty result and delete user subsciption", %{ +      conn: conn, +      user: user, +      token: token +    } do +      subscription = +        insert(:push_subscription, +          user: user, +          token: token, +          data: %{"alerts" => %{"mention" => true}} +        ) + +      res = +        conn +        |> delete("/api/v1/push/subscription", %{}) +        |> json_response(200) + +      assert %{} == res +      refute Pleroma.Repo.get(Subscription, subscription.id) +    end +  end +end  | 
