Metadata-Version: 2.4
Name: provide-testkit
Version: 0.4.0
Summary: Testing utilities and fixtures for the provide ecosystem.
Author-email: Tim Perkins <code@tim.life>
Maintainer-email: "provide.io" <code@provide.io>
License-Expression: Apache-2.0
Project-URL: Homepage, https://foundry.provide.io/testkit/
Project-URL: Documentation, https://foundry.provide.io/testkit/
Project-URL: Repository, https://github.com/provide-io/provide-testkit
Project-URL: Issues, https://github.com/provide-io/provide-testkit/issues
Keywords: testing,fixtures,mocking,pytest,provide
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Software Development :: Testing
Classifier: Topic :: Software Development :: Testing :: Mocking
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Typing :: Typed
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: provide-foundation>=0.3.29
Requires-Dist: attrs>=25.4.0
Requires-Dist: click>=8.3.1
Requires-Dist: pytest>=9.0.2
Requires-Dist: pytest-asyncio>=1.3.0
Requires-Dist: pytest-cov>=6.0.0
Requires-Dist: pytest-mock>=3.15.1
Requires-Dist: pytest-xdist>=3.8.0
Requires-Dist: mkdocs-material>=9.7.1
Provides-Extra: quality
Requires-Dist: ruff; extra == "quality"
Requires-Dist: mypy; extra == "quality"
Requires-Dist: bandit; extra == "quality"
Requires-Dist: coverage[toml]; extra == "quality"
Requires-Dist: radon; extra == "quality"
Requires-Dist: interrogate; extra == "quality"
Requires-Dist: mutmut; extra == "quality"
Provides-Extra: typecheck
Requires-Dist: mypy; extra == "typecheck"
Requires-Dist: pyright; extra == "typecheck"
Requires-Dist: pyre-check; extra == "typecheck"
Requires-Dist: pyre-extensions; extra == "typecheck"
Requires-Dist: pyrefly; extra == "typecheck"
Requires-Dist: ty; extra == "typecheck"
Requires-Dist: types-cryptography; extra == "typecheck"
Requires-Dist: types-grpcio; extra == "typecheck"
Requires-Dist: types-toml; extra == "typecheck"
Requires-Dist: types-protobuf; extra == "typecheck"
Requires-Dist: types-click; extra == "typecheck"
Requires-Dist: types-pyyaml; extra == "typecheck"
Requires-Dist: types-psutil; extra == "typecheck"
Provides-Extra: advanced-testing
Requires-Dist: hypothesis; extra == "advanced-testing"
Requires-Dist: freezegun; extra == "advanced-testing"
Requires-Dist: behave; extra == "advanced-testing"
Requires-Dist: pytest-benchmark; extra == "advanced-testing"
Requires-Dist: pytest-testmon; extra == "advanced-testing"
Requires-Dist: pytest-json-report; extra == "advanced-testing"
Provides-Extra: profiling
Requires-Dist: memray; extra == "profiling"
Requires-Dist: viztracer; extra == "profiling"
Provides-Extra: transport
Requires-Dist: httpx>=0.28.1; extra == "transport"
Requires-Dist: pytest-httpx; extra == "transport"
Requires-Dist: h2; extra == "transport"
Provides-Extra: crypto
Requires-Dist: cryptography>=45.0.7; extra == "crypto"
Requires-Dist: types-cryptography; extra == "crypto"
Provides-Extra: process
Requires-Dist: psutil>=7.0.0; extra == "process"
Requires-Dist: setproctitle>=1.3.7; extra == "process"
Provides-Extra: grpc
Requires-Dist: grpc-stubs; extra == "grpc"
Requires-Dist: grpcio>=1.76.0; extra == "grpc"
Requires-Dist: grpcio-tools; extra == "grpc"
Requires-Dist: grpcio-health-checking; extra == "grpc"
Provides-Extra: build
Requires-Dist: hatch; extra == "build"
Requires-Dist: twine; extra == "build"
Requires-Dist: uv; extra == "build"
Requires-Dist: pre-commit; extra == "build"
Provides-Extra: docs
Requires-Dist: mkdocs; extra == "docs"
Requires-Dist: mkdocs-material; extra == "docs"
Requires-Dist: mkdocstrings[python]; extra == "docs"
Requires-Dist: mkdocs-autorefs; extra == "docs"
Requires-Dist: mike; extra == "docs"
Requires-Dist: mkdocs-gen-files; extra == "docs"
Requires-Dist: mkdocs-literate-nav; extra == "docs"
Requires-Dist: mkdocs-section-index; extra == "docs"
Requires-Dist: markdown-callouts; extra == "docs"
Requires-Dist: markdown-exec; extra == "docs"
Requires-Dist: markdown-include; extra == "docs"
Requires-Dist: pymdown-extensions; extra == "docs"
Requires-Dist: mkdocs-git-revision-date-localized-plugin; extra == "docs"
Requires-Dist: mkdocs-macros-plugin; extra == "docs"
Requires-Dist: mkdocs-include-markdown-plugin; extra == "docs"
Requires-Dist: mkdocs-coverage; extra == "docs"
Requires-Dist: mkdocs-llmstxt; extra == "docs"
Requires-Dist: mkdocs-minify-plugin; extra == "docs"
Requires-Dist: mkdocs-redirects; extra == "docs"
Requires-Dist: linkchecker; extra == "docs"
Requires-Dist: mkdocs-htmlproofer-plugin; extra == "docs"
Requires-Dist: pygments; extra == "docs"
Requires-Dist: griffe; extra == "docs"
Requires-Dist: watchdog; extra == "docs"
Requires-Dist: pyyaml; extra == "docs"
Provides-Extra: utils
Requires-Dist: pyyaml; extra == "utils"
Requires-Dist: reuse; extra == "utils"
Requires-Dist: tabulate; extra == "utils"
Requires-Dist: sapp; extra == "utils"
Provides-Extra: fuzzing
Requires-Dist: pynguin; extra == "fuzzing"
Provides-Extra: security
Requires-Dist: bandit; extra == "security"
Requires-Dist: safety; extra == "security"
Requires-Dist: pip-audit; extra == "security"
Provides-Extra: standard
Requires-Dist: provide-testkit[crypto,process,quality,transport]; extra == "standard"
Provides-Extra: grpc-dev
Requires-Dist: provide-testkit[grpc,standard,typecheck]; extra == "grpc-dev"
Provides-Extra: pyvider-dev
Requires-Dist: provide-testkit[advanced-testing,build,grpc,profiling,security,standard,typecheck]; extra == "pyvider-dev"
Provides-Extra: all
Requires-Dist: provide-testkit[advanced-testing,build,crypto,docs,fuzzing,grpc,process,profiling,quality,security,transport,typecheck,utils]; extra == "all"
Provides-Extra: dev
Requires-Dist: provide-testkit[advanced-testing,quality]; extra == "dev"
Provides-Extra: docs-standalone
Requires-Dist: provide-testkit[docs]; extra == "docs-standalone"
Dynamic: license-file

# 🧪✅ Provide TestKit

[![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
[![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/)
[![uv](https://img.shields.io/badge/uv-package_manager-FF6B35.svg)](https://github.com/astral-sh/uv)
[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
[![CI](https://github.com/provide-io/provide-testkit/actions/workflows/ci.yml/badge.svg)](https://github.com/provide-io/provide-testkit/actions)

**Comprehensive testing utilities and fixtures for the [provide ecosystem](https://github.com/provide-io)**

TestKit provides a unified testing framework designed specifically for applications built with `provide-foundation`. It offers intelligent context detection, extensive fixture libraries, and seamless integration with popular testing frameworks.

## ✨ Key Features

- 🔍 **Smart Context Detection** - Automatically detects testing environments
- 🏗️ **Foundation Integration** - Native support for provide-foundation components
- 🧪 **Comprehensive Fixtures** - Pre-built fixtures for common testing scenarios
- 🚀 **CLI Testing Support** - Advanced utilities for testing Click-based applications
- 🔐 **Crypto Testing** - Certificate and key generation utilities
- 🌐 **Transport Mocking** - HTTP, WebSocket, and network testing tools
- 📁 **File System Utilities** - Temporary files, directories, and archive testing
- ⚡ **Async Support** - Full async/await testing capabilities
- 🧵 **Thread Safety Testing** - Multi-threading test utilities

## Quick Start

> **Note**: provide-testkit is in pre-release (v0.x.x). APIs and features may change before 1.0 release.

1. Install: `uv add provide-testkit`
2. Read the [Quick Start guide](https://github.com/provide-io/provide-testkit/blob/main/docs/getting-started/quick-start.md).
3. Explore examples in [examples/README.md](https://github.com/provide-io/provide-testkit/blob/main/examples/README.md).

## Documentation
- [Documentation index](https://github.com/provide-io/provide-testkit/blob/main/docs/index.md)
- [Examples](https://github.com/provide-io/provide-testkit/blob/main/examples/README.md)

## Development

### Quick Start

```bash
# Set up environment
uv sync

# Run common tasks
we run test       # Run tests
we run lint       # Check code
we run format     # Format code
we tasks          # See all available commands
```

### Available Commands

This project uses `wrknv` for task automation. Run `we tasks` to see all available commands.

**Common tasks:**
- `we run test` - Run all tests
- `we run test.coverage` - Run tests with coverage
- `we run test.parallel` - Run tests in parallel
- `we run lint` - Check code quality
- `we run lint.fix` - Auto-fix linting issues
- `we run format` - Format code
- `we run typecheck` - Run type checker

See [CLAUDE.md](https://github.com/provide-io/provide-testkit/blob/main/CLAUDE.md) for detailed development instructions and architecture information.

## Contributing
See [CONTRIBUTING.md](https://github.com/provide-io/provide-testkit/blob/main/CONTRIBUTING.md) for contribution guidelines.

## License
See [LICENSE](https://github.com/provide-io/provide-testkit/blob/main/LICENSE) for license details.

Copyright (c) provide.io LLC.
