Commit 1e88f102 authored by lain's avatar lain
Browse files

Fix specs, add some user info.

parent e987be2d
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 ...@@ -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])
......
...@@ -15,6 +15,8 @@ def to_map(user, opts) do ...@@ -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 ...@@ -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,
......
...@@ -19,7 +19,18 @@ test "A user with an avatar object", %{user: user} do ...@@ -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 ...@@ -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 ...@@ -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,
......
...@@ -367,7 +367,7 @@ test "it returns errors on a problem", %{conn: conn} do ...@@ -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
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment