2019-03-06 05:20:12 -08:00
|
|
|
# Pleroma: A lightweight social networking server
|
|
|
|
# Copyright © 2017-2018 Pleroma Authors <https://pleroma.social/>
|
|
|
|
# SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
|
|
|
|
defmodule Pleroma.Web.Push.ImplTest do
|
|
|
|
use Pleroma.DataCase
|
|
|
|
|
|
|
|
alias Pleroma.Web.Push.Impl
|
|
|
|
alias Pleroma.Web.Push.Subscription
|
|
|
|
|
|
|
|
import Pleroma.Factory
|
|
|
|
|
|
|
|
setup_all do
|
|
|
|
Tesla.Mock.mock_global(fn
|
|
|
|
%{method: :post, url: "https://example.com/example/1234"} ->
|
|
|
|
%Tesla.Env{status: 200}
|
|
|
|
|
|
|
|
%{method: :post, url: "https://example.com/example/not_found"} ->
|
|
|
|
%Tesla.Env{status: 400}
|
|
|
|
|
|
|
|
%{method: :post, url: "https://example.com/example/bad"} ->
|
|
|
|
%Tesla.Env{status: 100}
|
|
|
|
end)
|
|
|
|
|
|
|
|
:ok
|
|
|
|
end
|
|
|
|
|
|
|
|
@sub %{
|
|
|
|
endpoint: "https://example.com/example/1234",
|
|
|
|
keys: %{
|
|
|
|
auth: "8eDyX_uCN0XRhSbY5hs7Hg==",
|
|
|
|
p256dh:
|
|
|
|
"BCIWgsnyXDv1VkhqL2P7YRBvdeuDnlwAPT2guNhdIoW3IP7GmHh1SMKPLxRf7x8vJy6ZFK3ol2ohgn_-0yP7QQA="
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@api_key "BASgACIHpN1GYgzSRp"
|
|
|
|
@message "@Bob: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce sagittis fini..."
|
|
|
|
|
|
|
|
test "performs sending notifications" do
|
|
|
|
user = insert(:user)
|
|
|
|
user2 = insert(:user)
|
|
|
|
insert(:push_subscription, user: user, data: %{alerts: %{"mention" => true}})
|
|
|
|
insert(:push_subscription, user: user2, data: %{alerts: %{"mention" => true}})
|
|
|
|
|
|
|
|
insert(:push_subscription,
|
|
|
|
user: user,
|
|
|
|
data: %{alerts: %{"follow" => true, "mention" => true}}
|
|
|
|
)
|
|
|
|
|
|
|
|
insert(:push_subscription,
|
|
|
|
user: user,
|
|
|
|
data: %{alerts: %{"follow" => true, "mention" => false}}
|
|
|
|
)
|
|
|
|
|
|
|
|
notif =
|
|
|
|
insert(:notification,
|
|
|
|
user: user,
|
|
|
|
activity: %Pleroma.Activity{
|
|
|
|
data: %{
|
|
|
|
"type" => "Create",
|
|
|
|
"actor" => user.ap_id,
|
|
|
|
"object" => %{"content" => "<Lorem ipsum dolor sit amet."}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
2019-04-05 05:38:44 -07:00
|
|
|
assert Impl.perform(notif) == [:ok, :ok]
|
2019-03-06 05:20:12 -08:00
|
|
|
end
|
|
|
|
|
2019-04-05 05:38:44 -07:00
|
|
|
@tag capture_log: true
|
2019-03-06 05:20:12 -08:00
|
|
|
test "returns error if notif does not match " do
|
2019-04-05 05:38:44 -07:00
|
|
|
assert Impl.perform(%{}) == :error
|
2019-03-06 05:20:12 -08:00
|
|
|
end
|
|
|
|
|
|
|
|
test "successful message sending" do
|
|
|
|
assert Impl.push_message(@message, @sub, @api_key, %Subscription{}) == :ok
|
|
|
|
end
|
|
|
|
|
2019-04-05 05:38:44 -07:00
|
|
|
@tag capture_log: true
|
2019-03-06 05:20:12 -08:00
|
|
|
test "fail message sending" do
|
|
|
|
assert Impl.push_message(
|
|
|
|
@message,
|
|
|
|
Map.merge(@sub, %{endpoint: "https://example.com/example/bad"}),
|
|
|
|
@api_key,
|
|
|
|
%Subscription{}
|
|
|
|
) == :error
|
|
|
|
end
|
|
|
|
|
|
|
|
test "delete subsciption if restult send message between 400..500" do
|
|
|
|
subscription = insert(:push_subscription)
|
|
|
|
|
|
|
|
assert Impl.push_message(
|
|
|
|
@message,
|
|
|
|
Map.merge(@sub, %{endpoint: "https://example.com/example/not_found"}),
|
|
|
|
@api_key,
|
|
|
|
subscription
|
|
|
|
) == :ok
|
|
|
|
|
|
|
|
refute Pleroma.Repo.get(Subscription, subscription.id)
|
|
|
|
end
|
|
|
|
|
|
|
|
test "renders body for create activity" do
|
|
|
|
assert Impl.format_body(
|
|
|
|
%{
|
|
|
|
activity: %{
|
|
|
|
data: %{
|
|
|
|
"type" => "Create",
|
|
|
|
"object" => %{
|
|
|
|
"content" =>
|
|
|
|
"<span>Lorem ipsum dolor sit amet</span>, consectetur :bear: adipiscing elit. Fusce sagittis finibus turpis."
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
%{nickname: "Bob"}
|
|
|
|
) ==
|
|
|
|
"@Bob: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce sagittis fini..."
|
|
|
|
end
|
|
|
|
|
|
|
|
test "renders body for follow activity" do
|
|
|
|
assert Impl.format_body(%{activity: %{data: %{"type" => "Follow"}}}, %{nickname: "Bob"}) ==
|
|
|
|
"@Bob has followed you"
|
|
|
|
end
|
|
|
|
|
|
|
|
test "renders body for announce activity" do
|
|
|
|
user = insert(:user)
|
|
|
|
|
|
|
|
note =
|
|
|
|
insert(:note, %{
|
|
|
|
data: %{
|
|
|
|
"content" =>
|
|
|
|
"<span>Lorem ipsum dolor sit amet</span>, consectetur :bear: adipiscing elit. Fusce sagittis finibus turpis."
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
note_activity = insert(:note_activity, %{note: note})
|
|
|
|
announce_activity = insert(:announce_activity, %{user: user, note_activity: note_activity})
|
|
|
|
|
|
|
|
assert Impl.format_body(%{activity: announce_activity}, user) ==
|
|
|
|
"@#{user.nickname} repeated: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce sagittis fini..."
|
|
|
|
end
|
|
|
|
|
|
|
|
test "renders body for like activity" do
|
|
|
|
assert Impl.format_body(%{activity: %{data: %{"type" => "Like"}}}, %{nickname: "Bob"}) ==
|
|
|
|
"@Bob has favorited your post"
|
|
|
|
end
|
|
|
|
end
|