From 5637d163e6eb365c69f0e79e43306156241f6494 Mon Sep 17 00:00:00 2001 From: Lain Iwakura Date: Thu, 30 Nov 2017 14:59:44 +0100 Subject: [PATCH] MastodonAPI: Add proper user count. --- lib/pleroma/user.ex | 5 +++++ .../web/mastodon_api/mastodon_api_controller.ex | 3 ++- .../mastodon_api/mastodon_api_controller_test.exs | 15 +++++++++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 68ffe184b..afc62f265 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -329,4 +329,9 @@ def blocks?(user, %{ap_id: ap_id}) do Enum.member?(blocks, ap_id) end + def local_user_query() do + from u in User, + where: u.local == true + end + end diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex index 82887966c..61bf8b4b8 100644 --- a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex +++ b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex @@ -93,6 +93,7 @@ def user(conn, %{"id" => id}) do @instance Application.get_env(:pleroma, :instance) def masto_instance(conn, _params) do + user_count = Repo.aggregate(User.local_user_query, :count, :id) response = %{ uri: Web.base_url, title: Keyword.get(@instance, :name), @@ -103,8 +104,8 @@ def masto_instance(conn, _params) do streaming_api: String.replace(Web.base_url, ["http","https"], "wss") }, stats: %{ - user_count: 1, status_count: 2, + user_count: user_count, domain_count: 3 }, max_toot_chars: Keyword.get(@instance, :limit) diff --git a/test/web/mastodon_api/mastodon_api_controller_test.exs b/test/web/mastodon_api/mastodon_api_controller_test.exs index c8b929501..fc0010569 100644 --- a/test/web/mastodon_api/mastodon_api_controller_test.exs +++ b/test/web/mastodon_api/mastodon_api_controller_test.exs @@ -573,4 +573,19 @@ test "updates the user's banner" do assert user["header"] != "https://placehold.it/700x335" end end + + test "get instance information" do + insert(:user, %{local: true}) + user = insert(:user, %{local: true}) + insert(:user, %{local: false}) + + {:ok, _} = TwitterAPI.create_status(user, %{"status" => "cofe"}) + + conn = conn + |> get("/api/v1/instance") + + assert result = json_response(conn, 200) + + assert result["stats"]["user_count"] == 2 + end end