package Ġtest . mil k . start Ċ Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . fasterxml . jackson . module . kotlin . register Kotlin Module Ċ import Ġio . ktor . http .* Ċ import Ġio . ktor . request .* Ċ import Ġio . ktor . server . testing .* Ċ import Ġio . mil k . products . Purchase Info Ċ import Ġio . mil k . start . module Ċ import Ġio . mock k . clear All Mocks Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . async Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Ignore Ċ import Ġorg . junit . Test Ċ import Ġtest . mil k . Test Scenario Support Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertFalse Ċ import Ġkotlin . test . assertTrue ĊĊ Ċ class ĠApp Test Ġ{ ĊĠĠĠ Ġprivate Ġval Ġengine Ġ= ĠTest Application Engine () ĊĠĠĠ Ġprivate Ġval Ġmapper : ĠObjectMapper Ġ= ĠObjectMapper (). register Kotlin Module () ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġbefore () Ġ{ ĊĠĠĠĠĠĠĠ Ġclear All Mocks () ĊĠĠĠĠĠĠĠ ĠTest Scenario Support (). load Test Scenario (" products ") ĊĠĠĠĠĠĠĠ Ġengine . start ( wait Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġengine . application . module () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Index () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( engine ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( handle Request ( HttpMethod . Get , Ġ"/ ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 0 0 , Ġresponse . status ()?. value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( response . content !!. contains (" mil k ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( response . content !!. contains (" b acon ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( response . content !!. contains (" t una ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( response . content !!. contains (" eg gs ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( response . content !!. contains (" kom bu cha ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( response . content !!. contains (" app les ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( response . content !!. contains (" ice Ġtea ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( response . content !!. contains (" y og urt ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Quantity () Ġ{ ĊĠĠĠĠĠĠĠ Ġmake P urchases ("/ api / v 1 / products ") ĊĊĠĠĠĠĠĠĠ Ġwith ( engine ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( handle Request ( io . ktor . http . HttpMethod . Get , Ġ"/ ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( response . content !!. contains (" 3 1 ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/// ĊĊĠĠĠ Ġprivate Ġfun Ġmake P urchases ( uri : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( 1 .. 1 0 0 ). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġasync Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( engine ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( handle Request ( HttpMethod . Post , Ġuri ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( HttpHeaders . ContentType , ĠContentType . Application . Json . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Body ( mapper . writeValue AsString ( Purchase Info ( 4 2 , Ġ" mil k ", Ġ 1 ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 0 1 , Ġresponse . status ()?. value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }