package Ġme . rus lan ys . if un ny . repository Ċ Ċ import Ġme . rus lan ys . if un ny . base . Mongo Repository Tests Ċ import Ġme . rus lan ys . if un ny . domain . Language Ċ import Ġme . rus lan ys . if un ny . domain . Me me Ċ import Ġme . rus lan ys . if un ny . util . create Dummy Me me Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . junit . jupiter . api . After Each Ċ import Ġorg . junit . jupiter . api . DisplayName Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . assert Throws Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . dao . Duplicate Key Exception Ċ import Ġorg . springframework . data . domain . Page Request Ċ import Ġorg . springframework . data . domain . Sort Ċ import Ġjava . time . LocalDateTime Ċ import Ġjava . util .* Ċ Ċ class ĠMe me Repository Tests Ġ: ĠMongo Repository Tests () Ġ{ ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġrepository : ĠMe me Repository ĊĊĠĠĠ Ġ@ After Each ĊĠĠĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ Ġrepository . delete All (). block () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġpersist Test () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġme me Ġ= Ġrepository . save ( create Dummy Me me ( publish DateTime Ġ= ĠLocalDateTime . of ( 2 0 1 9 , Ġ 1 2 , Ġ 1 2 , Ġ 1 2 , Ġ 1 2 , Ġ 1 2 ))). block () !! ĊĊĠĠĠĠĠĠĠ Ġ// Ġ-- ĊĠĠĠĠĠĠĠ Ġval Ġme me From Db Ġ= Ġmongo Template . findById ( meme . id , ĠMe me :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ-- ĊĠĠĠĠĠĠĠ ĠassertThat ( meme From Db ). isNotNull ĊĠĠĠĠĠĠĠ ĠassertThat ( meme From Db ). isEqualTo ( meme ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġbreak Unique Constraint Test () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfirst Me me Ġ= Ġcreate Dummy Me me ( page Url Ġ= ĠUUID . randomUUID (). toString ()) ĊĠĠĠĠĠĠĠ Ġval Ġsecond Me me Ġ= Ġcreate Dummy Me me ( page Url Ġ= Ġfirst Me me . page Url ) ĊĊĠĠĠĠĠĠĠ Ġrepository . save ( first Me me ). block () ĊĊĠĠĠĠĠĠĠ ĠassertThrows < Duplicate Key Exception > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . save ( second Me me ). block () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠfindBy Language Test () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. 3 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . save ( create Dummy Me me ( language Ġ= ĠLanguage . PORT UG UE SE )). block () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrepository . save ( create Dummy Me me ( language Ġ= ĠLanguage . RU SS IAN )). block () ĊĊĠĠĠĠĠĠĠ Ġ// Ġ-- ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġrepository . findBy Language ( Language . PORT UG UE SE . code , ĠPage Request . of ( 0 , Ġ 1 0 , ĠSort . by ( Sort . Direction . DESC , Ġ" id "))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. block () !! ĊĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġrepository . count By Language ( Language . PORT UG UE SE . code ). block () !! ĊĊĠĠĠĠĠĠĠ Ġ// Ġ-- ĊĠĠĠĠĠĠĠ ĠassertThat ( count ). isEqualTo ( 3 0 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( list . size ). isEqualTo ( 1 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ DisplayName (""" ĊĠĠĠĠĠĠĠ ĠThe Ġpage Ġshould Ġdisplay Ġme mes Ġwith Ġpublish Ġdate Ġsorted Ġby Ġdate ĠDESC , Ġand Ġafter Ġthat , Ġme mes Ġwithout Ġpublishing Ġdate Ġsorted Ġby ĠID ĠDESC . ĊĠĠĠ Ġ"" ") ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠsortBy Date Test () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfirst Me me Ġ= Ġrepository . save ( create Dummy Me me ( publish DateTime Ġ= ĠLocalDateTime . of ( 2 0 1 9 , Ġ 1 2 , Ġ 1 , Ġ 1 0 , Ġ 0 ))). block () ĊĠĠĠĠĠĠĠ Ġval Ġsecond Me me Ġ= Ġrepository . save ( create Dummy Me me ( publish DateTime Ġ= ĠLocalDateTime . of ( 2 0 1 9 , Ġ 1 2 , Ġ 2 , Ġ 1 0 , Ġ 0 ))). block () ĊĠĠĠĠĠĠĠ Ġval Ġthird Me me Ġ= Ġrepository . save ( create Dummy Me me ( publish DateTime Ġ= ĠLocalDateTime . of ( 2 0 1 9 , Ġ 1 2 , Ġ 3 , Ġ 1 0 , Ġ 0 ))). block () ĊĠĠĠĠĠĠĠ Ġval Ġempty Date First Ġ= Ġrepository . save ( create Dummy Me me ( publish DateTime Ġ= Ġnull )). block () ĊĠĠĠĠĠĠĠ Ġval Ġempty Date Second Ġ= Ġrepository . save ( create Dummy Me me ( publish DateTime Ġ= Ġnull )). block () ĊĠĠĠĠĠĠĠ Ġval Ġempty Date Third Ġ= Ġrepository . save ( create Dummy Me me ( publish DateTime Ġ= Ġnull )). block () ĊĊĠĠĠĠĠĠĠ Ġ// Ġ-- ĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġrepository . count By Language ( Language . GER MAN . code ). block () !! ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġrepository . findBy Language ( Language . GER MAN . code , ĠPage Request . of ( 0 , Ġ 1 0 , ĠSort . by ( Sort . Direction . DESC , Ġ" publish DateTime ", Ġ" id "))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. block () !! ĊĊĠĠĠĠĠĠĠ Ġ// Ġ-- ĊĠĠĠĠĠĠĠ ĠassertThat ( count ). isEqualTo ( 6 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( list ). contains Exactly ( third Me me , Ġsecond Me me , Ġfirst Me me , Ġempty Date Third , Ġempty Date Second , Ġempty Date First ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġshould Exists By Language And Fingerprint () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfingerprint Ġ= Ġ" F ING ER PRINT " ĊĠĠĠĠĠĠĠ Ġval Ġlanguage Ġ= ĠLanguage . GER MAN ĊĊĠĠĠĠĠĠĠ Ġmongo Template . save ( create Dummy Me me ( language Ġ= Ġlanguage , Ġfingerprint Ġ= Ġfingerprint )) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ-- ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġrepository . exists By Language And Fingerprint ( language . code , Ġfingerprint ). block () ĊĊĠĠĠĠĠĠĠ Ġ// Ġ-- ĊĠĠĠĠĠĠĠ ĠassertThat ( result ). isTrue () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġshould Not Exists By Language And Fingerprint Where Language Is Different () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfingerprint Ġ= Ġ" F ING ER PRINT " ĊĊĠĠĠĠĠĠĠ Ġmongo Template . save ( create Dummy Me me ( language Ġ= ĠLanguage . GER MAN , Ġfingerprint Ġ= Ġfingerprint )) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ-- ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġrepository . exists By Language And Fingerprint ( Language . RU SS IAN . code , Ġfingerprint ). block () ĊĊĠĠĠĠĠĠĠ Ġ// Ġ-- ĊĠĠĠĠĠĠĠ ĠassertThat ( result ). isFalse () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġshould Not Exists By Language And Fingerprint Where Fingerprint Is Different () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlanguage Ġ= ĠLanguage . GER MAN ĊĊĠĠĠĠĠĠĠ Ġmongo Template . save ( create Dummy Me me ( language Ġ= Ġlanguage , Ġfingerprint Ġ= Ġ" 1 2 3 ")) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ-- ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġrepository . exists By Language And Fingerprint ( language . code , Ġ" 3 2 1 "). block () ĊĊĠĠĠĠĠĠĠ Ġ// Ġ-- ĊĠĠĠĠĠĠĠ ĠassertThat ( result ). isFalse () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠfindBy Page Urls () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġurls Ġ= Ġarray ListOf (" http :// de best e . de / meme - 1 ", Ġ" http :// de best e . de / meme - 2 ", Ġ" http :// de best e . de / meme - 3 ") ĊĠĠĠĠĠĠĠ Ġurls . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmongo Template . save ( create Dummy Me me ( page Url Ġ= Ġit )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ-- ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġrepository . findBy Page Url In ( urls ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. block () !! ĊĊĠĠĠĠĠĠĠ Ġ// Ġ-- ĊĠĠĠĠĠĠĠ ĠassertThat ( result ). has Size ( urls . size ) ĊĠĠĠĠĠĠĠ ĠassertThat ( result . map Ġ{ Ġit . page Url Ġ}). contains Exactly Elements Of ( urls ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ