forked from AkkomaGang/akkoma
Fix specs, add some user info.
This commit is contained in:
parent
e987be2de7
commit
1e88f102c4
4 changed files with 40 additions and 10 deletions
|
@ -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])
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in a new issue