mirror of
https://git.pleroma.social/pleroma/pleroma.git
synced 2024-12-29 11:30:35 +00:00
193 lines
5.2 KiB
Elixir
193 lines
5.2 KiB
Elixir
|
# 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
|