Metadata-Version: 2.4
Name: gruncellka-porto-features
Version: 0.3.0
Summary: Structured BDD contracts for Porto SDK — shared Gherkin scenarios and JSON fixtures
Author: Oleksandr Tsyba
License-Expression: Apache-2.0
Project-URL: Homepage, https://github.com/gruncellka/porto-features
Project-URL: Repository, https://github.com/gruncellka/porto-features
Project-URL: Issues, https://github.com/gruncellka/porto-features/issues
Project-URL: Changelog, https://github.com/gruncellka/porto-features/blob/main/CHANGELOG.md
Keywords: postal,post,shipping,logistics,deutsche post,ukrposhta,la poste,swiss post,pricing,postage,tariffs,zones,restrictions,validation,bdd,gherkin,cucumber,features,fixtures,contract tests,sdk,porto-features,porto-sdk
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Requires-Python: >=3.13
Description-Content-Type: text/markdown
License-File: LICENSE
Provides-Extra: dev
Requires-Dist: bump2version>=1.0.0; extra == "dev"
Requires-Dist: gherkin-official<23.0.0,>=22.0.0; extra == "dev"
Requires-Dist: gherlint>=0.4.0; extra == "dev"
Requires-Dist: pre-commit>=3.5.0; extra == "dev"
Requires-Dist: pytest>=8.0.0; extra == "dev"
Requires-Dist: pytest-cov>=5.0.0; extra == "dev"
Requires-Dist: pyyaml>=6.0.0; extra == "dev"
Requires-Dist: types-PyYAML>=6.0.0; extra == "dev"
Requires-Dist: ruff>=0.15.5; extra == "dev"
Requires-Dist: mypy>=1.0.0; extra == "dev"
Dynamic: license-file

# Porto Features

[![validation](https://github.com/gruncellka/porto-features/actions/workflows/validation.yml/badge.svg)](https://github.com/gruncellka/porto-features/actions/workflows/validation.yml)
[![codecov](https://codecov.io/gh/gruncellka/porto-features/branch/main/graph/badge.svg)](https://codecov.io/gh/gruncellka/porto-features)

**Structured BDD contracts for Porto SDK** — shared Gherkin scenarios and JSON fixtures.

---

## Install

```bash
npm install -D @gruncellka/porto-features
pip install "gruncellka-porto-features[dev]"
```

Shipped paths: `porto_features/features/**/*.feature` · `porto_features/matrix/*.yaml` · `porto_features/fixtures/**/*.json`

---

## Validate locally

```bash
make
make quality
make test-cov
```

---

## Documentation

- **[docs/vocabulary.md](docs/vocabulary.md)** — canonical Gherkin steps (`porto_id` input)
- **[docs/scenario-policy.md](docs/scenario-policy.md)** — tag policy, paid adapter rules, fixtures
- **[docs/matrix.md](docs/matrix.md)** — coverage index, `cell_id` / `case_id`, Lab sync

Catalog facts and mapping tables live in **porto-data** — not duplicated here.

---

## Feature layout

```text
porto_features/features/
├── sdk/
│   ├── core/                    # @sdk @core — cross-operator policy, CLI, metadata
│   └── providers/{operator}/    # @sdk @operator:{id} — operator catalog scenarios
└── adapters/{operator}/         # @adapters @operator:{id} @wire:{adapter}
```

See [docs/scenario-policy.md](docs/scenario-policy.md) for tag and path rules.

🔳 gruncellka
