@@ -2,6 +2,7 @@ import Atomics
22import Foundation
33import Logging
44import PostgresNIO
5+ import ServiceLifecycle
56import XCTest
67
78@testable import PostgresMigrations
@@ -423,6 +424,51 @@ final class MigrationTests: XCTestCase {
423424 try await migrations. apply ( client: client, groups: [ . default, . test] , logger: Self . logger, dryRun: false )
424425 }
425426 }
427+
428+ func testMigrationService( ) async throws {
429+ struct WaitRevertMigrationService : Service {
430+ let client : PostgresClient
431+ let migrations : DatabaseMigrations
432+ let logger : Logger
433+ func run( ) async throws {
434+ try await migrations. waitUntilCompleted ( )
435+ try await migrations. revert ( client: client, groups: [ . test] , logger: logger, dryRun: false )
436+ }
437+ }
438+ let logger = {
439+ var logger = Logger ( label: " MigrationTests " )
440+ logger. logLevel = . debug
441+ return logger
442+ } ( )
443+ let client = try await PostgresClient (
444+ configuration: getPostgresConfiguration ( ) ,
445+ backgroundLogger: logger
446+ )
447+ let migrations = DatabaseMigrations ( )
448+ await migrations. add ( TestMigration ( name: " testMigrationService " , group: . test) )
449+ let serviceGroup = ServiceGroup (
450+ configuration: . init(
451+ services: [
452+ client,
453+ DatabaseMigrationService (
454+ client: client,
455+ migrations: migrations,
456+ groups: [ . test] ,
457+ logger: logger,
458+ dryRun: false
459+ ) ,
460+ WaitRevertMigrationService ( client: client, migrations: migrations, logger: logger) ,
461+ ] ,
462+ gracefulShutdownSignals: [ . sigterm, . sigint] ,
463+ logger: logger
464+ )
465+ )
466+ do {
467+ try await serviceGroup. run ( )
468+ } catch let error as ServiceGroupError where error == . serviceFinishedUnexpectedly( ) {
469+ // ... we're good
470+ }
471+ }
426472}
427473
428474extension DatabaseMigrationGroup {
0 commit comments