Add avatar objects to user, fix specs.

This commit is contained in:
Roger Braun 2017-04-16 15:28:28 +02:00
parent 7617a593b9
commit d7e3b72c6a
9 changed files with 60 additions and 37 deletions

View File

@ -13,6 +13,7 @@ defmodule Pleroma.User do
field :password_confirmation, :string, virtual: true field :password_confirmation, :string, virtual: true
field :following, { :array, :string }, default: [] field :following, { :array, :string }, default: []
field :ap_id, :string field :ap_id, :string
field :avatar, :map
timestamps() timestamps()
end end

View File

@ -0,0 +1,9 @@
defmodule Pleroma.Repo.Migrations.AddAvatarObjectToUsers do
use Ecto.Migration
def change do
alter table(:users) do
add :avatar, :map
end
end
end

View File

@ -3,7 +3,7 @@ defmodule Pleroma.Builders.ActivityBuilder do
alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.ActivityPub.ActivityPub
def build(data \\ %{}, opts \\ %{}) do def build(data \\ %{}, opts \\ %{}) do
user = opts[:user] || UserBuilder.build user = opts[:user] || Pleroma.Factory.insert(:user)
activity = %{ activity = %{
"id" => 1, "id" => 1,
"actor" => user.ap_id, "actor" => user.ap_id,
@ -29,7 +29,7 @@ def insert_list(times, data \\ %{}, opts \\ %{}) do
end end
def public_and_non_public do def public_and_non_public do
{:ok, user} = UserBuilder.insert user = Pleroma.Factory.insert(:user)
public = build(%{"id" => 1}, %{user: user}) public = build(%{"id" => 1}, %{user: user})
non_public = build(%{"id" => 2, "to" => []}, %{user: user}) non_public = build(%{"id" => 2, "to" => []}, %{user: user})

View File

@ -3,6 +3,8 @@ defmodule Pleroma.UserTest do
alias Pleroma.User alias Pleroma.User
use Pleroma.DataCase use Pleroma.DataCase
import Pleroma.Factory
test "ap_id returns the activity pub id for the user" do test "ap_id returns the activity pub id for the user" do
host = host =
Application.get_env(:pleroma, Pleroma.Web.Endpoint) Application.get_env(:pleroma, Pleroma.Web.Endpoint)
@ -25,21 +27,21 @@ test "ap_followers returns the followers collection for the user" do
end end
test "follow takes a user and another user" do test "follow takes a user and another user" do
{ :ok, user } = UserBuilder.insert user = insert(:user)
{ :ok, following } = UserBuilder.insert(%{nickname: "guy"}) followed = insert(:user)
{:ok, user } = User.follow(user, following) {:ok, user } = User.follow(user, followed)
user = Repo.get(User, user.id) user = Repo.get(User, user.id)
assert user.following == [User.ap_followers(following)] assert user.following == [User.ap_followers(followed)]
end end
test "unfollow takes a user and another user" do test "unfollow takes a user and another user" do
{ :ok, following } = UserBuilder.insert(%{nickname: "guy"}) followed = insert(:user)
{ :ok, user } = UserBuilder.insert(%{following: [User.ap_followers(following)]}) user = insert(:user, %{following: [User.ap_followers(followed)]})
{:ok, user } = User.unfollow(user, following) {:ok, user } = User.unfollow(user, followed)
user = Repo.get(User, user.id) user = Repo.get(User, user.id)
@ -47,8 +49,8 @@ test "unfollow takes a user and another user" do
end end
test "test if a user is following another user" do test "test if a user is following another user" do
{ :ok, followed } = UserBuilder.insert(%{nickname: "guy"}) followed = insert(:user)
{ :ok, user } = UserBuilder.insert(%{following: [User.ap_followers(followed)]}) user = insert(:user, %{following: [User.ap_followers(followed)]})
assert User.following?(user, followed) assert User.following?(user, followed)
refute User.following?(followed, user) refute User.following?(followed, user)

View File

@ -191,8 +191,7 @@ test "works with base64 encoded images" do
" "
} }
{:ok, %Object{} = object} = ActivityPub.upload(file) {:ok, %Object{}} = ActivityPub.upload(file)
IO.inspect(object)
end end
end end
end end

View File

@ -45,8 +45,11 @@ test "a like activity" do
test "an activity" do test "an activity" do
{:ok, user} = UserBuilder.insert {:ok, user} = UserBuilder.insert
{:ok, mentioned_user } = UserBuilder.insert(%{nickname: "shp", ap_id: "shp"}) # {:ok, mentioned_user } = UserBuilder.insert(%{nickname: "shp", ap_id: "shp"})
{:ok, follower} = UserBuilder.insert(%{following: [User.ap_followers(user)]}) mentioned_user = insert(:user, %{nickname: "shp"})
# {:ok, follower} = UserBuilder.insert(%{following: [User.ap_followers(user)]})
follower = insert(:user, %{following: [User.ap_followers(user)]})
object = %Object{ object = %Object{
data: %{ data: %{
@ -62,7 +65,7 @@ test "an activity" do
} }
} }
content_html = "Some content mentioning <a href='shp'>@shp</shp>" content_html = "Some content mentioning <a href='#{mentioned_user.ap_id}'>@shp</shp>"
content = HtmlSanitizeEx.strip_tags(content_html) content = HtmlSanitizeEx.strip_tags(content_html)
date = DateTime.from_naive!(~N[2016-05-24 13:26:08.003], "Etc/UTC") |> DateTime.to_iso8601 date = DateTime.from_naive!(~N[2016-05-24 13:26:08.003], "Etc/UTC") |> DateTime.to_iso8601

View File

@ -5,13 +5,22 @@ defmodule Pleroma.Web.TwitterAPI.Representers.UserRepresenterTest do
alias Pleroma.Web.TwitterAPI.Representers.UserRepresenter alias Pleroma.Web.TwitterAPI.Representers.UserRepresenter
alias Pleroma.Builders.UserBuilder alias Pleroma.Builders.UserBuilder
import Pleroma.Factory
setup do setup do
{:ok, user} = UserBuilder.insert # {:ok, user} = UserBuilder.insert
user = insert(:user)
[user: user] [user: user]
end end
test "A user", %{user: user} do test "A user", %{user: user} do
image = "https://placehold.it/48x48" image = "https://placehold.it/48x48"
image = if user.avatar do
else
image
end
represented = %{ represented = %{
"id" => user.id, "id" => user.id,
"name" => user.name, "name" => user.name,

View File

@ -94,10 +94,10 @@ test "without valid credentials", %{conn: conn} do
end end
test "with credentials", %{conn: conn, user: current_user} do test "with credentials", %{conn: conn, user: current_user} do
{:ok, user} = UserBuilder.insert user = insert(:user)
activities = ActivityBuilder.insert_list(30, %{"to" => [User.ap_followers(user)]}, %{user: user}) activities = ActivityBuilder.insert_list(30, %{"to" => [User.ap_followers(user)]}, %{user: user})
returned_activities = ActivityBuilder.insert_list(10, %{"to" => [User.ap_followers(user)]}, %{user: user}) returned_activities = ActivityBuilder.insert_list(10, %{"to" => [User.ap_followers(user)]}, %{user: user})
{:ok, other_user} = UserBuilder.insert(%{ap_id: "glimmung", nickname: "nockame"}) other_user = insert(:user)
ActivityBuilder.insert_list(10, %{}, %{user: other_user}) ActivityBuilder.insert_list(10, %{}, %{user: other_user})
since_id = List.last(activities).id since_id = List.last(activities).id
@ -110,7 +110,7 @@ test "with credentials", %{conn: conn, user: current_user} do
response = json_response(conn, 200) response = json_response(conn, 200)
assert length(response) == 10 assert length(response) == 10
assert response == Enum.map(returned_activities, fn (activity) -> ActivityRepresenter.to_map(activity, %{user: user, for: current_user}) end) assert response == Enum.map(returned_activities, fn (activity) -> ActivityRepresenter.to_map(activity, %{user: User.get_cached_by_ap_id(activity.data["actor"]), for: current_user}) end)
end end
end end
@ -122,7 +122,7 @@ test "without valid credentials", %{conn: conn} do
end end
test "with credentials", %{conn: conn, user: current_user} do test "with credentials", %{conn: conn, user: current_user} do
{:ok, followed } = UserBuilder.insert(%{name: "some guy"}) followed = insert(:user)
conn = conn conn = conn
|> with_credentials(current_user.nickname, "test") |> with_credentials(current_user.nickname, "test")
@ -142,7 +142,7 @@ test "without valid credentials", %{conn: conn} do
end end
test "with credentials", %{conn: conn, user: current_user} do test "with credentials", %{conn: conn, user: current_user} do
{:ok, followed } = UserBuilder.insert(%{name: "some guy"}) followed = insert(:user)
{:ok, current_user} = User.follow(current_user, followed) {:ok, current_user} = User.follow(current_user, followed)
assert current_user.following == [User.ap_followers(followed)] assert current_user.following == [User.ap_followers(followed)]

View File

@ -78,7 +78,8 @@ test "create a status that is a reply" do
test "fetch public statuses" do test "fetch public statuses" do
%{ public: activity, user: user } = ActivityBuilder.public_and_non_public %{ public: activity, user: user } = ActivityBuilder.public_and_non_public
{:ok, follower } = UserBuilder.insert(%{name: "dude", ap_id: "idididid", following: [User.ap_followers(user)]})
follower = insert(:user, following: [User.ap_followers(user)])
statuses = TwitterAPI.fetch_public_statuses(follower) statuses = TwitterAPI.fetch_public_statuses(follower)
@ -87,19 +88,18 @@ test "fetch public statuses" do
end end
test "fetch friends' statuses" do test "fetch friends' statuses" do
ActivityBuilder.public_and_non_public user = insert(:user, %{following: ["someguy/followers"]})
{:ok, activity} = ActivityBuilder.insert(%{"to" => ["someguy/followers"]}) {:ok, activity} = ActivityBuilder.insert(%{"to" => ["someguy/followers"]})
{:ok, direct_activity} = ActivityBuilder.insert(%{"to" => ["some other id"]}) {:ok, direct_activity} = ActivityBuilder.insert(%{"to" => [user.ap_id]})
{:ok, user} = UserBuilder.insert(%{ap_id: "some other id", following: ["someguy/followers"]})
statuses = TwitterAPI.fetch_friend_statuses(user) statuses = TwitterAPI.fetch_friend_statuses(user)
activity_user = Repo.get_by(User, ap_id: activity.data["actor"]) activity_user = Repo.get_by(User, ap_id: activity.data["actor"])
direct_activity_user = Repo.get_by(User, ap_id: direct_activity.data["actor"])
assert length(statuses) == 2 assert length(statuses) == 2
assert Enum.at(statuses, 0) == ActivityRepresenter.to_map(activity, %{user: activity_user}) assert Enum.at(statuses, 0) == ActivityRepresenter.to_map(activity, %{user: activity_user})
assert Enum.at(statuses, 1) == ActivityRepresenter.to_map(direct_activity, %{user: activity_user, mentioned: [user]}) assert Enum.at(statuses, 1) == ActivityRepresenter.to_map(direct_activity, %{user: direct_activity_user, mentioned: [user]})
end end
test "fetch a single status" do test "fetch a single status" do
@ -113,8 +113,8 @@ test "fetch a single status" do
end end
test "Follow another user" do test "Follow another user" do
{ :ok, user } = UserBuilder.insert user = insert(:user)
{ :ok, following } = UserBuilder.insert(%{nickname: "guy"}) following = insert(:user)
{:ok, user, following, activity } = TwitterAPI.follow(user, following.id) {:ok, user, following, activity } = TwitterAPI.follow(user, following.id)
@ -126,8 +126,8 @@ test "Follow another user" do
end end
test "Unfollow another user" do test "Unfollow another user" do
{ :ok, following } = UserBuilder.insert(%{nickname: "guy"}) following = insert(:user)
{ :ok, user } = UserBuilder.insert(%{following: [User.ap_followers(following)]}) user = insert(:user, %{following: [User.ap_followers(following)]})
{:ok, user, _following } = TwitterAPI.unfollow(user, following.id) {:ok, user, _following } = TwitterAPI.unfollow(user, following.id)
@ -160,8 +160,8 @@ test "upload a file" do
test "it can parse mentions and return the relevant users" do test "it can parse mentions and return the relevant users" do
text = "@gsimg According to @archaeme , that is @daggsy." text = "@gsimg According to @archaeme , that is @daggsy."
{:ok, gsimg} = UserBuilder.insert(%{nickname: "gsimg"}) gsimg = insert(:user, %{nickname: "gsimg"})
{:ok, archaeme} = UserBuilder.insert(%{nickname: "archaeme"}) archaeme = insert(:user, %{nickname: "archaeme"})
expected_result = [ expected_result = [
{"@gsimg", gsimg}, {"@gsimg", gsimg},
@ -174,11 +174,11 @@ test "it can parse mentions and return the relevant users" do
test "it adds user links to an existing text" do test "it adds user links to an existing text" do
text = "@gsimg According to @archaeme , that is @daggsy." text = "@gsimg According to @archaeme , that is @daggsy."
{:ok, _gsimg} = UserBuilder.insert(%{nickname: "gsimg", ap_id: "first_link" }) gsimg = insert(:user, %{nickname: "gsimg"})
{:ok, _archaeme} = UserBuilder.insert(%{nickname: "archaeme", ap_id: "second_link"}) archaeme = insert(:user, %{nickname: "archaeme"})
mentions = TwitterAPI.parse_mentions(text) mentions = TwitterAPI.parse_mentions(text)
expected_text = "<a href='first_link'>@gsimg</a> According to <a href='second_link'>@archaeme</a> , that is @daggsy." expected_text = "<a href='#{gsimg.ap_id}'>@gsimg</a> According to <a href='#{archaeme.ap_id}'>@archaeme</a> , that is @daggsy."
assert TwitterAPI.add_user_links(text, mentions) == expected_text assert TwitterAPI.add_user_links(text, mentions) == expected_text
end end