Add webfinger and basic feed support.

This commit is contained in:
Roger Braun 2017-04-18 18:41:51 +02:00
commit d23f3e3cf3
9 changed files with 160 additions and 17 deletions

View file

@ -0,0 +1,39 @@
defmodule Pleroma.Web.OStatus.FeedRepresenterTest do
use Pleroma.DataCase
import Pleroma.Factory
alias Pleroma.User
alias Pleroma.Web.OStatus.{FeedRepresenter, UserRepresenter}
alias Pleroma.Web.OStatus
test "returns a feed of the last 20 items of the user" do
note_activity = insert(:note_activity)
user = User.get_cached_by_ap_id(note_activity.data["actor"])
tuple = FeedRepresenter.to_simple_form(user, [note_activity], [user])
most_recent_update = note_activity.updated_at
|> NaiveDateTime.to_iso8601
res = :xmerl.export_simple_content(tuple, :xmerl_xml) |> IO.iodata_to_binary
user_xml = UserRepresenter.to_simple_form(user)
|> :xmerl.export_simple_content(:xmerl_xml)
expected = """
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:activity="http://activitystrea.ms/spec/1.0/">
<id>#{OStatus.feed_path(user)}</id>
<title>#{user.nickname}'s timeline</title>
<updated>#{most_recent_update}</updated>
<entries />
<link rel="hub" href="#{OStatus.pubsub_path}" />
<author>
#{user_xml}
</author>
</feed>
"""
assert clean(res) == clean(expected)
end
defp clean(string) do
String.replace(string, ~r/\s/, "")
end
end

View file

@ -0,0 +1,15 @@
defmodule Pleroma.Web.OStatus.OStatusControllerTest do
use Pleroma.Web.ConnCase
import Pleroma.Factory
alias Pleroma.User
test "gets a feed", %{conn: conn} do
note_activity = insert(:note_activity)
user = User.get_cached_by_ap_id(note_activity.data["actor"])
conn = conn
|> get("/users/#{user.nickname}/feed.atom")
assert response(conn, 200)
end
end

View file

@ -3,15 +3,26 @@ defmodule Pleroma.Web.OStatus.UserRepresenterTest do
alias Pleroma.Web.OStatus.UserRepresenter
import Pleroma.Factory
alias Pleroma.User
test "returns a user with id, uri, name and link" do
user = build(:user)
tuple = UserRepresenter.to_tuple(user)
{:author, author} = tuple
tuple = UserRepresenter.to_simple_form(user)
[:id, :uri, :name, :link]
|> Enum.each(fn (tag) ->
assert Enum.find(author, fn(e) -> tag == elem(e, 0) end)
end)
res = :xmerl.export_simple_content(tuple, :xmerl_xml) |> IO.iodata_to_binary
expected = """
<id>#{user.ap_id}</id>
<activity:object>http://activitystrea.ms/schema/1.0/person</activity:object>
<uri>#{user.ap_id}</uri>
<name>#{user.nickname}</name>
<link rel="avatar" href="#{User.avatar_url(user)}" />
"""
assert clean(res) == clean(expected)
end
defp clean(string) do
String.replace(string, ~r/\s/, "")
end
end