# double_down v0.60.4 - Table of Contents

Builds on the Mox pattern — generates behaviours and dispatch facades
from `defcallback` declarations — and adds stateful test doubles powerful
enough to test Ecto.Repo operations without a database.

## Pages

- Introduction
  - [DoubleDown](readme.md)
  - [Getting Started](getting-started.md)

- Guides
  - [Testing](testing.md)
  - [Phoenix Testing Without a Database](phoenix.md)
  - [Dynamic Facades](dynamic.md)
  - [Logging](logging.md)
  - [Process Sharing](process-sharing.md)
  - [Repo](repo.md)
  - [Repo Test Doubles](repo-doubles.md)
  - [Repo Testing Patterns](repo-testing.md)
  - [Incremental Migration](migration.md)

- About
  - [Changelog](changelog.md)

## Modules

- [DoubleDown.Contract.Dispatch.Defer](DoubleDown.Contract.Dispatch.Defer.md): A deferred execution marker.
- [DoubleDown.Contract.Dispatch.HandlerMeta](DoubleDown.Contract.Dispatch.HandlerMeta.md): Structs describing the three handler types that can be installed for
a contract via `DoubleDown.Testing`.
- [DoubleDown.Contract.Dispatch.HandlerMeta.Module](DoubleDown.Contract.Dispatch.HandlerMeta.Module.md): Handler meta for a module-based implementation.
- [DoubleDown.Contract.Dispatch.HandlerMeta.Stateful](DoubleDown.Contract.Dispatch.HandlerMeta.Stateful.md): Handler meta for a stateful (4/5-arity) function handler.
- [DoubleDown.Contract.Dispatch.HandlerMeta.Stateless](DoubleDown.Contract.Dispatch.HandlerMeta.Stateless.md): Handler meta for a stateless 3-arity function handler `(contract, operation, args)`.
- [DoubleDown.Contract.Dispatch.Keys](DoubleDown.Contract.Dispatch.Keys.md): Centralised NimbleOwnership key helpers for DoubleDown dispatch.
- [DoubleDown.Contract.Dispatch.Passthrough](DoubleDown.Contract.Dispatch.Passthrough.md): Sentinel value returned from expect responders to delegate to the
fallback/fake instead of returning a result directly.
- [DoubleDown.Contract.Dispatch.StatefulHandler](DoubleDown.Contract.Dispatch.StatefulHandler.md): Behaviour for stateful fake handler modules.
- [DoubleDown.Contract.Dispatch.StatelessHandler](DoubleDown.Contract.Dispatch.StatelessHandler.md): Behaviour for stateless stub handler modules.
- [DoubleDown.Contract.Dispatch.Types](DoubleDown.Contract.Dispatch.Types.md): Shared type definitions for DoubleDown dispatch.
- [DoubleDown.Double.CanonicalHandlerState](DoubleDown.Double.CanonicalHandlerState.md): State for `DoubleDown.Double.canonical_handler/5`.
- [DoubleDown.Double.Dispatch](DoubleDown.Double.Dispatch.md): Dispatch-time logic for `DoubleDown.Double`'s canonical handler.
- [DoubleDown.Double.Types](DoubleDown.Double.Types.md): Shared type definitions for per-operation functions in `DoubleDown.Double`.
- [DoubleDown.DynamicFacade.Cover](DoubleDown.DynamicFacade.Cover.md): Ensures DynamicFacade-shimmed modules retain `:cover` instrumentation.

- Core
  - [DoubleDown.BehaviourFacade](DoubleDown.BehaviourFacade.md): Generates a dispatch facade for a vanilla Elixir `@behaviour` module.
  - [DoubleDown.Contract](DoubleDown.Contract.md): Macro for defining contract behaviours with `defcallback` declarations.
  - [DoubleDown.ContractFacade](DoubleDown.ContractFacade.md): Generates a dispatch facade for a `DoubleDown.Contract`.
  - [DoubleDown.DynamicFacade](DoubleDown.DynamicFacade.md): Dynamic dispatch facades for existing modules.

- Testing
  - [DoubleDown.Double](DoubleDown.Double.md): Mox-style expect/stub handler declarations with immediate effect.
  - [DoubleDown.Log](DoubleDown.Log.md): Log-based expectation matcher for DoubleDown dispatch logs.
  - [DoubleDown.Testing](DoubleDown.Testing.md): Test helpers for DoubleDown contracts.

- Repo
  - [DoubleDown.Repo](DoubleDown.Repo.md): Repo contract for common Ecto Repo operations.
  - [DoubleDown.Repo.InMemory](DoubleDown.Repo.InMemory.md): Stateful in-memory Repo fake (closed-world). **Recommended default.**
  - [DoubleDown.Repo.OpenInMemory](DoubleDown.Repo.OpenInMemory.md): Stateful in-memory Repo fake (open-world).
  - [DoubleDown.Repo.Stub](DoubleDown.Repo.Stub.md): Stateless stub for `DoubleDown.Repo`.

- Internals
  - [DoubleDown.Contract.Dispatch](DoubleDown.Contract.Dispatch.md): Dispatch resolution for DoubleDown contracts.
  - [DoubleDown.Repo.Impl.MultiStepper](DoubleDown.Repo.Impl.MultiStepper.md): Steps through an `Ecto.Multi` without a real database transaction.

