/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 ĠThe ĠBook Lab ĠAuthors . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġnl . t ude lf t . book lab . backend . api . v 1 Ċ Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . fasterxml . jackson . databind . module . Simple Module Ċ import Ġcom . fasterxml . jackson . module . kotlin . jackson ObjectMapper Ċ import Ġcom . fasterxml . jackson . module . kotlin . readValue Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . do Return Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . eq Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . mock Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . stub Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . verify Blocking Ċ import Ġio . ktor . application . Application Ċ import Ġio . ktor . auth . authenticate Ċ import Ġio . ktor . http . ContentType Ċ import Ġio . ktor . http . HttpMethod Ċ import Ġio . ktor . http . HttpStatusCode Ċ import Ġio . ktor . routing . Routing Ċ import Ġio . ktor . routing . route Ċ import Ġio . ktor . server . testing . contentType Ċ import Ġio . ktor . server . testing . handle Request Ċ import Ġnl . t ude lf t . book lab . backend . book lab Ċ import Ġnl . t ude lf t . book lab . backend . configure Authorization Ċ import Ġnl . t ude lf t . book lab . backend . create TestContext Ċ import Ġnl . t ude lf t . book lab . backend . ktor . Routes Ċ import Ġnl . t ude lf t . book lab . backend . services . catalog ue . Book Ċ import Ġnl . t ude lf t . book lab . backend . services . catalog ue . Catalog ue Conversion Service Ċ import Ġnl . t ude lf t . book lab . backend . services . catalog ue . Catalog ue Service Ċ import Ġnl . t ude lf t . book lab . backend . spring . bootstrap Ċ import Ġnl . t ude lf t . book lab . backend . with Test Engine Ċ import Ġnl . t ude lf t . book lab . catalog ue . Identifier Ċ import Ġorg . junit . jupiter . api . Assertions . assertEquals Ċ import Ġorg . junit . jupiter . api . Assertions . assertTrue Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . springframework . context . support . beans Ċ import Ġnl . t ude lf t . book lab . catalog ue . Book Ġas ĠAbstract Book Ċ Ċ /** Ċ Ġ* ĠUnit Ġtest Ġsuite Ġfor Ġthe Ġcatalog ue Ġendpoint Ġof Ġthe ĠBook Lab ĠREST Ġapi . Ċ Ġ*/ Ċ internal Ġclass ĠCatalog ue Test Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġ[ Catalog ue Service ] Ġto Ġuse . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġlateinit Ġvar Ġcatalog ue : ĠCatalog ue Service ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe ĠJack son Ġmapper Ġclass Ġthat Ġmaps ĠJSON Ġto Ġobjects . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġlateinit Ġvar Ġmapper : ĠObjectMapper ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġmapper Ġ= Ġj ack son ObjectMapper () ĊĠĠĠĠĠĠĠ Ġmapper . register Module ( Simple Module (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Abstract Type Mapping ( Abstract Book :: class . java , ĠBook :: class . java ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġcatalog ue Ġ= Ġmock () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` client Ġshould Ġbe Ġauthorized `() Ġ= Ġwith Test Engine ({ Ġmodule () Ġ}) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġhandle Request ( HttpMethod . Get , Ġ"/ api / catalog ue ") ĊĠĠĠĠĠĠĠ Ġwith ( request ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . Unauthorized , Ġresponse . status ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` client Ġshould Ġhave Ġcorrect Ġscope `() Ġ= Ġwith Test Engine ({ Ġmodule () Ġ}) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġhandle Request ( HttpMethod . Get , Ġ"/ api / catalog ue ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure Authorization (" test ", ĠlistOf (" test ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwith ( request ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . Forbidden , Ġresponse . status ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` query Ġcatalog ue Ġwithout Ġparameters `() Ġ= Ġwith Test Engine ({ Ġmodule () Ġ}) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġhandle Request ( HttpMethod . Get , Ġ"/ api / catalog ue ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure Authorization (" test ", ĠlistOf (" catalog ue ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwith ( request ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . BadRequest , Ġresponse . status ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` query Ġcatalog ue Ġwith Ġkeywords `() Ġ= Ġwith Test Engine ({ Ġmodule () Ġ}) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbooks Ġ= ĠlistOf ( Book ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ" test ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġidentifiers Ġ= Ġmap Of ( Identifier . INTERNAL Ġto Ġ" test "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" The Ġont dek king Ġvan Ġde Ġhe mel ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauthors Ġ= ĠlistOf (" H arry ĠMul isch ") ĊĠĠĠĠĠĠĠ Ġ)) ĊĊĠĠĠĠĠĠĠ Ġcatalog ue . stub Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Blocking Ġ{ Ġquery ( eq (" hello "), Ġeq ( 5 )) Ġ} Ġdo Return Ġbooks ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġhandle Request ( HttpMethod . Get , Ġ"/ api / catalog ue ? query = hello ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure Authorization (" test ", ĠlistOf (" catalog ue ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwith ( request ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . OK , Ġresponse . status ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( response . contentType (). match ( ContentType . Application . Json )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse : ĠApiResponse . Success < List < Book >> ? Ġ= Ġresponse . content ?. let Ġ{ Ġmapper . readValue ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( books , Ġresponse ?. data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġverify Blocking ( catalog ue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery ( eq (" hello "), Ġeq ( 5 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` query Ġcatalog ue Ġwith Ġtitle Ġand Ġauthor `() Ġ= Ġwith Test Engine ({ Ġmodule () Ġ}) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbooks Ġ= ĠlistOf ( Book ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ" test ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġidentifiers Ġ= Ġmap Of ( Identifier . INTERNAL Ġto Ġ" test "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" The Ġont dek king Ġvan Ġde Ġhe mel ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauthors Ġ= ĠlistOf (" H arry ĠMul isch ") ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġcatalog ue . stub Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Blocking Ġ{ Ġquery ( eq (" Test "), Ġeq (" Test "), Ġeq ( 5 )) Ġ} Ġdo Return Ġbooks ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġhandle Request ( HttpMethod . Get , Ġ"/ api / catalog ue ? title = Test & author = Test ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure Authorization (" test ", ĠlistOf (" catalog ue ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwith ( request ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . OK , Ġresponse . status ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( response . contentType (). match ( ContentType . Application . Json )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse : ĠApiResponse . Success < List < Book >> ? Ġ= Ġresponse . content ?. let Ġ{ Ġmapper . readValue ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( books , Ġresponse ?. data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġverify Blocking ( catalog ue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery ( eq (" Test "), Ġeq (" Test "), Ġeq ( 5 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` query Ġcatalog ue Ġwith Ġtitle Ġbut Ġnot Ġauthor `() Ġ= Ġwith Test Engine ({ Ġmodule () Ġ}) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbooks Ġ= ĠlistOf ( Book ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ" test ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġidentifiers Ġ= Ġmap Of ( Identifier . INTERNAL Ġto Ġ" test "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" The Ġont dek king Ġvan Ġde Ġhe mel ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauthors Ġ= ĠlistOf (" H arry ĠMul isch ") ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġcatalog ue . stub Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Blocking Ġ{ Ġquery ( eq (" Test "), Ġeq (" Test "), Ġeq ( 5 )) Ġ} Ġdo Return Ġbooks ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġhandle Request ( HttpMethod . Get , Ġ"/ api / catalog ue ? title = Test ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure Authorization (" test ", ĠlistOf (" catalog ue ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwith ( request ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . BadRequest , Ġresponse . status ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( response . contentType (). match ( ContentType . Application . Json )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse : ĠApiResponse . Failure ? Ġ= Ġresponse . content ?. let Ġ{ Ġmapper . readValue ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" invalid _ request ", Ġresponse ?. error ?. code ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` query Ġcatalog ue Ġwith Ġtitle Ġand Ġauthor Ġwith Ġcustom Ġlimit `() Ġ= Ġwith Test Engine ({ Ġmodule () Ġ}) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbooks Ġ= ĠlistOf ( Book ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ" test ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġidentifiers Ġ= Ġmap Of ( Identifier . INTERNAL Ġto Ġ" test "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" The Ġont dek king Ġvan Ġde Ġhe mel ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauthors Ġ= ĠlistOf (" H arry ĠMul isch ") ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġcatalog ue . stub Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Blocking Ġ{ Ġquery ( eq (" Test "), Ġeq (" Test "), Ġeq ( 1 0 )) Ġ} Ġdo Return Ġbooks ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġhandle Request ( HttpMethod . Get , Ġ"/ api / catalog ue ? title = Test & author = Test & max = 1 0 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure Authorization (" test ", ĠlistOf (" catalog ue ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwith ( request ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . OK , Ġresponse . status ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( response . contentType (). match ( ContentType . Application . Json )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse : ĠApiResponse . Success < List < Book >> ? Ġ= Ġresponse . content ?. let Ġ{ Ġmapper . readValue ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( books , Ġresponse ?. data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġverify Blocking ( catalog ue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery ( eq (" Test "), Ġeq (" Test "), Ġeq ( 1 0 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` query Ġcatalog ue Ġwith Ġtitle Ġand Ġauthor Ġwith Ġinvalid Ġlimit `() Ġ= Ġwith Test Engine ({ Ġmodule () Ġ}) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbooks Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBook ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ" test ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġidentifiers Ġ= Ġmap Of ( Identifier . INTERNAL Ġto Ġ" test "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" The Ġont dek king Ġvan Ġde Ġhe mel ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthors Ġ= ĠlistOf (" H arry ĠMul isch ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġcatalog ue . stub Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Blocking Ġ{ Ġquery ( eq (" Test "), Ġeq (" Test "), Ġeq ( 5 )) Ġ} Ġdo Return Ġbooks ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġhandle Request ( HttpMethod . Get , Ġ"/ api / catalog ue ? title = Test & author = Test & max = tw enty ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure Authorization (" test ", ĠlistOf (" catalog ue ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwith ( request ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . OK , Ġresponse . status ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( response . contentType (). match ( ContentType . Application . Json )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse : ĠApiResponse . Success < List < Book >> ? Ġ= Ġresponse . content ?. let Ġ{ Ġmapper . readValue ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( books , Ġresponse ?. data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġverify Blocking ( catalog ue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery ( eq (" Test "), Ġeq (" Test "), Ġeq ( 5 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` query Ġwith Ġmethod Ġother Ġthan ĠGET `() Ġ= Ġwith Test Engine ({ Ġmodule () Ġ}) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġhandle Request ( HttpMethod . Post , Ġ"/ api / catalog ue ? title = Test & author = Test & max = 1 0 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure Authorization (" test ", ĠlistOf (" catalog ue ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwith ( request ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . Method Not Allowed , Ġresponse . status ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( response . contentType (). match ( ContentType . Application . Json )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse : ĠApiResponse . Failure ? Ġ= Ġresponse . content ?. let Ġ{ Ġmapper . readValue ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" method _ not _ allowed ", Ġresponse ?. error ?. code ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` lookup Ġunknown Ġbook `() Ġ= Ġwith Test Engine ({ Ġmodule () Ġ}) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġhandle Request ( HttpMethod . Get , Ġ"/ api / catalog ue / 1 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure Authorization (" test ", ĠlistOf (" catalog ue ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwith ( request ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . NotFound , Ġresponse . status ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( response . contentType (). match ( ContentType . Application . Json )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse : ĠApiResponse . Failure ? Ġ= Ġresponse . content ?. let Ġ{ Ġmapper . readValue ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" not _ found ", Ġresponse ?. error ?. code ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` lookup Ġknown Ġbook `() Ġ= Ġwith Test Engine ({ Ġmodule () Ġ}) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbook Ġ= ĠBook ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ" test ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġidentifiers Ġ= Ġmap Of ( Identifier . INTERNAL Ġto Ġ" test "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" The Ġont dek king Ġvan Ġde Ġhe mel ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauthors Ġ= ĠlistOf (" H arry ĠMul isch ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġcatalog ue . stub Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Blocking Ġ{ Ġfind ById ( eq (" 1 ")) Ġ} Ġdo Return Ġbook ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġhandle Request ( HttpMethod . Get , Ġ"/ api / catalog ue / 1 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure Authorization (" test ", ĠlistOf (" catalog ue ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwith ( request ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . OK , Ġresponse . status ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( response . contentType (). match ( ContentType . Application . Json )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse : ĠApiResponse . Success < Book >? Ġ= Ġresponse . content ?. let Ġ{ Ġmapper . readValue ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( book , Ġresponse ?. data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` lookup Ġbook Ġwith Ġinvalid Ġmethod `() Ġ= Ġwith Test Engine ({ Ġmodule () Ġ}) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġhandle Request ( HttpMethod . Post , Ġ"/ api / catalog ue / 1 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure Authorization (" test ", ĠlistOf (" catalog ue ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwith ( request ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . Method Not Allowed , Ġresponse . status ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( response . contentType (). match ( ContentType . Application . Json )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse : ĠApiResponse . Failure ? Ġ= Ġresponse . content ?. let Ġ{ Ġmapper . readValue ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" method _ not _ allowed ", Ġresponse ?. error ?. code ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠApplication . module () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġcreate TestContext Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbe ans Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠApplication Ġroutes ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbean (" routes ") Ġ{ ĠRoutes . from Ġ{ Ġroutes () Ġ} Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbean Ġ{ Ġcatalog ue Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbean Ġ{ ĠCatalog ue Conversion Service ( ref ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. initialize ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcontext . bootstrap ( this ) Ġ{ Ġbook lab () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġroutes Ġof Ġthe Ġapplication . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun ĠRouting . routes () Ġ{ ĊĠĠĠĠĠĠĠ Ġauthenticate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroute ("/ api / catalog ue ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcatalog ue () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ