package Ġcom . github . js z cz ep ank iew ic z . bab ay aga . sql . test Ċ Ċ import Ġcom . github . js z cz ep ank iew ic z . bab ay aga . config . Jdbc DataSource Config Ċ import Ġcom . github . js z cz ep ank iew ic z . bab ay aga . sql .* Ċ import Ġcom . github . js z cz ep ank iew ic z . bab ay aga . sql . ColumnType .* Ċ import Ġio . d amo . as pen . Test Ċ import Ġio . d amo . as pen . expect Exception Ċ import Ġio . d amo . as pen . spring . Spring Test Tree Runner Ċ import Ġio . d amo . as pen . spring . inject Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . springframework . test . context . Context Configuration Ċ import Ġorg . springframework . test . context . Test Property Source Ċ import Ġorg . springframework . test . context . jdbc . Sql Ċ import Ġjava . time . LocalDateTime Ċ import Ġjava . time . LocalDateTime . now Ċ import Ġjava . time . Month . AP R IL Ċ import Ġjava . util .* Ċ import Ġjava . util . UUID . fromString Ċ import Ġjava . util . UUID . randomUUID Ċ Ċ /** Ċ Ġ* Ġ@ author Ġjs z cz ep ank iew ic z Ċ Ġ* Ġ* Ċ Ġ* Ġ@ since Ġ 2 0 1 6 - 1 1 - 0 1 Ċ Ġ*/ Ċ @ RunWith ( Spring Test Tree Runner :: class ) Ċ @ Context Configuration ( classes Ġ= ĠarrayOf ( Jdbc DataSource Config :: class , ĠIndex Repository :: class , ĠJdbc MetaData Repository :: class , ĠPostgres ql DB Dialect :: class , ĠJdbc MetaData Repository :: class )) Ċ @ Test Property Source ("/ db - test . properties ") Ċ @ Sql ( scripts Ġ= ĠarrayOf ("/ test - before - ddl . sql ", Ġ"/ ddl - postgresql . sql ", Ġ"/ test - after - ddl . sql ")) Ċ class ĠIndex Repository Spec Ġ: ĠTest ({ ĊĊĠĠĠ Ġval Ġindex Repository : ĠIndex Repository Ġ= Ġinject ( Index Repository :: class ) ĊĠĠĠ Ġval Ġmeta Repo : ĠJdbc MetaData Repository Ġ= Ġinject ( Jdbc MetaData Repository :: class ) ĊĊĠĠĠ Ġval Ġsingle Attribute Ġ= ĠlistOf ( Pair (" name ", ĠTEXT )) ĊĠĠĠ Ġval Ġmultiple Attributes Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" name ", ĠTEXT ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" born ", ĠTIMESTAMP _ WITHOUT _ TZ ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" mar ried ", ĠColumn Type . BOOL ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" picture ", ĠColumn Type . BINARY )) ĊĊĠĠĠ Ġdescribe (" When Ġcreate Ġindex Ġtable ") Ġ{ ĊĠĠĠĠĠĠĠ Ġtest (" supports Ġsingle Ġcolumn Ġindex ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Table Ġ= Ġindex Repository . create Index Table (" very fam ous artists ", Ġsingle Attribute ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolumns Ġ= Ġmeta Repo . get Columns ( index Table ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( columns ). contains Exactly ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJdbc Column ( name Ġ= Ġ" name ", Ġtype Ġ= Ġ" text ", Ġis Nullable Ġ= Ġfalse , Ġordinal Position Ġ= Ġ 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJdbc Column ( name Ġ= Ġ" id ", Ġtype Ġ= Ġ" uuid ", Ġis Nullable Ġ= Ġfalse , Ġordinal Position Ġ= Ġ 2 )) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtest (" supports Ġmultiple Ġcolumn Ġindex ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Table Ġ= Ġindex Repository . create Index Table (" very fam ous artists ", Ġmultiple Attributes ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolumns Ġ= Ġmeta Repo . get Columns ( index Table ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( columns ). contains Exactly ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJdbc Column ( name Ġ= Ġ" name ", Ġtype Ġ= Ġ" text ", Ġis Nullable Ġ= Ġfalse , Ġordinal Position Ġ= Ġ 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJdbc Column ( name Ġ= Ġ" born ", Ġtype Ġ= Ġ" timestamp ", Ġis Nullable Ġ= Ġfalse , Ġordinal Position Ġ= Ġ 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJdbc Column ( name Ġ= Ġ" mar ried ", Ġtype Ġ= Ġ" bool ", Ġis Nullable Ġ= Ġfalse , Ġordinal Position Ġ= Ġ 3 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJdbc Column ( name Ġ= Ġ" picture ", Ġtype Ġ= Ġ" byte a ", Ġis Nullable Ġ= Ġfalse , Ġordinal Position Ġ= Ġ 4 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJdbc Column ( name Ġ= Ġ" id ", Ġtype Ġ= Ġ" uuid ", Ġis Nullable Ġ= Ġfalse , Ġordinal Position Ġ= Ġ 5 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġdescribe (" When Ġresolve Ġindex Ġtable Ġname ") Ġ{ ĊĊĠĠĠĠĠĠĠ Ġtest (" throw ĠI AE Ġwhen Ġresolve Ġindex Ġname Ġwith Ġempty Ġentity Name ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Exception ( IllegalArgumentException :: class , Ġ" Can Ġnot Ġresolve Ġindex Ġtable Ġname , Ġentity Name Ġshould Ġnot Ġbe Ġempty ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Repository . resolve Index TableName (" Ġ", Ġsingle Attribute ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest (" throw ĠI AE Ġwhen Ġresolve Ġindex Ġname Ġwith Ġempty Ġlist Ġof Ġattributes ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Exception ( IllegalArgumentException :: class , Ġ" Can Ġnot Ġresolve Ġindex Ġtable Ġname , Ġlist Ġof Ġattributes Ġshould Ġnot Ġbe Ġempty ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Repository . resolve Index TableName (" artists ", Ġempty List ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest (" throw ĠI AE Ġwhen Ġresolve Ġindex Ġname Ġwith Ġempty Ġname Ġof Ġattribute ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Exception ( IllegalArgumentException :: class , Ġ" Can Ġnot Ġresolve Ġindex Ġtable Ġname , Ġone Ġof Ġattribute Ġname Ġis Ġempty ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Repository . resolve Index TableName (" artists ", ĠlistOf ( Pair (" name ", ĠTEXT ), ĠPair (" Ġ", ĠTIMESTAMP _ WITHOUT _ TZ ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest (" return Ġindex Ġ+ Ġentity Name Ġ+ Ġattribute Ġnames Ġlowercase Ġwhen Ġfits Ġdb Ġmax Ġtable Ġname Ġlimit ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( index Repository . resolve Index TableName (" very Fam ous Art ists ", Ġsingle Attribute )). isEqualTo (" index _ very fam ous artists _ on _ name ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest (" return Ġindex Ġ+ Ġentity Name Ġ+ Ġatribut e Ġnames Ġshort ened Ġto Ġfit Ġlimit ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġadd Ġmocks Ġand Ġtests Ġthat Ġwill Ġtest Ġmore Ġexamples ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ Ġnotice Ġshort ened Ġ' on _ nam ' ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( index Repository . resolve Index TableName (" very Fam ous Art ists ", Ġmultiple Attributes )). isEqualTo (" index _ very fam ous artists _ on _ nam _ and _ bor _ and _ mar rie _ and _ pict ur ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdescribe (" When Ġinserting Ġindex Ġvalue ") Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġfriends Ġ= Ġ" friends " ĊĠĠĠĠĠĠĠ Ġval Ġindex On Name And B orn Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" name ", ĠTEXT ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" born ", ĠTIMESTAMP _ WITHOUT _ TZ )) ĊĊĠĠĠĠĠĠĠ Ġbefore Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex Repository . create Index Table ( friends , Ġindex On Name And B orn ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest (" throw ĠI AE Ġwhen Ġattempt Ġto Ġinsert Ġvalue Ġfor Ġempty Ġarguments ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Exception ( IllegalArgumentException :: class , Ġ" Can Ġnot Ġinsert Ġempty Ġentities Ġarguments Ġinto Ġindex ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Repository . insert Index Value (" artists ", ĠlistOf ( Pair (" name ", ĠTEXT ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest (" supports Ġinserting Ġsingle Ġentry ") Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm ary ska Ġ= Ġmap Of (" id " Ġto Ġrandom UUID (), Ġ" name " Ġto Ġ" M ary ska ĠZ ak as z ew ska ", Ġ" born " Ġto Ġnow ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex Repository . insert Index Value ( friends , Ġindex On Name And B orn , Ġm ary ska ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstored Ġ= Ġindex Repository . getIndex Values ById ( friends , Ġindex On Name And B orn , Ġm ary ska . get (" id ") Ġas ĠUUID ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( stored ). isEqualTo ( mary ska ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest (" supports Ġinserting Ġmultiple Ġentries Ġat Ġonce ") Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm ary ska Ġ= Ġmap Of (" id " Ġto Ġrandom UUID (), Ġ" name " Ġto Ġ" M ary ska ĠZ ak as z ew ska ", Ġ" born " Ġto Ġnow ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġj ace k Ġ= Ġmap Of (" id " Ġto Ġrandom UUID (), Ġ" name " Ġto Ġ" J ace k ĠS org ow ick i ", Ġ" born " Ġto ĠLocalDateTime . of ( 1 9 8 6 , ĠAPR IL , Ġ 8 , Ġ 1 2 , Ġ 3 0 )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex Repository . insert Index Value ( friends , Ġindex On Name And B orn , Ġj ace k , Ġm ary ska ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstored J ace k Ġ= Ġindex Repository . getIndex Values ById ( friends , Ġindex On Name And B orn , Ġj ace k . get (" id ") Ġas ĠUUID ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstored M ary ska Ġ= Ġindex Repository . getIndex Values ById ( friends , Ġindex On Name And B orn , Ġm ary ska . get (" id ") Ġas ĠUUID ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( stored J ace k ). isEqualTo ( j ace k ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( stored M ary ska ). isEqualTo ( mary ska ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdescribe (" When Ġretrieving Ġindex Ġvalues Ġfor Ġgiven Ġid ") Ġ{ ĊĠĠĠĠĠĠĠ Ġtest (" retrieve Ġindexed Ġattributes Ġmap ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġfrom String (" a 0 eeb c 9 9 - 9 c 0 b - 4 ef 8 - bb 6 d - 6 bb 9 bd 3 8 0 a 2 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġattributes Ġ= Ġindex Repository . getIndex Values ById (" cars ", ĠlistOf ( Pair (" type ", ĠTEXT ), ĠPair (" active ", ĠBOOL )), Ġid ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( attributes !!. size ). isEqualTo ( 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( attributes [" type "]). isEqualTo (" Sy rena ĠS port ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( attributes [" id "]). isEqualTo ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( attributes [" active "]). isEqualTo ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊ Ċ })