91 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
	
		
			3.4 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.PlugTest do
 | |
|   @moduledoc "Tests for the functionality added via `use Pleroma.Web, :plug`"
 | |
| 
 | |
|   alias Pleroma.Plugs.ExpectAuthenticatedCheckPlug
 | |
|   alias Pleroma.Plugs.ExpectPublicOrAuthenticatedCheckPlug
 | |
|   alias Pleroma.Plugs.PlugHelper
 | |
| 
 | |
|   import Mock
 | |
| 
 | |
|   use Pleroma.Web.ConnCase
 | |
| 
 | |
|   describe "when plug is skipped, " do
 | |
|     setup_with_mocks(
 | |
|       [
 | |
|         {ExpectPublicOrAuthenticatedCheckPlug, [:passthrough], []}
 | |
|       ],
 | |
|       %{conn: conn}
 | |
|     ) do
 | |
|       conn = ExpectPublicOrAuthenticatedCheckPlug.skip_plug(conn)
 | |
|       %{conn: conn}
 | |
|     end
 | |
| 
 | |
|     test "it neither adds plug to called plugs list nor calls `perform/2`, " <>
 | |
|            "regardless of :if_func / :unless_func options",
 | |
|          %{conn: conn} do
 | |
|       for opts <- [%{}, %{if_func: fn _ -> true end}, %{unless_func: fn _ -> false end}] do
 | |
|         ret_conn = ExpectPublicOrAuthenticatedCheckPlug.call(conn, opts)
 | |
| 
 | |
|         refute called(ExpectPublicOrAuthenticatedCheckPlug.perform(:_, :_))
 | |
|         refute PlugHelper.plug_called?(ret_conn, ExpectPublicOrAuthenticatedCheckPlug)
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   describe "when plug is NOT skipped, " do
 | |
|     setup_with_mocks([{ExpectAuthenticatedCheckPlug, [:passthrough], []}]) do
 | |
|       :ok
 | |
|     end
 | |
| 
 | |
|     test "with no pre-run checks, adds plug to called plugs list and calls `perform/2`", %{
 | |
|       conn: conn
 | |
|     } do
 | |
|       ret_conn = ExpectAuthenticatedCheckPlug.call(conn, %{})
 | |
| 
 | |
|       assert called(ExpectAuthenticatedCheckPlug.perform(ret_conn, :_))
 | |
|       assert PlugHelper.plug_called?(ret_conn, ExpectAuthenticatedCheckPlug)
 | |
|     end
 | |
| 
 | |
|     test "when :if_func option is given, calls the plug only if provided function evals tru-ish",
 | |
|          %{conn: conn} do
 | |
|       ret_conn = ExpectAuthenticatedCheckPlug.call(conn, %{if_func: fn _ -> false end})
 | |
| 
 | |
|       refute called(ExpectAuthenticatedCheckPlug.perform(:_, :_))
 | |
|       refute PlugHelper.plug_called?(ret_conn, ExpectAuthenticatedCheckPlug)
 | |
| 
 | |
|       ret_conn = ExpectAuthenticatedCheckPlug.call(conn, %{if_func: fn _ -> true end})
 | |
| 
 | |
|       assert called(ExpectAuthenticatedCheckPlug.perform(ret_conn, :_))
 | |
|       assert PlugHelper.plug_called?(ret_conn, ExpectAuthenticatedCheckPlug)
 | |
|     end
 | |
| 
 | |
|     test "if :unless_func option is given, calls the plug only if provided function evals falsy",
 | |
|          %{conn: conn} do
 | |
|       ret_conn = ExpectAuthenticatedCheckPlug.call(conn, %{unless_func: fn _ -> true end})
 | |
| 
 | |
|       refute called(ExpectAuthenticatedCheckPlug.perform(:_, :_))
 | |
|       refute PlugHelper.plug_called?(ret_conn, ExpectAuthenticatedCheckPlug)
 | |
| 
 | |
|       ret_conn = ExpectAuthenticatedCheckPlug.call(conn, %{unless_func: fn _ -> false end})
 | |
| 
 | |
|       assert called(ExpectAuthenticatedCheckPlug.perform(ret_conn, :_))
 | |
|       assert PlugHelper.plug_called?(ret_conn, ExpectAuthenticatedCheckPlug)
 | |
|     end
 | |
| 
 | |
|     test "allows a plug to be called multiple times (even if it's in called plugs list)", %{
 | |
|       conn: conn
 | |
|     } do
 | |
|       conn = ExpectAuthenticatedCheckPlug.call(conn, %{an_option: :value1})
 | |
|       assert called(ExpectAuthenticatedCheckPlug.perform(conn, %{an_option: :value1}))
 | |
| 
 | |
|       assert PlugHelper.plug_called?(conn, ExpectAuthenticatedCheckPlug)
 | |
| 
 | |
|       conn = ExpectAuthenticatedCheckPlug.call(conn, %{an_option: :value2})
 | |
|       assert called(ExpectAuthenticatedCheckPlug.perform(conn, %{an_option: :value2}))
 | |
|     end
 | |
|   end
 | |
| end
 | 
