defmodule Pages.Driver.Conn do # @related [drivers](lib/pages/driver.ex) @moduledoc """ A page driver for interacting with Phoenix controllers. """ @behaviour Pages.Driver defstruct ~w[conn]a @type t() :: %__MODULE__{ conn: Plug.Conn.t() } def new(%Plug.Conn{state: :unset} = conn), do: conn |> Pages.Shim.__dispatch(:get, conn.request_path, conn.path_params) |> Pages.new() def new(%Plug.Conn{status: 302} = conn) do redirect = Phoenix.ConnTest.redirected_to(conn) __struct__(conn: conn) |> visit(redirect) end def new(%Plug.Conn{} = conn), do: __struct__(conn: conn) # # # def visit(%__MODULE__{} = page, path) do page.conn |> Pages.Shim.__dispatch(:get, path) |> Pages.new() end # # # defimpl String.Chars do def to_string(%Pages.Driver.Conn{conn: %Plug.Conn{status: 200} = conn}), do: Phoenix.ConnTest.html_response(conn, 200) end end