@TestOn('vm')
import 'dart:async';
import 'package:drift/drift.dart';
import 'package:drift/native.dart';
import 'package:drift_dev/api/migrations.dart';
import 'package:test/test.dart';
class _TestTable extends Table with TableInfo
{
@override
final DatabaseConnectionUser attachedDatabase;
_TestTable(this.attachedDatabase);
@override
List> get $columns => [
GeneratedColumn('datetime', actualTableName, false,
type: DriftSqlType.dateTime),
];
@override
String get actualTableName => 'foo';
@override
TableInfo createAlias(String alias) {
throw UnimplementedError();
}
@override
FutureOr map(Map data, {String? tablePrefix}) {
throw UnimplementedError();
}
}
class _TestDatabase extends GeneratedDatabase {
@override
late final Iterable> allTables = [_TestTable(this)];
@override
int get schemaVersion => 1;
@override
DriftDatabaseOptions options = DriftDatabaseOptions();
_TestDatabase.connect(super.connection)
: super.connect();
}
void main() {
test('finds mismatch for datetime format', () async {
final db =
_TestDatabase.connect(DatabaseConnection(NativeDatabase.memory()))
..options = const DriftDatabaseOptions(storeDateTimeAsText: false);
await db.customSelect('SELECT 1').get(); // Open db, setup tables
db.options = const DriftDatabaseOptions(storeDateTimeAsText: true);
// Validation should fail now because datetimes are in the wrong format.
await expectLater(
db.validateDatabaseSchema(),
throwsA(isA().having((e) => e.toString(), 'toString()',
contains('Expected TEXT, got INTEGER'))),
);
});
}