// // dart format width=80 // // ignore_for_file: unused_local_variable, unused_import // import 'package:drift/drift.dart'; // import 'package:drift_dev/api/migrations_native.dart'; // import 'package:sendtrain/database/database.dart'; // import 'package:test/test.dart'; // import 'generated/schema.dart'; // import 'generated/schema_v1.dart' as v1; // import 'generated/schema_v2.dart' as v2; // void main() { // driftRuntimeOptions.dontWarnAboutMultipleDatabases = true; // late SchemaVerifier verifier; // setUpAll(() { // verifier = SchemaVerifier(GeneratedHelper()); // }); // group('simple database migrations', () { // // These simple tests verify all possible schema updates with a simple (no // // data) migration. This is a quick way to ensure that written database // // migrations properly alter the schema. // final versions = GeneratedHelper.versions; // for (final (i, fromVersion) in versions.indexed) { // group('from $fromVersion', () { // for (final toVersion in versions.skip(i + 1)) { // test('to $toVersion', () async { // final schema = await verifier.schemaAt(fromVersion); // final db = AppDatabase(schema.newConnection()); // await verifier.migrateAndValidate(db, toVersion); // await db.close(); // }); // } // }); // } // }); // // The following template shows how to write tests ensuring your migrations // // preserve existing data. // // Testing this can be useful for migrations that change existing columns // // (e.g. by alterating their type or constraints). Migrations that only add // // tables or columns typically don't need these advanced tests. For more // // information, see https://drift.simonbinder.eu/migrations/tests/#verifying-data-integrity // // TODO: This generated template shows how these tests could be written. Adopt // // it to your own needs when testing migrations with data integrity. // test("migration from v1 to v2 does not corrupt data", () async { // // Add data to insert into the old database, and the expected rows after the // // migration. // // TODO: Fill these lists // final oldSessionsData = <v1.SessionsData>[]; // final expectedNewSessionsData = <v2.SessionsData>[]; // final oldActivitiesData = <v1.ActivitiesData>[]; // final expectedNewActivitiesData = <v2.ActivitiesData>[]; // final oldSessionActivitiesData = <v1.SessionActivitiesData>[]; // final expectedNewSessionActivitiesData = <v2.SessionActivitiesData>[]; // final oldActionsData = <v1.ActionsData>[]; // final expectedNewActionsData = <v2.ActionsData>[]; // final oldActivityActionsData = <v1.ActivityActionsData>[]; // final expectedNewActivityActionsData = <v2.ActivityActionsData>[]; // final oldMediaItemsData = <v1.MediaItemsData>[]; // final expectedNewMediaItemsData = <v2.MediaItemsData>[]; // final oldObjectMediaItemsData = <v1.ObjectMediaItemsData>[]; // final expectedNewObjectMediaItemsData = <v2.ObjectMediaItemsData>[]; // await verifier.testWithDataIntegrity( // oldVersion: 1, // newVersion: 2, // createOld: v1.DatabaseAtV1.new, // createNew: v2.DatabaseAtV2.new, // openTestedDatabase: AppDatabase.new, // createItems: (batch, oldDb) { // batch.insertAll(oldDb.sessions, oldSessionsData); // batch.insertAll(oldDb.activities, oldActivitiesData); // batch.insertAll(oldDb.sessionActivities, oldSessionActivitiesData); // batch.insertAll(oldDb.actions, oldActionsData); // batch.insertAll(oldDb.activityActions, oldActivityActionsData); // batch.insertAll(oldDb.mediaItems, oldMediaItemsData); // batch.insertAll(oldDb.objectMediaItems, oldObjectMediaItemsData); // }, // validateItems: (newDb) async { // expect( // expectedNewSessionsData, await newDb.select(newDb.sessions).get()); // expect(expectedNewActivitiesData, // await newDb.select(newDb.activities).get()); // expect(expectedNewSessionActivitiesData, // await newDb.select(newDb.sessionActivities).get()); // expect(expectedNewActionsData, await newDb.select(newDb.actions).get()); // expect(expectedNewActivityActionsData, // await newDb.select(newDb.activityActions).get()); // expect(expectedNewMediaItemsData, // await newDb.select(newDb.mediaItems).get()); // expect(expectedNewObjectMediaItemsData, // await newDb.select(newDb.objectMediaItems).get()); // }, // ); // }); // }