package Ġcom . j algo arena . web Ċ Ċ import Ġcom . fasterxml . jackson . module . kotlin . jackson ObjectMapper Ċ import Ġcom . j algo arena . code generation . Java Code Generator Ċ import Ġcom . j algo arena . data . Problems Repository Ċ import Ġcom . j algo arena . domain . Problem Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . mockito . BDD Mockito . given Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . boot . test . autoconfigure . web . reactive . Web Flux Test Ċ import Ġorg . springframework . boot . test . context . Test Configuration Ċ import Ġorg . springframework . boot . test . mock . mockito . Mock Bean Ċ import Ġorg . springframework . context . annotation . Bean Ċ import Ġorg . springframework . http . MediaType Ċ import Ġorg . springframework . test . context . Context Configuration Ċ import Ġorg . springframework . test . context . junit 4 . Spring Runner Ċ import Ġorg . springframework . test . web . reactive . server . Web Test Client Ċ Ċ @ RunWith ( Spring Runner :: class ) Ċ @ Web Flux Test ( Problems Controller :: class ) Ċ @ Context Configuration ( classes Ġ= Ġ[( Problems Controller Spec . Controller Test Configuration :: class )]) Ċ class ĠPro blems Controller Spec Ġ{ ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġweb Test Client : ĠWeb Test Client ĊĊĠĠĠ Ġ@ Mock Bean ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġproblems Client : ĠPro blems Repository ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġget _ problems _ returns _ 2 0 0 _ and _ all _ available _ problems () Ġ{ ĊĠĠĠĠĠĠĠ Ġgiven ( problems Client . findAll ()). willReturn ( listOf ( PRO BLE M )) ĊĊĠĠĠĠĠĠĠ Ġweb Test Client . get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. uri ("/ problems ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. accept ( MediaType . APPLICATION _ JSON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. exchange () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. expect Status (). is Ok ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. expect Body () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. json Path ("$ "). isArray ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. json Path ("$ [ 0 ]. id "). isEqualTo (" fib ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. json Path ("$ [ 0 ]. title "). isEqualTo (" Fib onacci ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġget _ problem _ returns _ 2 0 0 _ and _ a _ problem () Ġ{ ĊĠĠĠĠĠĠĠ Ġgiven ( problems Client . find (" fib ")). willReturn ( PRO BLE M ) ĊĊĠĠĠĠĠĠĠ Ġweb Test Client . get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. uri ("/ problems / fib ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. accept ( MediaType . APPLICATION _ JSON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. exchange () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. expect Status (). is Ok ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. expect Body () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. json Path (" $. id "). isEqualTo (" fib ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. json Path (" $. title "). isEqualTo (" Fib onacci ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Configuration ĊĠĠĠ Ġopen Ġclass ĠController Test Configuration Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Bean ĊĠĠĠĠĠĠĠ Ġopen Ġfun Ġjava Code Generator () Ġ= ĠJava Code Generator () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ// language = JSON ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠPRO BLE M _ AS _ JSON Ġ= Ġ""" { ĊĠĠĠĠĠ Ġ" id ": Ġ" fib ", ĊĠĠĠĠĠ Ġ" title ": Ġ" Fib onacci ", ĊĠĠĠĠĠ Ġ" description ": Ġ" Write Ġthe Ġ` fib ` Ġfunction Ġto Ġreturn Ġthe ĠN 't h Ġterm .\ r \ n We Ġstart Ġcounting Ġfrom :\ r \ n * Ġfib ( 0 ) Ġ= Ġ 0 \ r \ n * Ġfib ( 1 ) Ġ= Ġ 1 .\ r \ n \ r \ n ### ĠExamples \ r \ n \ r \ n * Ġ` 0 ` Ġ-> Ġ` 0 `\ r \ n * Ġ` 6 ` Ġ-> Ġ` 8 `", ĊĠĠĠĠĠ Ġ" time Limit ": Ġ 1 , ĊĠĠĠĠĠ Ġ" func ": Ġ{ ĊĠĠĠĠĠĠĠ Ġ" name ": Ġ" fib ", ĊĠĠĠĠĠĠĠ Ġ" return Statement ": Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ" type ": Ġ" java . lang . Long ", ĊĠĠĠĠĠĠĠĠĠ Ġ" comment ": Ġ" ĠN 't h Ġterm Ġof ĠF ib onacci Ġsequence " ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ" parameters ": Ġ[ ĊĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" name ": Ġ" n ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" type ": Ġ" java . lang . Integer ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" comment ": Ġ" id Ġof Ġfib onacci Ġterm Ġto Ġbe Ġreturned " ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ] ĊĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠ Ġ" test Cases ": Ġ[ ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ" input ": Ġ[ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 " ĊĠĠĠĠĠĠĠĠĠ Ġ], ĊĠĠĠĠĠĠĠĠĠ Ġ" output ": Ġ 0 ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ" input ": Ġ[ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 " ĊĠĠĠĠĠĠĠĠĠ Ġ], ĊĠĠĠĠĠĠĠĠĠ Ġ" output ": Ġ 1 ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ" input ": Ġ[ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 " ĊĠĠĠĠĠĠĠĠĠ Ġ], ĊĠĠĠĠĠĠĠĠĠ Ġ" output ": Ġ 1 ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ" input ": Ġ[ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 3 " ĊĠĠĠĠĠĠĠĠĠ Ġ], ĊĠĠĠĠĠĠĠĠĠ Ġ" output ": Ġ 2 ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ" input ": Ġ[ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 4 " ĊĠĠĠĠĠĠĠĠĠ Ġ], ĊĠĠĠĠĠĠĠĠĠ Ġ" output ": Ġ 3 ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ" input ": Ġ[ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 5 " ĊĠĠĠĠĠĠĠĠĠ Ġ], ĊĠĠĠĠĠĠĠĠĠ Ġ" output ": Ġ 5 ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ" input ": Ġ[ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 6 " ĊĠĠĠĠĠĠĠĠĠ Ġ], ĊĠĠĠĠĠĠĠĠĠ Ġ" output ": Ġ 8 ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ" input ": Ġ[ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 0 " ĊĠĠĠĠĠĠĠĠĠ Ġ], ĊĠĠĠĠĠĠĠĠĠ Ġ" output ": Ġ 6 7 6 5 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ], ĊĠĠĠĠĠ Ġ" level ": Ġ 1 ĊĠĠĠ Ġ} ĊĠĠĠ Ġ""" ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠPRO BLE M Ġ= Ġj ack son ObjectMapper (). readValue ( PRO BLE M _ AS _ JSON , ĠProblem :: class . java ) ĊĠĠĠ Ġ} Ċ } Ċ