Fix specs, add some user info.

This commit is contained in:
Roger Braun 2017-04-21 00:51:09 +02:00
parent e987be2de7
commit 1e88f102c4
4 changed files with 40 additions and 10 deletions

View File

@ -1,7 +1,8 @@
defmodule Pleroma.User do
use Ecto.Schema
import Ecto.Changeset
alias Pleroma.{Repo, User}
import Ecto.Query
alias Pleroma.{Repo, User, Activity, Object}
schema "users" do
field :bio, :string
@ -32,6 +33,22 @@ def follow_changeset(struct, params \\ %{}) do
|> validate_required([:following])
end
def user_info(%User{} = user) do
note_count_query = from a in Object,
where: fragment("? @> ?", a.data, ^%{actor: user.ap_id, type: "Note"}),
select: count(a.id)
follower_count_query = from u in User,
where: fragment("? @> ?", u.following, ^User.ap_followers(user)),
select: count(u.id)
%{
following_count: length(user.following),
note_count: Repo.one(note_count_query),
follower_count: Repo.one(follower_count_query)
}
end
def register_changeset(struct, params \\ %{}) do
changeset = struct
|> cast(params, [:bio, :email, :name, :nickname, :password, :password_confirmation])

View File

@ -15,6 +15,8 @@ def to_map(user, opts) do
false
end
user_info = User.user_info(user)
map = %{
"id" => user.id,
"name" => user.name,
@ -23,9 +25,9 @@ def to_map(user, opts) do
"following" => following,
# Fake fields
"favourites_count" => 0,
"statuses_count" => 0,
"friends_count" => 0,
"followers_count" => 0,
"statuses_count" => user_info[:note_count],
"friends_count" => user_info[:following_count],
"followers_count" => user_info[:follower_count],
"profile_image_url" => image,
"profile_image_url_https" => image,
"profile_image_url_profile_size" => image,

View File

@ -19,7 +19,18 @@ test "A user with an avatar object", %{user: user} do
assert represented["profile_image_url"] == image
end
test "A user", %{user: user} do
test "A user" do
note_activity = insert(:note_activity)
user = User.get_cached_by_ap_id(note_activity.data["actor"])
follower = insert(:user)
second_follower = insert(:user)
User.follow(follower, user)
User.follow(second_follower, user)
User.follow(user, follower)
user = Repo.get!(User, user.id)
image = "https://placehold.it/48x48"
represented = %{
@ -29,9 +40,9 @@ test "A user", %{user: user} do
"description" => user.bio,
# Fake fields
"favourites_count" => 0,
"statuses_count" => 0,
"friends_count" => 0,
"followers_count" => 0,
"statuses_count" => 1,
"friends_count" => 1,
"followers_count" => 2,
"profile_image_url" => image,
"profile_image_url_https" => image,
"profile_image_url_profile_size" => image,
@ -55,7 +66,7 @@ test "A user for a given other follower", %{user: user} do
"favourites_count" => 0,
"statuses_count" => 0,
"friends_count" => 0,
"followers_count" => 0,
"followers_count" => 1,
"profile_image_url" => image,
"profile_image_url_https" => image,
"profile_image_url_profile_size" => image,

View File

@ -367,7 +367,7 @@ test "it returns errors on a problem", %{conn: conn} do
end
defp valid_user(_context) do
{ :ok, user } = UserBuilder.insert(%{nickname: "lambda", ap_id: "lambda"})
user = insert(:user)
[user: user]
end