diff options
| -rw-r--r-- | lib/pleroma/user.ex | 19 | ||||
| -rw-r--r-- | lib/pleroma/web/twitter_api/representers/user_representer.ex | 8 | ||||
| -rw-r--r-- | test/web/twitter_api/representers/user_representer_test.exs | 21 | ||||
| -rw-r--r-- | test/web/twitter_api/twitter_api_controller_test.exs | 2 | 
4 files changed, 40 insertions, 10 deletions
| diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 86b4b8b5e..3a4dd5d08 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -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 @@ defmodule Pleroma.User 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]) diff --git a/lib/pleroma/web/twitter_api/representers/user_representer.ex b/lib/pleroma/web/twitter_api/representers/user_representer.ex index 2ee4ee254..f358baf3c 100644 --- a/lib/pleroma/web/twitter_api/representers/user_representer.ex +++ b/lib/pleroma/web/twitter_api/representers/user_representer.ex @@ -15,6 +15,8 @@ defmodule Pleroma.Web.TwitterAPI.Representers.UserRepresenter do        false      end +    user_info = User.user_info(user) +      map = %{        "id" => user.id,        "name" => user.name, @@ -23,9 +25,9 @@ defmodule Pleroma.Web.TwitterAPI.Representers.UserRepresenter 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, diff --git a/test/web/twitter_api/representers/user_representer_test.exs b/test/web/twitter_api/representers/user_representer_test.exs index 913d1322c..1e92c5190 100644 --- a/test/web/twitter_api/representers/user_representer_test.exs +++ b/test/web/twitter_api/representers/user_representer_test.exs @@ -19,7 +19,18 @@ defmodule Pleroma.Web.TwitterAPI.Representers.UserRepresenterTest 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 @@ defmodule Pleroma.Web.TwitterAPI.Representers.UserRepresenterTest 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 @@ defmodule Pleroma.Web.TwitterAPI.Representers.UserRepresenterTest 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, diff --git a/test/web/twitter_api/twitter_api_controller_test.exs b/test/web/twitter_api/twitter_api_controller_test.exs index e4ed6cd54..0761d0566 100644 --- a/test/web/twitter_api/twitter_api_controller_test.exs +++ b/test/web/twitter_api/twitter_api_controller_test.exs @@ -367,7 +367,7 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do    end    defp valid_user(_context) do -    { :ok, user } = UserBuilder.insert(%{nickname: "lambda", ap_id: "lambda"}) +    user = insert(:user)      [user: user]    end | 
