# Pleroma: A lightweight social networking server # Copyright © 2017-2019 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.UserViewTest do use Pleroma.DataCase import Pleroma.Factory alias Pleroma.User alias Pleroma.Web.ActivityPub.UserView alias Pleroma.Web.CommonAPI test "Renders a user, including the public key" do user = insert(:user) {:ok, user} = User.ensure_keys_present(user) result = UserView.render("user.json", %{user: user}) assert result["id"] == user.ap_id assert result["preferredUsername"] == user.nickname assert String.contains?(result["publicKey"]["publicKeyPem"], "BEGIN PUBLIC KEY") end test "Renders profile fields" do fields = [ %{"name" => "foo", "value" => "bar"} ] {:ok, user} = insert(:user) |> User.upgrade_changeset(%{info: %{fields: fields}}) |> User.update_and_set_cache() assert %{ "attachment" => [%{"name" => "foo", "type" => "PropertyValue", "value" => "bar"}] } = UserView.render("user.json", %{user: user}) end test "Does not add an avatar image if the user hasn't set one" do user = insert(:user) {:ok, user} = User.ensure_keys_present(user) result = UserView.render("user.json", %{user: user}) refute result["icon"] refute result["image"] user = insert(:user, avatar: %{"url" => [%{"href" => "https://someurl"}]}, info: %{ banner: %{"url" => [%{"href" => "https://somebanner"}]} } ) {:ok, user} = User.ensure_keys_present(user) result = UserView.render("user.json", %{user: user}) assert result["icon"]["url"] == "https://someurl" assert result["image"]["url"] == "https://somebanner" end describe "endpoints" do test "local users have a usable endpoints structure" do user = insert(:user) {:ok, user} = User.ensure_keys_present(user) result = UserView.render("user.json", %{user: user}) assert result["id"] == user.ap_id %{ "sharedInbox" => _, "oauthAuthorizationEndpoint" => _, "oauthRegistrationEndpoint" => _, "oauthTokenEndpoint" => _ } = result["endpoints"] end test "remote users have an empty endpoints structure" do user = insert(:user, local: false) {:ok, user} = User.ensure_keys_present(user) result = UserView.render("user.json", %{user: user}) assert result["id"] == user.ap_id assert result["endpoints"] == %{} end test "instance users do not expose oAuth endpoints" do user = insert(:user, nickname: nil, local: true) {:ok, user} = User.ensure_keys_present(user) result = UserView.render("user.json", %{user: user}) refute result["endpoints"]["oauthAuthorizationEndpoint"] refute result["endpoints"]["oauthRegistrationEndpoint"] refute result["endpoints"]["oauthTokenEndpoint"] end end describe "followers" do test "sets totalItems to zero when followers are hidden" do user = insert(:user) other_user = insert(:user) {:ok, _other_user, user, _activity} = CommonAPI.follow(other_user, user) assert %{"totalItems" => 1} = UserView.render("followers.json", %{user: user}) info = Map.put(user.info, :hide_followers, true) user = Map.put(user, :info, info) assert %{"totalItems" => 0} = UserView.render("followers.json", %{user: user}) end end describe "following" do test "sets totalItems to zero when follows are hidden" do user = insert(:user) other_user = insert(:user) {:ok, user, _other_user, _activity} = CommonAPI.follow(user, other_user) assert %{"totalItems" => 1} = UserView.render("following.json", %{user: user}) info = Map.put(user.info, :hide_follows, true) user = Map.put(user, :info, info) assert %{"totalItems" => 0} = UserView.render("following.json", %{user: user}) end end end