Helpers for testing gh_ex consumers with Req.Test.
client/1 installs a named Req.Test stub and disables retries so a stubbed
transient failure returns immediately. The response builders cover common
GitHub metadata, conditional requests, and rate-limit classifications.
Req.Test uses Plug connections. Add Plug to the consuming application's
test dependencies when using this module:
{:plug, "~> 1.16", only: :test}
Summary
Types
Functions
@spec client(term()) :: GhEx.Client.t()
Builds a retry-disabled client that sends requests through a named
Req.Test stub.
Examples
iex> client = GhEx.Testing.client(MyApp.GitHubStub)
iex> client.req_options
[plug: {Req.Test, MyApp.GitHubStub}, retry: false]
Sends a JSON response with a standard GitHub core rate-limit snapshot.
Respects a response status already set on the connection, as
Req.Test.json/2 does.
Examples
iex> plug = fn conn -> GhEx.Testing.json(conn, %{ok: true}) end
iex> response = Req.get!(url: "https://example.test", plug: plug, retry: false)
iex> response.body
%{"ok" => true}
iex> response.headers["x-ratelimit-remaining"]
["4999"]
Sends an empty 304 Not Modified response.
Examples
iex> plug = &GhEx.Testing.not_modified/1
iex> response = Req.get!(url: "https://example.test", plug: plug, retry: false)
iex> response.status
304
@spec rate_limited(term(), rate_limit_kind()) :: term()
Sends one of GitHub's rate-limit response shapes.
:retry_aftersends a429withretry-after: 1.:primarysends a403with an exhausted core bucket and reset time.:secondarysends a body-only secondary-limit403.
Examples
iex> plug = fn conn -> GhEx.Testing.rate_limited(conn, :secondary) end
iex> response = Req.get!(url: "https://example.test", plug: plug, retry: false)
iex> response.status
403
iex> response.body["message"] =~ "secondary rate limit"
true