Metadata-Version: 2.3
Name: fingest
Version: 0.0.3
Summary: Pytest plugin that allows you to easily define data-driven fixtures based on external files.
License: MIT
Keywords: pytest,plugin,fixtures,data-driven
Author: Tim Fiedler
Author-email: tim@0x68.de
Requires-Python: >=3.11
Classifier: Framework :: Pytest
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Requires-Dist: lxml (>=5.4.0,<6.0.0)
Requires-Dist: pytest (>=8.3.5,<9.0.0)
Requires-Dist: pytest-cov (>=6.2.1,<7.0.0)
Project-URL: Homepage, https://github.com/0x68/fingest
Project-URL: Issues, https://github.com/0x68/fingest/issues
Project-URL: Repository, https://github.com/0x68/fingest
Description-Content-Type: text/markdown

# Pytest Fingest Fixture Plugin

This Pytest plugin allows you to easily define data-driven fixtures based on external files. It supports `JSON`, `CSV`, and `XML` data sources, and can automatically instantiate Python classes or functions using this data.

## Features

- Automatic registration of data-backed fixtures
- Supports JSON, CSV, and XML file formats
- Optional descriptions for improved debugging
- Configurable base data path via `pytest.ini`

---

## Installation

Place the plugin code inside your project (e.g. in `conftest.py`) or install it as a standalone plugin.

---

## Configuration

Add the following to your `pytest.ini`:

```ini
[pytest]
fingest_fixture_path = data  # Base directory for fixture data files

```

## Example Conftest

```python
from fingest.plugin import data_fixture
from fingest.types import BaseFixture, JSONFixture


@data_fixture("test.json", description="JSON File Foo Bar")
class JsonData(JSONFixture): ...


@data_fixture("test.xml", description="XML File Foo Bar")
class XMLData(BaseFixture): ...


@data_fixture("test.csv", description="CSV File FOO Bar")
class CSV(BaseFixture):
    """CSV File"""

    ...


@data_fixture("test.json", description="Func Bases")
def json_test_file(data):
    """Json File in func"""
    return data
```

## Example Test

```python

def test_data_fixture(JsonData):
    assert JsonData.data.get("Foo") == "Bar"


def test_data_fixtute(JsonData):
    assert JsonData.length() == 1


def test_xml(XMLData):
    assert XMLData


def test_csv(CSV):
    assert len(CSV.data) == 5


def test_json_func(json_test_file):
    assert json_test_file.get("Foo") == "Bar"

```

