# Pleroma: A lightweight social networking server # Copyright © 2017-2020 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Preload.Providers.TimelineTest do use Pleroma.DataCase import Pleroma.Factory alias Pleroma.Web.CommonAPI alias Pleroma.Web.Preload.Providers.Timelines @public_url :"/api/v1/timelines/public" describe "unauthenticated timeliness when restricted" do setup do svd_config = Pleroma.Config.get([:restrict_unauthenticated, :timelines]) Pleroma.Config.put([:restrict_unauthenticated, :timelines], %{local: true, federated: true}) on_exit(fn -> Pleroma.Config.put([:restrict_unauthenticated, :timelines], svd_config) end) :ok end test "return nothing" do tl_data = Timelines.generate_terms(%{}) refute Map.has_key?(tl_data, "/api/v1/timelines/public") end end describe "unauthenticated timeliness when unrestricted" do setup do svd_config = Pleroma.Config.get([:restrict_unauthenticated, :timelines]) Pleroma.Config.put([:restrict_unauthenticated, :timelines], %{ local: false, federated: false }) on_exit(fn -> Pleroma.Config.put([:restrict_unauthenticated, :timelines], svd_config) end) {:ok, user: insert(:user)} end test "returns the timeline when not restricted" do assert Timelines.generate_terms(%{}) |> Map.has_key?(@public_url) end test "returns public items", %{user: user} do {:ok, _} = CommonAPI.post(user, %{"status" => "it's post 1!"}) {:ok, _} = CommonAPI.post(user, %{"status" => "it's post 2!"}) {:ok, _} = CommonAPI.post(user, %{"status" => "it's post 3!"}) assert Timelines.generate_terms(%{}) |> Map.fetch!(@public_url) |> Enum.count() == 3 end test "does not return non-public items", %{user: user} do {:ok, _} = CommonAPI.post(user, %{"status" => "it's post 1!", "visibility" => "unlisted"}) {:ok, _} = CommonAPI.post(user, %{"status" => "it's post 2!", "visibility" => "direct"}) {:ok, _} = CommonAPI.post(user, %{"status" => "it's post 3!"}) assert Timelines.generate_terms(%{}) |> Map.fetch!(@public_url) |> Enum.count() == 1 end end end