PublisherTest: Use mox instead of mock.
This commit is contained in:
parent
ae0c0260fd
commit
3de250da23
7 changed files with 35 additions and 9 deletions
|
|
@ -170,6 +170,7 @@ config :pleroma, Pleroma.Upload.Filter.Mogrify, config_impl: Pleroma.StaticStubb
|
||||||
config :pleroma, Pleroma.Upload.Filter.Mogrify, mogrify_impl: Pleroma.MogrifyMock
|
config :pleroma, Pleroma.Upload.Filter.Mogrify, mogrify_impl: Pleroma.MogrifyMock
|
||||||
|
|
||||||
config :pleroma, Pleroma.Signature, http_signatures_impl: Pleroma.StubbedHTTPSignaturesMock
|
config :pleroma, Pleroma.Signature, http_signatures_impl: Pleroma.StubbedHTTPSignaturesMock
|
||||||
|
config :pleroma, Pleroma.Web.ActivityPub.Publisher, signature_impl: Pleroma.SignatureMock
|
||||||
|
|
||||||
peer_module =
|
peer_module =
|
||||||
if String.to_integer(System.otp_release()) >= 25 do
|
if String.to_integer(System.otp_release()) >= 25 do
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
# SPDX-License-Identifier: AGPL-3.0-only
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
defmodule Pleroma.Signature do
|
defmodule Pleroma.Signature do
|
||||||
|
@behaviour Pleroma.Signature.API
|
||||||
@behaviour HTTPSignatures.Adapter
|
@behaviour HTTPSignatures.Adapter
|
||||||
|
|
||||||
alias Pleroma.EctoType.ActivityPub.ObjectValidators
|
alias Pleroma.EctoType.ActivityPub.ObjectValidators
|
||||||
|
|
|
||||||
14
lib/pleroma/signature/api.ex
Normal file
14
lib/pleroma/signature/api.ex
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
# Pleroma: A lightweight social networking server
|
||||||
|
# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
|
defmodule Pleroma.Signature.API do
|
||||||
|
@moduledoc """
|
||||||
|
Behaviour for signing requests and producing HTTP Date headers.
|
||||||
|
|
||||||
|
This is used to allow tests to replace the signing implementation with Mox.
|
||||||
|
"""
|
||||||
|
|
||||||
|
@callback sign(user :: Pleroma.User.t(), headers :: map()) :: String.t()
|
||||||
|
@callback signed_date() :: String.t()
|
||||||
|
end
|
||||||
|
|
@ -26,6 +26,12 @@ defmodule Pleroma.Web.ActivityPub.Publisher do
|
||||||
ActivityPub outgoing federation module.
|
ActivityPub outgoing federation module.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
@signature_impl Application.compile_env(
|
||||||
|
:pleroma,
|
||||||
|
[__MODULE__, :signature_impl],
|
||||||
|
Pleroma.Signature
|
||||||
|
)
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Enqueue publishing a single activity.
|
Enqueue publishing a single activity.
|
||||||
"""
|
"""
|
||||||
|
|
@ -125,10 +131,10 @@ defmodule Pleroma.Web.ActivityPub.Publisher do
|
||||||
|
|
||||||
digest = "SHA-256=" <> (:crypto.hash(:sha256, json) |> Base.encode64())
|
digest = "SHA-256=" <> (:crypto.hash(:sha256, json) |> Base.encode64())
|
||||||
|
|
||||||
date = Pleroma.Signature.signed_date()
|
date = @signature_impl.signed_date()
|
||||||
|
|
||||||
signature =
|
signature =
|
||||||
Pleroma.Signature.sign(actor, %{
|
@signature_impl.sign(actor, %{
|
||||||
"(request-target)": "post #{path}",
|
"(request-target)": "post #{path}",
|
||||||
host: signature_host(uri),
|
host: signature_host(uri),
|
||||||
"content-length": byte_size(json),
|
"content-length": byte_size(json),
|
||||||
|
|
|
||||||
|
|
@ -556,13 +556,14 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "prepare_one/1 with reporter anonymization" do
|
describe "prepare_one/1 with reporter anonymization" do
|
||||||
test_with_mock "signs with the anonymized actor keys when Transmogrifier changes actor",
|
test "signs with the anonymized actor keys when Transmogrifier changes actor" do
|
||||||
Pleroma.Signature,
|
Pleroma.SignatureMock
|
||||||
[:passthrough],
|
|> Mox.stub(:signed_date, fn -> Pleroma.Signature.signed_date() end)
|
||||||
sign: fn %Pleroma.User{} = user, headers ->
|
|> Mox.expect(:sign, fn %Pleroma.User{} = user, _headers ->
|
||||||
send(self(), {:signed_as, user.ap_id})
|
send(self(), {:signed_as, user.ap_id})
|
||||||
"TESTSIG"
|
"TESTSIG"
|
||||||
end do
|
end)
|
||||||
|
|
||||||
placeholder = insert(:user)
|
placeholder = insert(:user)
|
||||||
reporter = insert(:user)
|
reporter = insert(:user)
|
||||||
target_account = insert(:user)
|
target_account = insert(:user)
|
||||||
|
|
|
||||||
|
|
@ -119,6 +119,7 @@ defmodule Pleroma.DataCase do
|
||||||
Mox.stub_with(Pleroma.StubbedHTTPSignaturesMock, Pleroma.Test.HTTPSignaturesProxy)
|
Mox.stub_with(Pleroma.StubbedHTTPSignaturesMock, Pleroma.Test.HTTPSignaturesProxy)
|
||||||
|
|
||||||
Mox.stub_with(Pleroma.DateTimeMock, Pleroma.DateTime.Impl)
|
Mox.stub_with(Pleroma.DateTimeMock, Pleroma.DateTime.Impl)
|
||||||
|
Mox.stub_with(Pleroma.SignatureMock, Pleroma.Signature)
|
||||||
end
|
end
|
||||||
|
|
||||||
def ensure_local_uploader(context) do
|
def ensure_local_uploader(context) do
|
||||||
|
|
|
||||||
|
|
@ -40,3 +40,5 @@ Mox.defmock(Pleroma.Language.LanguageDetectorMock,
|
||||||
|
|
||||||
Mox.defmock(Pleroma.DateTimeMock, for: Pleroma.DateTime)
|
Mox.defmock(Pleroma.DateTimeMock, for: Pleroma.DateTime)
|
||||||
Mox.defmock(Pleroma.MogrifyMock, for: Pleroma.MogrifyBehaviour)
|
Mox.defmock(Pleroma.MogrifyMock, for: Pleroma.MogrifyBehaviour)
|
||||||
|
|
||||||
|
Mox.defmock(Pleroma.SignatureMock, for: Pleroma.Signature.API)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue