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 defmodule Pleroma.User do
use Ecto.Schema use Ecto.Schema
import Ecto.Changeset import Ecto.Changeset
alias Pleroma.{Repo, User} import Ecto.Query
alias Pleroma.{Repo, User, Activity, Object}
schema "users" do schema "users" do
field :bio, :string field :bio, :string
@ -32,6 +33,22 @@ def follow_changeset(struct, params \\ %{}) do
|> validate_required([:following]) |> validate_required([:following])
end 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 def register_changeset(struct, params \\ %{}) do
changeset = struct changeset = struct
|> cast(params, [:bio, :email, :name, :nickname, :password, :password_confirmation]) |> cast(params, [:bio, :email, :name, :nickname, :password, :password_confirmation])

View file

@ -15,6 +15,8 @@ def to_map(user, opts) do
false false
end end
user_info = User.user_info(user)
map = %{ map = %{
"id" => user.id, "id" => user.id,
"name" => user.name, "name" => user.name,
@ -23,9 +25,9 @@ def to_map(user, opts) do
"following" => following, "following" => following,
# Fake fields # Fake fields
"favourites_count" => 0, "favourites_count" => 0,
"statuses_count" => 0, "statuses_count" => user_info[:note_count],
"friends_count" => 0, "friends_count" => user_info[:following_count],
"followers_count" => 0, "followers_count" => user_info[:follower_count],
"profile_image_url" => image, "profile_image_url" => image,
"profile_image_url_https" => image, "profile_image_url_https" => image,
"profile_image_url_profile_size" => 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 assert represented["profile_image_url"] == image
end 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" image = "https://placehold.it/48x48"
represented = %{ represented = %{
@ -29,9 +40,9 @@ test "A user", %{user: user} do
"description" => user.bio, "description" => user.bio,
# Fake fields # Fake fields
"favourites_count" => 0, "favourites_count" => 0,
"statuses_count" => 0, "statuses_count" => 1,
"friends_count" => 0, "friends_count" => 1,
"followers_count" => 0, "followers_count" => 2,
"profile_image_url" => image, "profile_image_url" => image,
"profile_image_url_https" => image, "profile_image_url_https" => image,
"profile_image_url_profile_size" => 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, "favourites_count" => 0,
"statuses_count" => 0, "statuses_count" => 0,
"friends_count" => 0, "friends_count" => 0,
"followers_count" => 0, "followers_count" => 1,
"profile_image_url" => image, "profile_image_url" => image,
"profile_image_url_https" => image, "profile_image_url_https" => image,
"profile_image_url_profile_size" => image, "profile_image_url_profile_size" => image,

View file

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