# double_down v0.58.0 - 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`. - 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.