@@ -154,6 +154,26 @@ final class FluentPostgresDriverTests: XCTestCase {
154154 XCTAssertEqual ( rows [ 0 ] . metadata [ " createdAt " ] , expected)
155155 }
156156
157+ func testEnumAddingMultipleCases( ) throws {
158+ try EnumMigration ( ) . prepare ( on: self . db) . wait ( )
159+ try EventWithFooMigration ( ) . prepare ( on: self . db) . wait ( )
160+
161+ let event = EventWithFoo ( )
162+ event. foobar = . foo
163+ try event. save ( on: self . db) . wait ( )
164+
165+ XCTAssertNoThrow ( try EnumAddMultipleCasesMigration ( ) . prepare ( on: self . db) . wait ( ) )
166+
167+ event. foobar = . baz
168+ XCTAssertNoThrow ( try event. update ( on: self . db) . wait ( ) )
169+ event. foobar = . qux
170+ XCTAssertNoThrow ( try event. update ( on: self . db) . wait ( ) )
171+
172+ XCTAssertNoThrow ( try EnumAddMultipleCasesMigration ( ) . revert ( on: self . db) . wait ( ) )
173+ try ! EventWithFooMigration ( ) . revert ( on: self . db) . wait ( )
174+ try ! EnumMigration ( ) . revert ( on: self . db) . wait ( )
175+ }
176+
157177
158178 var benchmarker : FluentBenchmarker {
159179 return . init( databases: self . dbs)
@@ -260,6 +280,72 @@ struct EventMigration: Migration {
260280 }
261281}
262282
283+ final class EventWithFoo : Model {
284+ static let schema = " foobar_events "
285+
286+ @ID
287+ var id : UUID ?
288+
289+ @Enum ( key: " foo " )
290+ var foobar : Foobar
291+ }
292+
293+ enum Foobar : String , Codable {
294+ static let schema = " foobars "
295+ case foo
296+ case bar
297+ case baz
298+ case qux
299+ }
300+
301+ struct EventWithFooMigration : Migration {
302+ func prepare( on database: Database ) -> EventLoopFuture < Void > {
303+ return database. enum ( Foobar . schema) . read ( )
304+ . flatMap { foobar in
305+ database. schema ( EventWithFoo . schema)
306+ . id ( )
307+ . field ( " foo " , foobar, . required)
308+ . create ( )
309+ }
310+ }
311+
312+ func revert( on database: Database ) -> EventLoopFuture < Void > {
313+ return database. schema ( EventWithFoo . schema) . delete ( )
314+ }
315+ }
316+
317+ struct EnumMigration : Migration {
318+ func prepare( on database: Database ) -> EventLoopFuture < Void > {
319+ return database. enum ( Foobar . schema)
320+ . case ( " foo " )
321+ . case ( " bar " )
322+ . create ( )
323+ . transform ( to: ( ) )
324+ }
325+
326+ func revert( on database: Database ) -> EventLoopFuture < Void > {
327+ return database. enum ( Foobar . schema) . delete ( )
328+ }
329+ }
330+
331+ struct EnumAddMultipleCasesMigration : Migration {
332+ func prepare( on database: Database ) -> EventLoopFuture < Void > {
333+ return database. enum ( Foobar . schema)
334+ . case ( " baz " )
335+ . case ( " qux " )
336+ . update ( )
337+ . transform ( to: ( ) )
338+ }
339+
340+ func revert( on database: Database ) -> EventLoopFuture < Void > {
341+ return database. enum ( Foobar . schema)
342+ . deleteCase ( " baz " )
343+ . deleteCase ( " qux " )
344+ . update ( )
345+ . transform ( to: ( ) )
346+ }
347+ }
348+
263349let isLoggingConfigured : Bool = {
264350 LoggingSystem . bootstrap { label in
265351 var handler = StreamLogHandler . standardOutput ( label: label)
0 commit comments