defmodule Pleroma.Web.OStatus.ActivityRepresenterTest do use Pleroma.DataCase alias Pleroma.Web.OStatus.ActivityRepresenter alias Pleroma.{User, Activity, Object} alias Pleroma.Web.ActivityPub.ActivityPub import Pleroma.Factory test "a note activity" do note_activity = insert(:note_activity) updated_at = note_activity.updated_at |> NaiveDateTime.to_iso8601 inserted_at = note_activity.inserted_at |> NaiveDateTime.to_iso8601 user = User.get_cached_by_ap_id(note_activity.data["actor"]) expected = """ http://activitystrea.ms/schema/1.0/note http://activitystrea.ms/schema/1.0/post #{note_activity.data["object"]["id"]} New note by #{user.nickname} #{note_activity.data["object"]["content"]} #{inserted_at} #{updated_at} #{note_activity.data["context"]} """ tuple = ActivityRepresenter.to_simple_form(note_activity, user) res = :xmerl.export_simple_content(tuple, :xmerl_xml) |> IO.iodata_to_binary assert clean(res) == clean(expected) end test "a reply note" do note = insert(:note_activity) answer = insert(:note_activity) object = answer.data["object"] object = Map.put(object, "inReplyTo", note.data["object"]["id"]) data = %{answer.data | "object" => object} answer = %{answer | data: data} updated_at = answer.updated_at |> NaiveDateTime.to_iso8601 inserted_at = answer.inserted_at |> NaiveDateTime.to_iso8601 user = User.get_cached_by_ap_id(answer.data["actor"]) expected = """ http://activitystrea.ms/schema/1.0/note http://activitystrea.ms/schema/1.0/post #{answer.data["object"]["id"]} New note by #{user.nickname} #{answer.data["object"]["content"]} #{inserted_at} #{updated_at} #{answer.data["context"]} """ tuple = ActivityRepresenter.to_simple_form(answer, user) res = :xmerl.export_simple_content(tuple, :xmerl_xml) |> IO.iodata_to_binary assert clean(res) == clean(expected) end test "an announce activity" do note = insert(:note_activity) user = insert(:user) object = Object.get_cached_by_ap_id(note.data["object"]["id"]) {:ok, announce, object} = ActivityPub.announce(user, object) announce = Repo.get(Activity, announce.id) note_user = User.get_cached_by_ap_id(note.data["actor"]) note = Repo.get(Activity, note.id) note_xml = ActivityRepresenter.to_simple_form(note, note_user) |> :xmerl.export_simple_content(:xmerl_xml) |> IO.iodata_to_binary updated_at = announce.updated_at |> NaiveDateTime.to_iso8601 inserted_at = announce.inserted_at |> NaiveDateTime.to_iso8601 expected = """ http://activitystrea.ms/schema/1.0/share #{announce.data["id"]} #{user.nickname} repeated a notice RT #{note.data["object"]["content"]} #{inserted_at} #{updated_at} #{announce.data["context"]} #{note_xml} """ announce_xml = ActivityRepresenter.to_simple_form(announce, user) |> :xmerl.export_simple_content(:xmerl_xml) |> IO.iodata_to_binary assert clean(expected) == clean(announce_xml) end test "a like activity" do note = insert(:note) user = insert(:user) {:ok, like, _note} = ActivityPub.like(user, note) updated_at = like.updated_at |> NaiveDateTime.to_iso8601 inserted_at = like.inserted_at |> NaiveDateTime.to_iso8601 tuple = ActivityRepresenter.to_simple_form(like, user) refute is_nil(tuple) res = :xmerl.export_simple_content(tuple, :xmerl_xml) |> IO.iodata_to_binary expected = """ http://activitystrea.ms/schema/1.0/favorite #{like.data["id"]} New favorite by #{user.nickname} #{user.nickname} favorited something #{inserted_at} #{updated_at} http://activitystrea.ms/schema/1.0/note #{note.data["id"]} #{like.data["context"]} """ assert clean(res) == clean(expected) end test "an unknown activity" do tuple = ActivityRepresenter.to_simple_form(%Activity{}, nil) assert is_nil(tuple) end defp clean(string) do String.replace(string, ~r/\s/, "") end end