package Ġat . cp ick l . g ads u . persistence Ċ Ċ import Ġat . cp ick l . g ads u . client . Client Ċ import Ġat . cp ick l . g ads u . service . parse DateTime Ċ import Ġat . cp ick l . g ads u . test infra . new Test DataSource Ċ import Ġat . cp ick l . g ads u . test infra . un saved Valid Instance Ċ import Ġg ads u . persistence . V 6 _ 1 __ x prop _ update . Companion . hun gry Digest Parts Ċ import Ġorg . fly way db . core . Fly way Ċ import Ġorg . hamcrest . Matcher Assert Ċ import Ġorg . hamcrest . Matcher Assert . assertThat Ċ import Ġorg . hamcrest . Matchers Ċ import Ġorg . hamcrest . Matchers . equalTo Ċ import Ġorg . hamcrest . Matchers . has Size Ċ import Ġorg . joda . time . DateTime Ċ import Ġorg . testng . annotations . Before Method Ċ import Ġorg . testng . annotations . Test Ċ import Ġjava . util . concurrent . atomic . Atomic Integer Ċ import Ġjavax . sql . DataSource ĊĊ Ċ @ Test Ċ class ĠFly way Migrate Test Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠdataSource : ĠDataSource ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġjdbc x : ĠJdbc x ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtest Service : ĠMigrate Test Service ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfly way : ĠFly way ĊĊĠĠĠ Ġprivate Ġval ĠclientId Ġ= Ġ" clientId " ĊĠĠĠ Ġprivate Ġval Ġclient Ġ= ĠClient . un saved Valid Instance (). copy ( id Ġ= ĠclientId ) ĊĠĠĠ Ġprivate Ġvar Ġtest Counter Ġ= ĠAtomicInteger () ĊĊĠĠĠ Ġ@ Before Method ĊĠĠĠ Ġfun Ġ` setup Ġdb Ġstuff `() Ġ{ ĊĠĠĠĠĠĠĠ ĠdataSource Ġ= Ġnew Test DataSource ( java Class . simple Name Ġ+ Ġtest Counter . increment AndGet ()) ĊĠĠĠĠĠĠĠ Ġjdbc x Ġ= ĠSpring Jdbc x ( dataSource ) ĊĠĠĠĠĠĠĠ Ġfly way Ġ= ĠFly way Database Manager ( dataSource ). build Fly way () ĊĠĠĠĠĠĠĠ Ġtest Service Ġ= ĠMigrate Test Service ( jdbc x , Ġfly way ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ` given Ġt aste Ġx prop Ġexists , Ġwhen Ġmigrate , Ġshould Ġbe Ġtranslated Ġto Ġh un gry `() Ġ{ ĊĠĠĠĠĠĠĠ Ġtest Service . migrate Db (" 5 ", Ġ 5 ) ĊĠĠĠĠĠĠĠ Ġtest Service . insert Client _ V 5 ( client ) ĊĠĠĠĠĠĠĠ Ġtest Service . insert X Prop _ V 5 ( clientId , ĠS prop D bo V 5 ( clientId , Ġ" T aste ", Ġ" T aste _ S weet , T aste _ Hot ")) ĊĊĠĠĠĠĠĠĠ Ġtest Service . migrate Db (" 6 . 1 ", Ġ 2 ) ĊĊĠĠĠĠĠĠĠ Ġassert X Props Table Content _ V 6 ( X props D bo V 6 ( clientId , Ġ" H un gry ", Ġ" H un gry _ T aste S weet , H un gry _ T aste Hot ", Ġnull )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ` given Ġt aste Ġand Ġh un gry Ġx prop Ġexists , Ġwhen Ġmigrate , Ġt aste Ġand Ġh un gry Ġshould Ġbe Ġmerged `() Ġ{ ĊĠĠĠĠĠĠĠ Ġtest Service . migrate Db (" 5 ", Ġ 5 ) ĊĠĠĠĠĠĠĠ Ġtest Service . insert Client _ V 5 ( client ) ĊĠĠĠĠĠĠĠ Ġtest Service . insert X Prop _ V 5 ( clientId , ĠS prop D bo V 5 ( clientId , Ġ" H un gry ", Ġ" H un gry _ Big H un ger ")) ĊĠĠĠĠĠĠĠ Ġtest Service . insert X Prop _ V 5 ( clientId , ĠS prop D bo V 5 ( clientId , Ġ" T aste ", Ġ" T aste _ S weet , T aste _ Hot ")) ĊĊĠĠĠĠĠĠĠ Ġtest Service . migrate Db (" 6 . 1 ", Ġ 2 ) ĊĊĠĠĠĠĠĠĠ Ġassert X Props Table Content _ V 6 ( X props D bo V 6 ( clientId , Ġ" H un gry ", Ġ" H un gry _ Big H un ger , H un gry _ T aste S weet , H un gry _ T aste Hot ", Ġnull )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġh un gry Non Digest Parts Ġ= ĠlistOf (" Big H un ger ", Ġ" Little H un ger ") ĊĠĠĠ Ġprivate Ġval Ġh un gry All Parts Ġ= Ġh un gry Non Digest Parts . plus ( hun gry Digest Parts ) ĊĊĠĠĠ Ġfun Ġ` given Ġh un gry Ġexists , Ġwhen Ġmigrate , Ġmove Ġnew Ġdigest ion Ġparts `() Ġ{ ĊĠĠĠĠĠĠĠ Ġtest Service . migrate Db (" 5 ", Ġ 5 ) ĊĠĠĠĠĠĠĠ Ġtest Service . insert Client _ V 5 ( client ) ĊĠĠĠĠĠĠĠ Ġtest Service . insert X Prop _ V 5 ( clientId , ĠS prop D bo V 5 ( clientId , Ġ" H un gry ", Ġh un gry All Parts . map Ġ{ Ġ" H un gry _$ it " Ġ}. join ToString ("," ))) ĊĊĠĠĠĠĠĠĠ Ġtest Service . migrate Db (" 6 . 1 ", Ġ 2 ) ĊĊĠĠĠĠĠĠĠ Ġassert X Props Table Content _ V 6 ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠX props D bo V 6 ( clientId , Ġ" Digest ion ", Ġh un gry Digest Parts . map Ġ{ Ġ" Digest ion _$ it " Ġ}. join ToString ("," ), Ġnull ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠX props D bo V 6 ( clientId , Ġ" H un gry ", Ġh un gry Non Digest Parts . map Ġ{ Ġ" H un gry _$ it " Ġ}. join ToString ("," ), Ġnull ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ` upgrade Ġto ĠV 9 Ġadds Ġnew Ġclient Ġfields `() Ġ{ ĊĠĠĠĠĠĠĠ Ġtest Service . migrate Db (" 8 ") ĊĠĠĠĠĠĠĠ Ġval Ġnick Name V 8 Ġ= Ġ" test Nick Name Int " ĊĠĠĠĠĠĠĠ Ġtest Service . insert Client _ V 8 ( Client . REAL _ D UMMY . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ" id ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnick Name Int Ġ= Ġnick Name V 8 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnick Name Ext Ġ= Ġ" IG NO RED ĠIN ĠSQL " ĊĠĠĠĠĠĠĠ Ġ)) ĊĊĠĠĠĠĠĠĠ Ġtest Service . migrate Db (" 9 ") ĊĊĠĠĠĠĠĠĠ ĠassertThat ( jdbc x . query (" SELECT Ġ* ĠFROM Ġclient ", ĠClient V 9 Mapper ), ĠequalTo ( listOf ( Client V 9 ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnickname Int Ġ= Ġnick Name V 8 , Ġ// Ġoriginal Ġnickname Ġis Ġaltered Ġto Ġnick Name Int ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnickname Ext Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġknown By Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyy T end ency Ġ= Ġ" ?", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement T end ency Ġ= Ġ" ?" ĊĠĠĠĠĠĠĠ Ġ )))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ` upgrade Ġto ĠV 1 0 Ġchanges Ġtreatment Ġdates Ġfrom Ġzero Ġto Ġzero `() Ġ{ ĊĠĠĠĠĠĠĠ Ġassert V 1 0 T reatment Date Migration ( date With Time (" 1 4 : 0 0 "), Ġdate With Time (" 1 4 : 0 0 ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ` upgrade Ġto ĠV 1 0 Ġchanges Ġtreatment Ġdates Ġfrom Ġone Ġto Ġzero `() Ġ{ ĊĠĠĠĠĠĠĠ Ġassert V 1 0 T reatment Date Migration ( date With Time (" 1 4 : 0 1 "), Ġdate With Time (" 1 4 : 0 0 ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ` upgrade Ġto ĠV 1 0 Ġchanges Ġtreatment Ġdates Ġfrom Ġquarter Ġto Ġzero `() Ġ{ ĊĠĠĠĠĠĠĠ Ġassert V 1 0 T reatment Date Migration ( date With Time (" 1 4 : 1 5 "), Ġdate With Time (" 1 4 : 0 0 ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ` upgrade Ġto ĠV 1 0 Ġchanges Ġtreatment Ġdates Ġfrom Ġthree Ġquarter Ġto Ġhalf `() Ġ{ ĊĠĠĠĠĠĠĠ Ġassert V 1 0 T reatment Date Migration ( date With Time (" 1 4 : 4 5 "), Ġdate With Time (" 1 4 : 3 0 ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġassert X Props Table Content _ V 6 ( var arg Ġexpected : ĠX props D bo V 6 ) Ġ{ ĊĠĠĠĠĠĠĠ ĠMatcher Assert . assertThat ( jdbc x . query (" SELECT Ġ* ĠFROM Ġx props ", ĠX props D bo V 6 Mapper ), ĠMatch ers . equalTo ( expected . toList ())) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġassert V 1 0 T reatment Date Migration ( init Date : ĠDateTime , Ġexpected Date : ĠDateTime ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtest Service . migrate Db (" 9 ") ĊĠĠĠĠĠĠĠ Ġtest Service . insert Client _ V 9 ( clientId ) ĊĠĠĠĠĠĠĠ Ġtest Service . insert T ream t ent _ V 9 ( init Date , ĠclientId ) ĊĊĠĠĠĠĠĠĠ Ġtest Service . migrate Db (" 1 0 _ 1 ") ĊĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġjdbc x . query (" SELECT Ġ* ĠFROM Ġtreatment ", ĠT reatment V 9 Mapper ) ĊĠĠĠĠĠĠĠ ĠassertThat ( actual , Ġhas Size ( 1 )) ĊĠĠĠĠĠĠĠ ĠassertThat ( actual [ 0 ]. date , ĠequalTo ( expected Date )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdate With Time ( time : ĠString ) Ġ= Ġ" 1 . 1 . 2 0 0 0 Ġ$ time : 0 0 ". parse DateTime () Ċ Ċ } Ċ