drift/sally/test/migration_test.dart

42 lines
1.2 KiB
Dart

import 'package:mockito/mockito.dart';
import 'package:sally/sally.dart';
import 'package:test_api/test_api.dart';
import 'generated_tables.dart';
// used so that we can mock the SqlExecutor typedef
abstract class SqlExecutorAsClass {
Future<void> call(String sql);
}
class MockQueryExecutor extends Mock implements SqlExecutorAsClass {}
void main() {
Migrator migrator;
TestDatabase db;
MockQueryExecutor executor;
setUp(() {
executor = MockQueryExecutor();
db = TestDatabase(null);
migrator = Migrator(db, executor);
});
test('generates CREATE TABLE statements', () {
migrator.createAllTables();
verify(executor.call('CREATE TABLE IF NOT EXISTS users (id INTEGER NOT NULL , name VARCHAR NOT NULL , is_awesome BOOLEAN NULL CHECK (is_awesome in (0, 1)))'));
});
test('generates DROP TABLE statements', () {
migrator.deleteTable('users');
verify(executor.call('DROP TABLE IF EXISTS users'));
});
test('generates ALTER TABLE statements to add columns', () {
migrator.addColumn(db.users, db.users.isAwesome);
verify(executor.call('ALTER TABLE users ADD COLUMN is_awesome BOOLEAN NULL CHECK (is_awesome in (0, 1))'));
});
}