adachsoft/dynamic-table-contract-tests
最新稳定版本:v0.1.0
Composer 安装命令:
composer require adachsoft/dynamic-table-contract-tests
包简介
Abstract test cases (Test Suite) for adachsoft/dynamic-table-contract
README 文档
README
This package provides abstract test cases (Test Suite pattern) for the adachsoft/dynamic-table-contract library. It allows implementors of TableRepositoryInterface and QueryableRowRepositoryInterface to easily verify that their storage implementations fully comply with the contract.
Installation
composer require adachsoft/dynamic-table-contract-tests --dev
The package depends on:
adachsoft/dynamic-table-contract:^1.0adachsoft/dynamic-table-in-memory:^1.0(for test fixtures and sandboxing)phpunit/phpunit:^13.1
Usage
1. Testing TableRepositoryInterface
Extend AbstractTableRepositoryTestCase and provide your implementation via the factory method:
<?php
declare(strict_types=1);
namespace MyVendor\MyStorage\Tests\Functional;
use AdachSoft\DynamicTableContract\Repository\TableRepositoryInterface;
use AdachSoft\DynamicTableContractTests\AbstractTableRepositoryTestCase;
use PHPUnit\Framework\Attributes\Group;
#[Group('functional')]
final class MyTableRepositoryTest extends AbstractTableRepositoryTestCase
{
protected function createTableRepository(): TableRepositoryInterface
{
$store = new MyCustomStore(); // or InMemoryStore for testing
return new MyTableRepository($store);
}
}
This class runs comprehensive tests for:
save()/get()create()(with duplicate handling)getAll()update()(including ID changes and conflicts)delete()
2. Testing QueryableRowRepositoryInterface
Extend AbstractQueryableRowRepositoryTestCase. The base class automatically prepares a test table (test_table with name and age columns) using RepositoryTestFixtureFactory.
<?php
declare(strict_types=1);
namespace MyVendor\MyStorage\Tests\Functional;
use AdachSoft\DynamicTableContract\Query\Repository\QueryableRowRepositoryInterface;
use AdachSoft\DynamicTableContractTests\AbstractQueryableRowRepositoryTestCase;
use PHPUnit\Framework\Attributes\Group;
#[Group('functional')]
final class MyRowRepositoryTest extends AbstractQueryableRowRepositoryTestCase
{
protected function createRowRepository(): QueryableRowRepositoryInterface
{
$store = new MyCustomStore();
// Provide evaluators/projector as required by your implementation
return new MyRowRepository($store, /* evaluators */);
}
}
This runs tests for:
add(),getAll(),getById(),update(),delete()findBy()with all filter conditions (EqualsCondition,LikeCondition,InCondition,IsNullCondition,GreaterThanCondition,AndFilter,OrFilter,NotFilter, etc.)- Sorting (
SortVo, multi-column) - Pagination
- Projection (
selectedColumns,ConcatExpressionVo)
Test Fixture Factory
Use RepositoryTestFixtureFactory (available in the Factory namespace) to reduce boilerplate when creating ColumnDto, NewTableDto and NewRowDto objects in your own tests.
use AdachSoft\DynamicTableContractTests\Factory\RepositoryTestFixtureFactory;
use AdachSoft\DynamicTableContract\Type\ColumnType;
// Example
$newTable = RepositoryTestFixtureFactory::makeNewTable('users');
$column = RepositoryTestFixtureFactory::makeColumn('age', ColumnType::INT, true);
Running Tests
# Run functional/contract tests
phpunit --group functional
All tests follow the Arrange-Act-Assert pattern and use #[CoversClass] where applicable.
License
MIT License. See the main dynamic-table-contract repository for details.
Contributing
Please refer to the main contract repository for contribution guidelines.
统计信息
- 总下载量: 2
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 8
- 依赖项目数: 1
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2026-04-21