Metadata-Version: 2.1
Name: pytest-aioboto3
Version: 0.5.0
Summary: Aioboto3 Pytest with Moto
Home-page: https://github.com/phillipuniverse/pytest-aioboto3
License: WTFPL
Keywords: pytest,aioboto3,moto
Author: Shipwell Engineering
Requires-Python: >=3.8,<4.0
Classifier: Framework :: Pytest
Classifier: License :: Other/Proprietary License
Classifier: License :: Public Domain
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Requires-Dist: aioboto3 (>=12.0.0)
Requires-Dist: moto[s3,server] (>=4.2.3)
Requires-Dist: requests (>=2.0)
Requires-Dist: types-aiobotocore[s3] (>=2.7.0)
Project-URL: Bug Tracker, https://github.com/phillipuniverse/pytest-aioboto3/issues
Project-URL: Repository, https://github.com/phillipuniverse/pytest-aioboto3
Description-Content-Type: text/markdown

# aioboto3 mocking with Pytest and Moto

This is a Pytest plugin that sets up a Moto background service and patch the aioboto3 session to forward all calls to it. This is designed to work against any calls that create an `aiobotocore3.Session()` or `botocore3.Session()` automatically. This means you should not have to change any implementation code for how you are managing the aioboto3 `Session`.

Most of the code for this came from the aioboto3 tests themselves at https://github.com/terrycain/aioboto3/blob/92a7a9b8a32615ab6a9ea51ef360475ede94bb1f/tests/mock_server.py. Divergence in this gist:

- Only initializes a moto server for S3
- Includes a sustainable pattern for adding additional AWS mocked services
- Fully type-hinted

## Running the example test

- Poetry 1.6+
- Python 3.10+ (although probably Python 3.7+ will work)

```
poetry install
poetry run pytest
```

Example output:

```console
=========================================================================================================== test session starts ===========================================================================================================
platform darwin -- Python 3.11.6, pytest-7.4.3, pluggy-1.3.0
rootdir: /Users/phillip/pytest-aioboto3
configfile: pyproject.toml
testpaths: tests
plugins: asyncio-0.21.1, aioboto3-0.1.0
asyncio: mode=Mode.AUTO
collected 1 item

tests/test_s3.py .                                                                                                                                                                                                                  [100%]

============================================================================================================ 1 passed in 0.94s ============================================================================================================
```

## Installation

`pip install pytest-aioboto3`

## Usage

Inject the included `aioboto3_s3_client` fixture:
```python
async def test_aio_aws_bucket_access(aioboto3_s3_client: S3Client) -> None:
    resp = await aioboto3_s3_client.list_buckets()
    ...
```

Or create a new `Session` yourself by injecting the `moto_patch_session` fixture:
```python
async def test_some_s3_thing(moto_patch_session: None) -> None:
    session = aioboto3.Session(region_name="us-east-1")
    async with session.client("s3", region_name="us-east-1") as client:  # type: S3Client
        yield client
```

