Packages
plug
0.4.1
1.20.3
1.20.2
1.20.1
retired
1.20.0
retired
1.19.5
1.19.4
1.19.3
1.19.2
1.19.1
1.19.0
1.18.5
1.18.4
1.18.3
1.18.2
1.18.1
1.18.0
1.17.4
1.17.3
1.17.2
1.17.1
1.17.0
1.16.6
1.16.5
1.16.4
1.16.3
1.16.2
1.16.1
1.16.0
1.15.6
1.15.5
1.15.4
1.15.3
1.15.2
1.15.1
1.15.0
1.14.2
1.14.1
1.14.0
1.13.6
1.13.5
1.13.4
1.13.3
1.13.2
1.13.1
retired
1.13.0
retired
1.12.1
1.12.0
1.11.1
1.11.0
1.10.4
1.10.3
1.10.2
1.10.1
1.10.0
1.9.0
1.8.3
1.8.2
1.8.1
1.8.0
1.7.2
1.7.1
1.7.0
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.1
1.5.0
1.5.0-rc.2
1.5.0-rc.1
1.5.0-rc.0
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.4.0-rc.0
1.3.6
1.3.5
1.3.4
1.3.3
1.3.2
1.3.1
1.3.0
1.2.6
1.2.5
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.2.0-rc.0
1.1.9
1.1.8
1.1.7
1.1.6
1.1.5
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
0.14.0
0.13.1
0.13.0
0.12.2
0.12.1
0.12.0
0.11.3
0.11.2
0.11.1
0.11.0
0.10.0
0.9.0
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.0
0.6.0
0.5.3
0.5.2
0.5.1
0.5.0
0.4.4
0.4.3
0.4.2
0.4.1
Compose web applications with functions
Security advisory:
This version has known vulnerabilities.
View advisories
Current section
Files
Jump to
Current section
Files
lib/plug/test.ex
defmodule Plug.Test do
@moduledoc """
Conveniences for testing plugs
## Examples
This module can be used in your test cases:
use ExUnit.Case, async: true
use Plug.Test
and it will:
* import all functions from this module
* import all functions from `Plug.Conn`
* alias `Plug.Conn` to `Conn`
"""
@doc false
defmacro __using__(_) do
quote do
import Plug.Test
import Plug.Conn
alias Plug.Conn
end
end
alias Plug.Conn
@doc """
Creates a test connection.
The request `method` and `path` must be given as required
arguments. `method` may be any value that implements `to_string/1`
and it will properly converted and normalized.
The `params_or_body` field must be one of:
* `nil` - meaning there is no body;
* a binary - containing a request body. For such cases, `:headers`
must be given as option with a content-type;
* a map or list - containing the parameters which will automatically
set the content-type to multipart. The map or list may be contain
other lists or maps and all entries keywords and maps will be
normalized to string keys;
The only option supported so far is `:headers` which expects a
list of headers.
"""
@spec conn(String.Chars.t, binary, binary | list | map | nil, [headers: Conn.headers]) :: Conn.t
def conn(method, path, params_or_body \\ nil, opts \\ []) do
Plug.Adapters.Test.Conn.conn(method, path, params_or_body, opts)
end
@doc """
Puts a new request header.
Previous entries of the same headers are removed.
"""
@spec put_req_header(Conn.t, binary, binary) :: Conn.t
def put_req_header(%Conn{req_headers: headers} = conn, key, value) when is_binary(key) and is_binary(value) do
%{conn | req_headers: :lists.keystore(key, 1, headers, {key, value})}
end
@doc """
Deletes a request header.
"""
@spec delete_req_header(Conn.t, binary) :: Conn.t
def delete_req_header(%Conn{req_headers: headers} = conn, key) when is_binary(key) do
%{conn | req_headers: :lists.keydelete(key, 1, headers)}
end
@doc """
Puts a request cookie.
"""
@spec put_req_cookie(Conn.t, binary, binary) :: Conn.t
def put_req_cookie(conn, key, value) when is_binary(key) and is_binary(value) do
conn = delete_req_cookie(conn, key)
%{conn | req_headers: [{"cookie", "#{key}=#{value}"}|conn.req_headers]}
end
@doc """
Deletes a request cookie.
"""
@spec delete_req_cookie(Conn.t, binary) :: Conn.t
def delete_req_cookie(%Conn{req_cookies: %Plug.Conn.Unfetched{}} = conn, key) when is_binary(key) do
key = "#{key}="
size = byte_size(key)
fun = &match?({"cookie", value} when binary_part(value, 0, size) == key, &1)
%{conn | req_headers: Enum.reject(conn.req_headers, fun)}
end
def delete_req_cookie(_conn, key) when is_binary(key) do
raise ArgumentError, message: "cannot put/delete request cookies after cookies were fetched"
end
end