161 lines
		
	
	
	
		
			5.5 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
			
		
		
	
	
			161 lines
		
	
	
	
		
			5.5 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
# Pleroma: A lightweight social networking server
 | 
						|
# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
 | 
						|
# 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.update_changeset(%{fields: fields})
 | 
						|
      |> User.update_and_set_cache()
 | 
						|
 | 
						|
    assert %{
 | 
						|
             "attachment" => [%{"name" => "foo", "type" => "PropertyValue", "value" => "bar"}]
 | 
						|
           } = UserView.render("user.json", %{user: user})
 | 
						|
  end
 | 
						|
 | 
						|
  test "Renders with emoji tags" do
 | 
						|
    user = insert(:user, emoji: %{"bib" => "/test"})
 | 
						|
 | 
						|
    assert %{
 | 
						|
             "tag" => [
 | 
						|
               %{
 | 
						|
                 "icon" => %{"type" => "Image", "url" => "/test"},
 | 
						|
                 "id" => "/test",
 | 
						|
                 "name" => ":bib:",
 | 
						|
                 "type" => "Emoji",
 | 
						|
                 "updated" => "1970-01-01T00:00:00Z"
 | 
						|
               }
 | 
						|
             ]
 | 
						|
           } = 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"}]},
 | 
						|
        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
 | 
						|
 | 
						|
  test "renders an invisible user with the invisible property set to true" do
 | 
						|
    user = insert(:user, invisible: true)
 | 
						|
 | 
						|
    assert %{"invisible" => true} = UserView.render("service.json", %{user: user})
 | 
						|
  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})
 | 
						|
      user = Map.merge(user, %{hide_followers_count: true, hide_followers: true})
 | 
						|
      refute UserView.render("followers.json", %{user: user}) |> Map.has_key?("totalItems")
 | 
						|
    end
 | 
						|
 | 
						|
    test "sets correct totalItems when followers are hidden but the follower counter is not" 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})
 | 
						|
      user = Map.merge(user, %{hide_followers_count: false, hide_followers: true})
 | 
						|
      assert %{"totalItems" => 1} = 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})
 | 
						|
      user = Map.merge(user, %{hide_follows_count: true, hide_follows: true})
 | 
						|
      assert %{"totalItems" => 0} = UserView.render("following.json", %{user: user})
 | 
						|
    end
 | 
						|
 | 
						|
    test "sets correct totalItems when follows are hidden but the follow counter is not" 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})
 | 
						|
      user = Map.merge(user, %{hide_follows_count: false, hide_follows: true})
 | 
						|
      assert %{"totalItems" => 1} = UserView.render("following.json", %{user: user})
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |