package Ġnet . nem eros a . on track . extension . scm . catalog Ċ Ċ import Ġcom . n ha ar man . mock it ok otlin 2 .* Ċ import Ġnet . nem eros a . on track . common . Time Ċ import Ġnet . nem eros a . on track . model . support . Application Log Service Ċ import Ġnet . nem eros a . on track . model . support . Storage Service Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġjava . util .* Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertNotNull Ċ import Ġkotlin . test . assertNull Ċ Ċ class ĠS CM Catalog Impl Test Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġstorage Service : ĠStorage Service ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġapplication Log Service : ĠApplication Log Service ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġstorage Service Ġ= Ġmock () ĊĠĠĠĠĠĠĠ Ġapplication Log Service Ġ= Ġmock () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Register ing Ġentries Ġwithout Ġany Ġprovider `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcatalog Ġ= ĠS CM Catalog Impl ( storage Service , Ġempty List (), Ġapplication Log Service ) ĊĠĠĠĠĠĠĠ Ġwhenever ( storage Service . get Keys (" scm - catalog ")). thenReturn ( emptyList ()) ĊĠĠĠĠĠĠĠ Ġcatalog . collect SC MC atalog Ġ{ Ġprintln ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( storage Service , Ġtimes ( 0 )). store ( eq (" scm - catalog "), Ġany (), Ġany ()) ĊĠĠĠĠĠĠĠ Ġverify ( storage Service , Ġtimes ( 0 )). delete ( eq (" scm - catalog "), Ġany ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Register ing Ġentries Ġwith Ġone Ġprovider `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprovider : ĠS CM Catalog Provider Ġ= Ġmock () ĊĠĠĠĠĠĠĠ Ġwhenever ( provider . id ). thenReturn (" scm ") ĊĠĠĠĠĠĠĠ Ġwhenever ( provider . entries ). thenReturn ( listOf ( source (" project / repo 1 "))) ĊĊĠĠĠĠĠĠĠ Ġval Ġcatalog Ġ= ĠS CM Catalog Impl ( storage Service , ĠlistOf ( provider ), Ġapplication Log Service ) ĊĠĠĠĠĠĠĠ Ġwhenever ( storage Service . get Keys (" scm - catalog ")). thenReturn ( emptyList ()) ĊĠĠĠĠĠĠĠ Ġcatalog . collect SC MC atalog Ġ{ Ġprintln ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( storage Service , Ġtimes ( 1 )). store ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq (" scm - catalog "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq (" scm :: config :: project / repo 1 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarg That < SC MC atalog Entry > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsc m Ġ== Ġ" scm " Ġ&& Ġconfig Ġ== Ġ" config " Ġ&& Ġrepository Ġ== Ġ" project / repo 1 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġverify ( storage Service , Ġtimes ( 0 )). delete ( eq (" scm - catalog "), Ġany ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Register ing Ġentries Ġwith Ġtwo Ġproviders `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprovider 1 : ĠS CM Catalog Provider Ġ= Ġmock () ĊĠĠĠĠĠĠĠ Ġwhenever ( provider 1 . id ). thenReturn (" scm ") ĊĠĠĠĠĠĠĠ Ġwhenever ( provider 1 . entries ). thenReturn ( listOf ( source (" project / repo 1 "))) ĊĊĠĠĠĠĠĠĠ Ġval Ġprovider 2 : ĠS CM Catalog Provider Ġ= Ġmock () ĊĠĠĠĠĠĠĠ Ġwhenever ( provider 2 . id ). thenReturn (" scm 2 ") ĊĠĠĠĠĠĠĠ Ġwhenever ( provider 2 . entries ). thenReturn ( listOf ( source (" project / repo 2 "))) ĊĊĠĠĠĠĠĠĠ Ġval Ġcatalog Ġ= ĠS CM Catalog Impl ( storage Service , ĠlistOf ( provider 1 , Ġprovider 2 ), Ġapplication Log Service ) ĊĠĠĠĠĠĠĠ Ġwhenever ( storage Service . get Keys (" scm - catalog ")). thenReturn ( emptyList ()) ĊĠĠĠĠĠĠĠ Ġcatalog . collect SC MC atalog Ġ{ Ġprintln ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( storage Service , Ġtimes ( 1 )). store ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq (" scm - catalog "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq (" scm :: config :: project / repo 1 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarg That < SC MC atalog Entry > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsc m Ġ== Ġ" scm " Ġ&& Ġconfig Ġ== Ġ" config " Ġ&& Ġrepository Ġ== Ġ" project / repo 1 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġverify ( storage Service , Ġtimes ( 1 )). store ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq (" scm - catalog "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq (" scm 2 :: config :: project / repo 2 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarg That < SC MC atalog Entry > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsc m Ġ== Ġ" scm 2 " Ġ&& Ġconfig Ġ== Ġ" config " Ġ&& Ġrepository Ġ== Ġ" project / repo 2 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġverify ( storage Service , Ġtimes ( 0 )). delete ( eq (" scm - catalog "), Ġany ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Register ing Ġentries Ġwith Ġone Ġaddition Ġand Ġone Ġupdate `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprovider : ĠS CM Catalog Provider Ġ= Ġmock () ĊĠĠĠĠĠĠĠ Ġwhenever ( provider . id ). thenReturn (" scm ") ĊĠĠĠĠĠĠĠ Ġwhenever ( provider . entries ). thenReturn ( listOf ( source (" project / repo 1 "), Ġsource (" project / repo 2 "))) ĊĊĠĠĠĠĠĠĠ Ġval Ġcatalog Ġ= ĠS CM Catalog Impl ( storage Service , ĠlistOf ( provider ), Ġapplication Log Service ) ĊĠĠĠĠĠĠĠ Ġwhenever ( storage Service . get Keys (" scm - catalog ")). thenReturn ( listOf (" scm :: config :: project / repo 1 ")) ĊĠĠĠĠĠĠĠ Ġcatalog . collect SC MC atalog Ġ{ Ġprintln ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( storage Service , Ġtimes ( 1 )). store ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq (" scm - catalog "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq (" scm :: config :: project / repo 1 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarg That < SC MC atalog Entry > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsc m Ġ== Ġ" scm " Ġ&& Ġconfig Ġ== Ġ" config " Ġ&& Ġrepository Ġ== Ġ" project / repo 1 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġverify ( storage Service , Ġtimes ( 1 )). store ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq (" scm - catalog "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq (" scm :: config :: project / repo 2 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarg That < SC MC atalog Entry > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsc m Ġ== Ġ" scm " Ġ&& Ġconfig Ġ== Ġ" config " Ġ&& Ġrepository Ġ== Ġ" project / repo 2 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġverify ( storage Service , Ġtimes ( 0 )). delete ( eq (" scm - catalog "), Ġany ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Register ing Ġentries Ġwith Ġone Ġaddition Ġand Ġone Ġdeletion `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprovider : ĠS CM Catalog Provider Ġ= Ġmock () ĊĠĠĠĠĠĠĠ Ġwhenever ( provider . id ). thenReturn (" scm ") ĊĠĠĠĠĠĠĠ Ġwhenever ( provider . entries ). thenReturn ( listOf ( source (" project / repo 1 "))) ĊĊĠĠĠĠĠĠĠ Ġval Ġcatalog Ġ= ĠS CM Catalog Impl ( storage Service , ĠlistOf ( provider ), Ġapplication Log Service ) ĊĠĠĠĠĠĠĠ Ġwhenever ( storage Service . get Keys (" scm - catalog ")). thenReturn ( listOf (" scm :: config :: project / repo 2 ")) ĊĠĠĠĠĠĠĠ Ġcatalog . collect SC MC atalog Ġ{ Ġprintln ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( storage Service , Ġtimes ( 1 )). store ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq (" scm - catalog "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq (" scm :: config :: project / repo 1 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarg That < SC MC atalog Entry > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsc m Ġ== Ġ" scm " Ġ&& Ġconfig Ġ== Ġ" config " Ġ&& Ġrepository Ġ== Ġ" project / repo 1 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġverify ( storage Service ). delete (" scm - catalog ", Ġ" scm :: config :: project / repo 2 ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Getting Ġentries `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcatalog Ġ= ĠS CM Catalog Impl ( storage Service , Ġempty List (), Ġapplication Log Service ) ĊĠĠĠĠĠĠĠ Ġwhenever ( storage Service . getData (" scm - catalog ", ĠS CM Catalog Entry :: class . java )). thenReturn ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" key 1 " Ġto Ġentry (" project / repo 1 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" key 2 " Ġto Ġentry (" project / repo 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġrepositories Ġ= Ġcatalog . catalog Entries . map Ġ{ Ġit . repository Ġ}. sorted (). toList () ĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" project / repo 1 ", Ġ" project / repo 2 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepositories ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Getting Ġan Ġentry Ġby Ġkey `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcatalog Ġ= ĠS CM Catalog Impl ( storage Service , Ġempty List (), Ġapplication Log Service ) ĊĠĠĠĠĠĠĠ Ġwhenever ( storage Service . retrieve (" scm - catalog ", Ġ" key 1 ", ĠS CM Catalog Entry :: class . java )). thenReturn ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOptional . of ( entry (" project / repo ")) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( catalog . getC atalog Entry (" key 1 ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" project / repo ", Ġit . repository ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertNull ( catalog . getC atalog Entry (" key 2 ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġentry ( name : ĠString , Ġsc m : ĠString Ġ= Ġ" scm ") Ġ= ĠS CM Catalog Entry ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsc m , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" config ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :// scm /$ name ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTime . now (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTime . now () ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġfun Ġsource ( name : ĠString ) Ġ= ĠS CM Catalog Source ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" config ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :// scm /$ name ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTime . now () ĊĠĠĠ Ġ) Ċ Ċ }