Fix specs, add some user info.
This commit is contained in:
parent
e987be2de7
commit
1e88f102c4
|
@ -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])
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue