WIP: post editing #103
2 changed files with 91 additions and 2 deletions
|
@ -86,8 +86,8 @@ def validate(
|
||||||
meta
|
meta
|
||||||
)
|
)
|
||||||
when objtype in ~w[Question Answer Audio Video Event Article Note Page] do
|
when objtype in ~w[Question Answer Audio Video Event Article Note Page] do
|
||||||
with {:ok, object_data} <- cast_and_apply(object),
|
with {:ok, object_data} <- cast_and_apply_and_stringify_with_history(object),
|
||||||
meta = Keyword.put(meta, :object_data, object_data |> stringify_keys),
|
meta = Keyword.put(meta, :object_data, object_data),
|
||||||
{:ok, create_activity} <-
|
{:ok, create_activity} <-
|
||||||
create_activity
|
create_activity
|
||||||
|> CreateGenericValidator.cast_and_validate(meta)
|
|> CreateGenericValidator.cast_and_validate(meta)
|
||||||
|
@ -194,6 +194,15 @@ def validate(%{"type" => type} = object, meta) when type in ~w(Add Remove) do
|
||||||
|
|
||||||
def validate(o, m), do: {:error, {:validator_not_set, {o, m}}}
|
def validate(o, m), do: {:error, {:validator_not_set, {o, m}}}
|
||||||
|
|
||||||
|
def cast_and_apply_and_stringify_with_history(object) do
|
||||||
|
do_separate_with_history(object, fn object ->
|
||||||
|
with {:ok, object_data} <- cast_and_apply(object),
|
||||||
|
object_data <- object_data |> stringify_keys() do
|
||||||
|
{:ok, object_data}
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
def cast_and_apply(%{"type" => "Question"} = object) do
|
def cast_and_apply(%{"type" => "Question"} = object) do
|
||||||
QuestionValidator.cast_and_apply(object)
|
QuestionValidator.cast_and_apply(object)
|
||||||
end
|
end
|
||||||
|
|
|
@ -456,4 +456,84 @@ test "it adds to formerRepresentations if the remote does not have one and the o
|
||||||
} = refetched.data
|
} = refetched.data
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "fetch with history" do
|
||||||
|
setup do
|
||||||
|
object2 = %{
|
||||||
|
"id" => "https://mastodon.social/2",
|
||||||
|
"actor" => "https://mastodon.social/users/emelie",
|
||||||
|
"attributedTo" => "https://mastodon.social/users/emelie",
|
||||||
|
"type" => "Note",
|
||||||
|
"content" => "test 2",
|
||||||
|
"bcc" => [],
|
||||||
|
"bto" => [],
|
||||||
|
"cc" => ["https://mastodon.social/users/emelie/followers"],
|
||||||
|
"to" => [],
|
||||||
|
"summary" => "",
|
||||||
|
"formerRepresentations" => %{
|
||||||
|
"type" => "OrderedCollection",
|
||||||
|
"orderedItems" => [
|
||||||
|
%{
|
||||||
|
"type" => "Note",
|
||||||
|
"content" => "orig 2",
|
||||||
|
"actor" => "https://mastodon.social/users/emelie",
|
||||||
|
"attributedTo" => "https://mastodon.social/users/emelie",
|
||||||
|
"bcc" => [],
|
||||||
|
"bto" => [],
|
||||||
|
"cc" => ["https://mastodon.social/users/emelie/followers"],
|
||||||
|
"to" => [],
|
||||||
|
"summary" => ""
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"totalItems" => 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mock(fn
|
||||||
|
%{
|
||||||
|
method: :get,
|
||||||
|
url: "https://mastodon.social/2"
|
||||||
|
} ->
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
headers: [{"content-type", "application/activity+json"}],
|
||||||
|
body: Jason.encode!(object2)
|
||||||
|
}
|
||||||
|
|
||||||
|
%{
|
||||||
|
method: :get,
|
||||||
|
url: "https://mastodon.social/users/emelie/collections/featured"
|
||||||
|
} ->
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
headers: [{"content-type", "application/activity+json"}],
|
||||||
|
body:
|
||||||
|
Jason.encode!(%{
|
||||||
|
"id" => "https://mastodon.social/users/emelie/collections/featured",
|
||||||
|
"type" => "OrderedCollection",
|
||||||
|
"actor" => "https://mastodon.social/users/emelie",
|
||||||
|
"attributedTo" => "https://mastodon.social/users/emelie",
|
||||||
|
"orderedItems" => [],
|
||||||
|
"totalItems" => 0
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
env ->
|
||||||
|
apply(HttpRequestMock, :request, [env])
|
||||||
|
end)
|
||||||
|
|
||||||
|
%{object2: object2}
|
||||||
|
end
|
||||||
|
|
||||||
|
test "it gets history", %{object2: object2} do
|
||||||
|
{:ok, object} = Fetcher.fetch_object_from_id(object2["id"])
|
||||||
|
|
||||||
|
assert %{
|
||||||
|
"formerRepresentations" => %{
|
||||||
|
"type" => "OrderedCollection",
|
||||||
|
"orderedItems" => [%{}]
|
||||||
|
}
|
||||||
|
} = object.data
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue