PaperTiger.Store.WebhookDeliveries (PaperTiger v0.9.21)

View Source

In-memory store for webhook deliveries in test mode.

When webhook_mode: :collect is configured, webhooks are stored here instead of being delivered via HTTP. Tests can then inspect what webhooks would have been delivered.

Data is namespace-scoped for test isolation with async: true.

Summary

Functions

Returns a specification to start this module under a supervisor.

Clears all webhook_deliverys from the store (all namespaces).

Clears all webhook_deliveries for a specific namespace.

Counts total webhook_deliveries in current namespace.

Deletes a webhook_delivery from the store.

Retrieves a webhook_delivery by ID.

Gets all recorded webhook deliveries for the current namespace.

Gets webhook deliveries filtered by event type.

Inserts a webhook_delivery into the store.

Lists all webhook_deliveries with optional pagination.

Returns all items in a specific namespace.

Returns the ID prefix for this resource.

Records a webhook delivery for later inspection.

Starts the webhook_delivery store GenServer.

Returns the ETS table name for this store.

Updates a webhook_delivery in the store.

Functions

child_spec(init_arg)

Returns a specification to start this module under a supervisor.

See Supervisor.

clear()

@spec clear() :: :ok

Clears all webhook_deliverys from the store (all namespaces).

Serialized write - goes through GenServer.

Useful for test cleanup. Note: This clears ALL data, not just the current namespace. For namespace-specific cleanup, use clear_namespace/1.

clear_namespace(namespace)

@spec clear_namespace(pid() | :global) :: :ok

Clears all webhook_deliveries for a specific namespace.

Used by PaperTiger.Test to clean up after each test.

count()

@spec count() :: non_neg_integer()

Counts total webhook_deliveries in current namespace.

Direct ETS access - does not go through GenServer.

delete(id)

@spec delete(String.t()) :: :ok

Deletes a webhook_delivery from the store.

Serialized write - goes through GenServer. Data is scoped to the current test namespace.

get(id)

@spec get(String.t()) :: {:ok, map()} | {:error, :not_found}

Retrieves a webhook_delivery by ID.

Direct ETS access - does not go through GenServer. Data is scoped to the current test namespace.

get_all()

Gets all recorded webhook deliveries for the current namespace.

Returns deliveries in chronological order (oldest first).

get_by_type(type_pattern)

Gets webhook deliveries filtered by event type.

Examples

# Get all customer.created events
get_by_type("customer.created")

# Get all invoice events
get_by_type("invoice.*")

insert(item)

@spec insert(map()) :: {:ok, map()}

Inserts a webhook_delivery into the store.

Serialized write - goes through GenServer to prevent race conditions. Data is scoped to the current test namespace.

list(opts \\ %{})

@spec list(keyword() | map()) :: PaperTiger.List.t()

Lists all webhook_deliveries with optional pagination.

Direct ETS access - does not go through GenServer. Data is scoped to the current test namespace.

Options

  • :limit - Number of items (default: 10, max: 100)
  • :starting_after - Cursor for pagination
  • :ending_before - Reverse cursor

list_namespace(namespace)

@spec list_namespace(pid() | :global) :: [map()]

Returns all items in a specific namespace.

Useful for debugging test isolation.

prefix()

@spec prefix() :: String.t() | nil

Returns the ID prefix for this resource.

record(event, webhook)

Records a webhook delivery for later inspection.

Called by the telemetry handler when in :collect mode.

start_link(opts \\ [])

@spec start_link(keyword()) :: GenServer.on_start()

Starts the webhook_delivery store GenServer.

table_name()

@spec table_name() :: atom()

Returns the ETS table name for this store.

update(item)

@spec update(map()) :: {:ok, map()}

Updates a webhook_delivery in the store.

Serialized write - goes through GenServer. Data is scoped to the current test namespace.