PublisherTest: Use mox instead of mock.

This commit is contained in:
Lain Soykaf 2025-09-05 14:18:12 +04:00
commit 3de250da23
7 changed files with 35 additions and 9 deletions

View file

@ -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

View file

@ -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

View 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

View file

@ -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),

View file

@ -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)

View file

@ -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

View file

@ -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)