driver_tests 0.4.0-dev+11
driver_tests: ^0.4.0-dev+11 copied to clipboard
Shared ORM driver integration test suites reused by ORM drivers.
driver_tests #
Shared, driver-agnostic integration test suite for the ormed ORM. These test suites assert baseline query, mutation, and transaction behaviors that every database driver must satisfy.
This package is an indirect development dependency for driver authors, not an
application runtime package. Applications should use
ormed with a runtime driver such as
ormed_sqlite,
ormed_postgres, or
ormed_mysql.
Purpose #
Individual driver packages (ormed_sqlite, ormed_postgres, ormed_mysql) include this package as a dev_dependency, supply their own test harness, and run the shared suites. This ensures consistent behavior across all supported databases.
Installation #
dev_dependencies:
driver_tests:
path: ../driver_tests # or workspace resolution
Usage #
1. Create a Test Harness #
Each driver package creates a harness that bootstraps the ORM:
import 'package:driver_tests/driver_tests.dart';
import 'package:ormed_sqlite/ormed_sqlite.dart';
Future<void> createSqliteTestHarness() async {
final adapter = SqliteDriverAdapter.inMemory();
await setUpOrmed(
adapter: adapter,
migrations: allMigrationDescriptors,
isolationStrategy: DatabaseIsolationStrategy.migrateWithTransactions,
);
}
2. Run Shared Tests #
import 'package:driver_tests/driver_tests.dart';
import 'package:test/scaffolding.dart';
Future<void> main() async {
final harness = await createSqliteTestHarness();
tearDownAll(() => harness.dispose());
// Run all shared test suites
runAllDriverTests();
}
Test Suites #
The package provides 13 main test suites via runAllDriverTests():
| Suite | Description |
|---|---|
| Query Tests | Filtering, ordering, pagination, statement previews |
| Join Tests | Inner/outer joins, join builders, relation aliases |
| Advanced Query Tests | Between, in/notIn, null predicates |
| Mutation Tests | Insert/update/delete round trips, upsert |
| Transaction Tests | Rollback on exception, commit on completion |
| Repository Tests | Full repository operations (CRUD, DTOs, Maps) |
| Driver Override Tests | Custom codec/driver behavior overrides |
| Model Event Cancel Tests | Event cancellation during model lifecycle |
| Factory Inheritance Tests | Model factory inheritance patterns |
| Partial Entity Tests | Partial class validation, toEntity() |
Query Builder Tests (29 sub-suites) #
| Category | Tests |
|---|---|
| Clauses | WHERE, ORDER BY, LIMIT/OFFSET, SELECT, JOIN |
| Aggregation | count, sum, avg, min, max |
| Relations | Lazy loading, aggregates, mutations, caching |
| CRUD | Create, read, update, delete, upsert, batch |
| Refresh/Sync | refresh, fresh, queryrow sync, replication |
| Advanced | JSON queries, date/time, subqueries, scopes |
| Utilities | Raw queries, chunking/streaming, caching, timestamps |
Test Models #
The package includes 20+ test models with migrations:
| Model | Purpose |
|---|---|
User, UserProfile |
Basic user with hasOne relationship |
Author, Post, Tag, PostTag |
Blog-style relations (hasMany, belongsToMany) |
Article |
Rich model with ratings, status, nullable fields |
Comment |
Soft-delete enabled model |
Photo, Image |
Polymorphic relationships |
ScopedUser, UniqueUser |
Scopes and unique constraints |
CustomSoftDelete, EventModel |
Lifecycle events |
Driver Configuration #
Drivers declare capabilities via DriverTestConfig:
final config = DriverTestConfig(
supportsReturning: true,
supportsJoins: true,
supportsRightJoin: true,
supportsDistinctOn: false, // SQLite doesn't support DISTINCT ON
supportsTransactions: true,
);
Tests automatically skip when a capability is not supported:
if (!metadata.supportsCapability(DriverCapability.transactions)) {
return; // Skip transaction tests
}
Database Isolation #
Tests use ormedGroup() for per-test database isolation:
ormedGroup('My feature tests', () {
test('should work correctly', () async {
final ds = await getDataSource();
// Each test gets a clean database state
});
});
Isolation strategies:
migrate- Run migrations for each testmigrateWithTransactions- Migrations + transaction rollbacktruncate- Truncate tables between testsrecreate- Drop and recreate database
Seeders #
Pre-built seeders for test data:
import 'package:driver_tests/seeders.dart';
await UserSeeder().run();
await AuthorSeeder().run();
Directory Structure #
lib/
├── driver_tests.dart # Main exports
├── models.dart # Model exports
├── seeders.dart # Seeder exports
├── orm_registry.g.dart # Generated registry
└── src/
├── config.dart # DriverTestConfig
├── migrations/ # 19 table migrations
├── models/ # 20+ model definitions
├── support/ # Schema/seeder helpers
└── tests/ # Test suites
├── all_tests.dart
└── query_builder/ # 29 QB test files
Related packages #
| Package | Use it for |
|---|---|
ormed |
Core runtime and application APIs |
ormed_sqlite |
SQLite driver under test |
ormed_postgres |
PostgreSQL driver under test |
ormed_mysql |
MySQL/MariaDB driver under test |