diff --git a/example/example.dart b/example/example.dart index d1a6a1e..c9a3856 100644 --- a/example/example.dart +++ b/example/example.dart @@ -33,27 +33,27 @@ final config = MigrationConfig( initializationScript: initialScript, migrationScripts: migrations); class DatabaseRepository { - static Database _database; - String path; + static Database? _database; + String? path; Future get database async { if (_database != null) { - return _database; + return _database!; } _database = await _open(); - return _database; + return _database!; } Future _open() async { - final databasesPath = await getDatabasesPath(); + final databasesPath = await (getDatabasesPath() as FutureOr); final path = join(databasesPath, 'test.db'); return await openDatabaseWithMigration(path, config); } - Future findById(int id) async { - final db = await database; + Future findById(int id) async { + final db = await (database as FutureOr); List maps = await db.query('_task', columns: ['id', 'description'], where: 'id = ?', whereArgs: [id]); if (maps.length > 0) { diff --git a/lib/src/migration_config.dart b/lib/src/migration_config.dart index d3742b1..9a4cc50 100644 --- a/lib/src/migration_config.dart +++ b/lib/src/migration_config.dart @@ -13,9 +13,5 @@ class MigrationConfig { final List initializationScript; final List migrationScripts; - MigrationConfig({this.initializationScript, this.migrationScripts}) - : assert(initializationScript != null, - 'The initializationScript cannot be null.'), - assert( - migrationScripts != null, 'The migrationScripts cannot be null.'); + MigrationConfig({required this.initializationScript, required this.migrationScripts}); } diff --git a/lib/src/migrator.dart b/lib/src/migrator.dart index 13685fd..745eee3 100644 --- a/lib/src/migrator.dart +++ b/lib/src/migrator.dart @@ -14,7 +14,7 @@ class Migrator { Migrator(this.config); - Future executeInitialization(Database db, int version) async { + Future executeInitialization(DatabaseExecutor db, int version) async { for (String script in config.initializationScript) { await db.execute(script); } @@ -25,7 +25,7 @@ class Migrator { } Future executeMigration( - Database db, int oldVersion, int newVersion) async { + DatabaseExecutor db, int oldVersion, int newVersion) async { assert(oldVersion < newVersion, 'The newVersion($newVersion) should always be greater than the oldVersion($oldVersion).'); assert(config.migrationScripts.length == newVersion - 1, diff --git a/pubspec.lock b/pubspec.lock index 333bc24..d0611ff 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1,34 +1,146 @@ # Generated by pub -# See https://www.dartlang.org/tools/pub/glossary#lockfile +# See https://dart.dev/tools/pub/glossary#lockfile packages: + _fe_analyzer_shared: + dependency: transitive + description: + name: _fe_analyzer_shared + url: "https://pub.dartlang.org" + source: hosted + version: "17.0.0" + analyzer: + dependency: transitive + description: + name: analyzer + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + args: + dependency: transitive + description: + name: args + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" async: dependency: transitive description: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.1.0" + version: "2.5.0" boolean_selector: dependency: transitive description: name: boolean_selector url: "https://pub.dartlang.org" source: hosted - version: "1.0.4" + version: "2.1.0" + build: + dependency: transitive + description: + name: build + url: "https://pub.dartlang.org" + source: hosted + version: "1.6.3" + built_collection: + dependency: transitive + description: + name: built_collection + url: "https://pub.dartlang.org" + source: hosted + version: "5.0.0" + built_value: + dependency: transitive + description: + name: built_value + url: "https://pub.dartlang.org" + source: hosted + version: "8.0.0" + characters: + dependency: transitive + description: + name: characters + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" charcode: dependency: transitive description: name: charcode url: "https://pub.dartlang.org" source: hosted - version: "1.1.2" + version: "1.2.0" + cli_util: + dependency: transitive + description: + name: cli_util + url: "https://pub.dartlang.org" + source: hosted + version: "0.3.0" + clock: + dependency: transitive + description: + name: clock + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + code_builder: + dependency: transitive + description: + name: code_builder + url: "https://pub.dartlang.org" + source: hosted + version: "3.6.0" collection: dependency: transitive description: name: collection url: "https://pub.dartlang.org" source: hosted - version: "1.14.11" + version: "1.15.0" + convert: + dependency: transitive + description: + name: convert + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.0" + crypto: + dependency: transitive + description: + name: crypto + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.0" + dart_style: + dependency: transitive + description: + name: dart_style + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.14" + fake_async: + dependency: transitive + description: + name: fake_async + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0" + file: + dependency: transitive + description: + name: file + url: "https://pub.dartlang.org" + source: hosted + version: "6.1.0" + fixnum: + dependency: transitive + description: + name: fixnum + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.0" flutter: dependency: "direct main" description: flutter @@ -39,122 +151,172 @@ packages: description: flutter source: sdk version: "0.0.0" + glob: + dependency: transitive + description: + name: glob + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" + logging: + dependency: transitive + description: + name: logging + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.0" matcher: dependency: "direct dev" description: name: matcher url: "https://pub.dartlang.org" source: hosted - version: "0.12.5" + version: "0.12.10" meta: dependency: transitive description: name: meta url: "https://pub.dartlang.org" source: hosted - version: "1.1.6" + version: "1.3.0" mockito: dependency: "direct dev" description: name: mockito url: "https://pub.dartlang.org" source: hosted - version: "4.0.0" + version: "5.0.0" + package_config: + dependency: transitive + description: + name: package_config + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" path: dependency: transitive description: name: path url: "https://pub.dartlang.org" source: hosted - version: "1.6.2" + version: "1.8.0" pedantic: dependency: transitive description: name: pedantic url: "https://pub.dartlang.org" source: hosted - version: "1.5.0" - quiver: + version: "1.11.0" + pub_semver: dependency: transitive description: - name: quiver + name: pub_semver url: "https://pub.dartlang.org" source: hosted - version: "2.0.2" + version: "2.0.0" sky_engine: dependency: transitive description: flutter source: sdk version: "0.0.99" + source_gen: + dependency: transitive + description: + name: source_gen + url: "https://pub.dartlang.org" + source: hosted + version: "0.9.10+3" source_span: dependency: transitive description: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.5.5" + version: "1.8.0" sqflite: dependency: "direct main" description: name: sqflite url: "https://pub.dartlang.org" source: hosted - version: "1.1.1" + version: "2.0.0+2" + sqflite_common: + dependency: transitive + description: + name: sqflite_common + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0+1" stack_trace: dependency: transitive description: name: stack_trace url: "https://pub.dartlang.org" source: hosted - version: "1.9.3" + version: "1.10.0" stream_channel: dependency: transitive description: name: stream_channel url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.1.0" string_scanner: dependency: transitive description: name: string_scanner url: "https://pub.dartlang.org" source: hosted - version: "1.0.4" + version: "1.1.0" synchronized: dependency: transitive description: name: synchronized url: "https://pub.dartlang.org" source: hosted - version: "2.1.0" + version: "3.0.0" term_glyph: dependency: transitive description: name: term_glyph url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.2.0" test_api: dependency: transitive description: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.2.4" + version: "0.2.19" typed_data: dependency: transitive description: name: typed_data url: "https://pub.dartlang.org" source: hosted - version: "1.1.6" + version: "1.3.0" vector_math: dependency: transitive description: name: vector_math url: "https://pub.dartlang.org" source: hosted - version: "2.0.8" + version: "2.1.0" + watcher: + dependency: transitive + description: + name: watcher + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.0" + yaml: + dependency: transitive + description: + name: yaml + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.0" sdks: - dart: ">=2.2.0 <3.0.0" + dart: ">=2.12.0 <3.0.0" + flutter: ">=1.24.0-10" diff --git a/pubspec.yaml b/pubspec.yaml index 45aec3d..089d45e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -5,17 +5,17 @@ author: Efthymios Sarmpanis homepage: https://github.com/flutterings/sqflite_migration environment: - sdk: ">=2.0.0-dev.68.0 <3.0.0" + sdk: '>=2.12.0 <3.0.0' dependencies: flutter: sdk: flutter - sqflite: ^1.0.0 + sqflite: ^2.0.0 dev_dependencies: flutter_test: sdk: flutter - mockito: ^4.0.0 - matcher: ^0.12.3+1 + mockito: ^5.0.0 + matcher: ^0.12.10 flutter: diff --git a/test/src/migration_config_test.dart b/test/src/migration_config_test.dart deleted file mode 100644 index 4dfea36..0000000 --- a/test/src/migration_config_test.dart +++ /dev/null @@ -1,23 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:matcher/matcher.dart'; - -import 'package:sqflite_migration/sqflite_migration.dart'; - -void main() { - final populatedScript = ['script line 1', 'script line 2']; - - test('should throw assertion when initializationScript is null', () async { - expect( - () => MigrationConfig(migrationScripts: populatedScript), - throwsA(TypeMatcher().having((e) => e.message, - 'message', equals('The initializationScript cannot be null.')))); - }); - - test('should throw assertion when migrationScript is null', () async { - expect( - () => MigrationConfig(initializationScript: populatedScript), - throwsA(TypeMatcher().having((e) => e.message, - 'message', equals('The migrationScripts cannot be null.')))); - }); - -} diff --git a/test/src/migrator_test.dart b/test/src/migrator_test.dart index 8bf2be9..52ac965 100644 --- a/test/src/migrator_test.dart +++ b/test/src/migrator_test.dart @@ -6,10 +6,15 @@ import 'package:sqflite/sqflite.dart'; import 'package:sqflite_migration/sqflite_migration.dart'; import 'package:sqflite_migration/src/migrator.dart'; -class MockDatabase extends Mock implements Database {} +class MockDatabase extends Mock implements DatabaseExecutor { + @override + Future execute(String sql, [List? arguments]) async { + return super.noSuchMethod(Invocation.method(#execute, [sql])); + } +} void main() { - test('should not run any executions on an empty initialiazationScript list', + test('should not run any executions on an empty initializationScript list', () async { var db = MockDatabase(); @@ -23,7 +28,7 @@ void main() { verifyZeroInteractions(db); }); - test('should run executions on an initialiazationScript list of 1', () async { + test('should run executions on an initializationScript list of 1', () async { var db = MockDatabase(); var config = MigrationConfig( @@ -36,7 +41,7 @@ void main() { verify(db.execute('script line 1')); }); - test('should run all executions on an initialiazationScript list', () async { + test('should run all executions on an initializationScript list', () async { var db = MockDatabase(); var config = MigrationConfig( diff --git a/test/src/open_database_with_migration_test.dart b/test/src/open_database_with_migration_test.dart index d26ea9c..6d4a717 100644 --- a/test/src/open_database_with_migration_test.dart +++ b/test/src/open_database_with_migration_test.dart @@ -1,23 +1,23 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/mockito.dart'; import 'package:sqflite/sqflite.dart'; import 'package:sqflite_migration/sqflite_migration.dart'; -class MockConfig extends Mock implements MigrationConfig {} - void main() { test('should pass the path to sqflite', () async { - final config = MockConfig(); - when(config.migrationScripts).thenReturn([]); + final config = MigrationConfig( + initializationScript: [], + migrationScripts: [], + ); + final log = []; await openDatabaseWithMigration('path', config, openDatabase: ( path, { - int version, - OnDatabaseCreateFn onCreate, - OnDatabaseVersionChangeFn onUpgrade, + int? version, + OnDatabaseCreateFn? onCreate, + OnDatabaseVersionChangeFn? onUpgrade, }) => log.add(path)); @@ -27,16 +27,19 @@ void main() { test( 'should determine the version according to the number of migration scripts', () async { - final config = MockConfig(); - when(config.migrationScripts).thenReturn(['script 1', 'script 2']); + final config = MigrationConfig( + initializationScript: [], + migrationScripts: ['script 1', 'script 2'], + ); + final log = []; await openDatabaseWithMigration('path', config, openDatabase: ( path, { - int version, - OnDatabaseCreateFn onCreate, - OnDatabaseVersionChangeFn onUpgrade, + int? version, + OnDatabaseCreateFn? onCreate, + OnDatabaseVersionChangeFn? onUpgrade, }) => log.add(version));