)
end
+ test "does not fetch anything from a rejected instance" do
+ clear_config([:mrf_simple, :reject], [{"evil.example.org", "i said so"}])
+
+ assert {:reject, _} =
+ Fetcher.fetch_object_from_id("http://evil.example.org/@admin/99541947525187367")
+ end
+
+ test "does not fetch anything if mrf_simple accept is on" do
+ clear_config([:mrf_simple, :accept], [{"mastodon.example.org", "i said so"}])
+ clear_config([:mrf_simple, :reject], [])
+
+ assert {:reject, _} =
+ Fetcher.fetch_object_from_id(
+ "http://notlisted.example.org/@admin/99541947525187367"
+ )
+
+ assert {:ok, _object} =
+ Fetcher.fetch_object_from_id(
+ "http://mastodon.example.org/@admin/99541947525187367"
+ )
+ end
+
test "it resets instance reachability on successful fetch" do
id = "http://mastodon.example.org/@admin/99541947525187367"
Instances.set_consistently_unreachable(id)
end
test "handle HTTP 410 Gone response" do
- assert {:error, "Object has been deleted"} ==
+ assert {:error,
+ {"Object has been deleted", "https://mastodon.example.org/users/userisgone", 410}} ==
Fetcher.fetch_and_contain_remote_object_from_id(
"https://mastodon.example.org/users/userisgone"
)
end
test "handle HTTP 404 response" do
- assert {:error, "Object has been deleted"} ==
+ assert {:error,
+ {"Object has been deleted", "https://mastodon.example.org/users/userisgone404", 404}} ==
Fetcher.fetch_and_contain_remote_object_from_id(
"https://mastodon.example.org/users/userisgone404"
)
} = object.data
end
end
+
+ describe "get_object/1" do
+ test "should return ok if the content type is application/activity+json" do
+ Tesla.Mock.mock(fn
+ %{
+ method: :get,
+ url: "https://mastodon.social/2"
+ } ->
+ %Tesla.Env{
+ status: 200,
+ headers: [{"content-type", "application/activity+json"}],
+ body: "{}"
+ }
+ end)
+
+ assert {:ok, "{}"} = Fetcher.get_object("https://mastodon.social/2")
+ end
+
+ test "should return ok if the content type is application/ld+json with a profile" do
+ Tesla.Mock.mock(fn
+ %{
+ method: :get,
+ url: "https://mastodon.social/2"
+ } ->
+ %Tesla.Env{
+ status: 200,
+ headers: [
+ {"content-type",
+ "application/ld+json; profile=\"https://www.w3.org/ns/activitystreams\""}
+ ],
+ body: "{}"
+ }
+ end)
+
+ assert {:ok, "{}"} = Fetcher.get_object("https://mastodon.social/2")
+
+ Tesla.Mock.mock(fn
+ %{
+ method: :get,
+ url: "https://mastodon.social/2"
+ } ->
+ %Tesla.Env{
+ status: 200,
+ headers: [
+ {"content-type",
+ "application/ld+json; profile=\"http://www.w3.org/ns/activitystreams\""}
+ ],
+ body: "{}"
+ }
+ end)
+
+ assert {:ok, "{}"} = Fetcher.get_object("https://mastodon.social/2")
+ end
+
+ test "should not return ok with other content types" do
+ Tesla.Mock.mock(fn
+ %{
+ method: :get,
+ url: "https://mastodon.social/2"
+ } ->
+ %Tesla.Env{
+ status: 200,
+ headers: [{"content-type", "application/json"}],
+ body: "{}"
+ }
+ end)
+
+ assert {:error, {:content_type, "application/json"}} =
+ Fetcher.get_object("https://mastodon.social/2")
+ end
+ end
end