115d08a754
This is to run things like streaming notifications out, which will sometimes need data that is created by the transaction, but is streamed out asynchronously.
135 lines
4.3 KiB
Elixir
135 lines
4.3 KiB
Elixir
# Pleroma: A lightweight social networking server
|
|
# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
|
|
# SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
defmodule Pleroma.Web.ActivityPub.PipelineTest do
|
|
use Pleroma.DataCase
|
|
|
|
import Mock
|
|
import Pleroma.Factory
|
|
|
|
describe "common_pipeline/2" do
|
|
setup do
|
|
clear_config([:instance, :federating], true)
|
|
:ok
|
|
end
|
|
|
|
test "it goes through validation, filtering, persisting, side effects and federation for local activities" do
|
|
activity = insert(:note_activity)
|
|
meta = [local: true]
|
|
|
|
with_mocks([
|
|
{Pleroma.Web.ActivityPub.ObjectValidator, [], [validate: fn o, m -> {:ok, o, m} end]},
|
|
{
|
|
Pleroma.Web.ActivityPub.MRF,
|
|
[],
|
|
[filter: fn o -> {:ok, o} end]
|
|
},
|
|
{
|
|
Pleroma.Web.ActivityPub.ActivityPub,
|
|
[],
|
|
[persist: fn o, m -> {:ok, o, m} end]
|
|
},
|
|
{
|
|
Pleroma.Web.ActivityPub.SideEffects,
|
|
[],
|
|
[
|
|
handle: fn o, m -> {:ok, o, m} end,
|
|
handle_after_transaction: fn m -> m end
|
|
]
|
|
},
|
|
{
|
|
Pleroma.Web.Federator,
|
|
[],
|
|
[publish: fn _o -> :ok end]
|
|
}
|
|
]) do
|
|
assert {:ok, ^activity, ^meta} =
|
|
Pleroma.Web.ActivityPub.Pipeline.common_pipeline(activity, meta)
|
|
|
|
assert_called(Pleroma.Web.ActivityPub.ObjectValidator.validate(activity, meta))
|
|
assert_called(Pleroma.Web.ActivityPub.MRF.filter(activity))
|
|
assert_called(Pleroma.Web.ActivityPub.ActivityPub.persist(activity, meta))
|
|
assert_called(Pleroma.Web.ActivityPub.SideEffects.handle(activity, meta))
|
|
assert_called(Pleroma.Web.Federator.publish(activity))
|
|
end
|
|
end
|
|
|
|
test "it goes through validation, filtering, persisting, side effects without federation for remote activities" do
|
|
activity = insert(:note_activity)
|
|
meta = [local: false]
|
|
|
|
with_mocks([
|
|
{Pleroma.Web.ActivityPub.ObjectValidator, [], [validate: fn o, m -> {:ok, o, m} end]},
|
|
{
|
|
Pleroma.Web.ActivityPub.MRF,
|
|
[],
|
|
[filter: fn o -> {:ok, o} end]
|
|
},
|
|
{
|
|
Pleroma.Web.ActivityPub.ActivityPub,
|
|
[],
|
|
[persist: fn o, m -> {:ok, o, m} end]
|
|
},
|
|
{
|
|
Pleroma.Web.ActivityPub.SideEffects,
|
|
[],
|
|
[handle: fn o, m -> {:ok, o, m} end, handle_after_transaction: fn m -> m end]
|
|
},
|
|
{
|
|
Pleroma.Web.Federator,
|
|
[],
|
|
[]
|
|
}
|
|
]) do
|
|
assert {:ok, ^activity, ^meta} =
|
|
Pleroma.Web.ActivityPub.Pipeline.common_pipeline(activity, meta)
|
|
|
|
assert_called(Pleroma.Web.ActivityPub.ObjectValidator.validate(activity, meta))
|
|
assert_called(Pleroma.Web.ActivityPub.MRF.filter(activity))
|
|
assert_called(Pleroma.Web.ActivityPub.ActivityPub.persist(activity, meta))
|
|
assert_called(Pleroma.Web.ActivityPub.SideEffects.handle(activity, meta))
|
|
end
|
|
end
|
|
|
|
test "it goes through validation, filtering, persisting, side effects without federation for local activities if federation is deactivated" do
|
|
clear_config([:instance, :federating], false)
|
|
|
|
activity = insert(:note_activity)
|
|
meta = [local: true]
|
|
|
|
with_mocks([
|
|
{Pleroma.Web.ActivityPub.ObjectValidator, [], [validate: fn o, m -> {:ok, o, m} end]},
|
|
{
|
|
Pleroma.Web.ActivityPub.MRF,
|
|
[],
|
|
[filter: fn o -> {:ok, o} end]
|
|
},
|
|
{
|
|
Pleroma.Web.ActivityPub.ActivityPub,
|
|
[],
|
|
[persist: fn o, m -> {:ok, o, m} end]
|
|
},
|
|
{
|
|
Pleroma.Web.ActivityPub.SideEffects,
|
|
[],
|
|
[handle: fn o, m -> {:ok, o, m} end, handle_after_transaction: fn m -> m end]
|
|
},
|
|
{
|
|
Pleroma.Web.Federator,
|
|
[],
|
|
[]
|
|
}
|
|
]) do
|
|
assert {:ok, ^activity, ^meta} =
|
|
Pleroma.Web.ActivityPub.Pipeline.common_pipeline(activity, meta)
|
|
|
|
assert_called(Pleroma.Web.ActivityPub.ObjectValidator.validate(activity, meta))
|
|
assert_called(Pleroma.Web.ActivityPub.MRF.filter(activity))
|
|
assert_called(Pleroma.Web.ActivityPub.ActivityPub.persist(activity, meta))
|
|
assert_called(Pleroma.Web.ActivityPub.SideEffects.handle(activity, meta))
|
|
end
|
|
end
|
|
end
|
|
end
|