package Ġio . ktor . tests . server . http Ċ Ċ import Ġio . ktor . application .* Ċ import Ġio . ktor . content .* Ċ import Ġio . ktor . http .* Ċ import Ġio . ktor . request .* Ċ import Ġio . ktor . server . testing .* Ċ import Ġorg . junit . Test Ċ import Ġkotlin . test .* Ċ Ċ class ĠTest Engine Multipart Test Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Non Multipart () Ġ{ ĊĠĠĠĠĠĠĠ Ġtest Multi Parts ({ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNull ( it , Ġ" it Ġshould Ġbe Ġno Ġmultipart Ġdata ") ĊĠĠĠĠĠĠĠ Ġ}, Ġsetup Ġ= Ġ{}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Multi Parts Default () Ġ{ ĊĠĠĠĠĠĠĠ Ġtest Multi Parts ({ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNotNull ( it , Ġ" it Ġshould Ġbe Ġmultipart Ġdata ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( emptyList < Part Data >(), Ġit . read All Parts ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, Ġsetup Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( HttpHeaders . ContentType , ĠContentType . Multi Part . FormData . toString ()) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Multi Parts Plain Item () Ġ{ ĊĠĠĠĠĠĠĠ Ġtest Multi Parts ({ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNotNull ( it , Ġ" it Ġshould Ġbe Ġmultipart Ġdata ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparts Ġ= Ġit . read All Parts () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġparts . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" field 1 ", Ġparts [ 0 ]. part Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" plain Ġfield ", Ġ( parts [ 0 ] Ġas ĠPart Data . Form Item ). value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparts [ 0 ]. dispose () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, Ġsetup Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( HttpHeaders . ContentType , ĠContentType . Multi Part . FormData . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmulti Part Entries Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPart Data . Form Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" plain Ġfield ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdispose Ġ= Ġ{}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpart Headers Ġ= Ġheaders Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . Content Disposition , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContent Disposition . File . with Parameter ( Content Disposition . Parameters . Name , Ġ" field 1 "). toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Multi Parts File Item () Ġ{ ĊĠĠĠĠĠĠĠ Ġtest Multi Parts ({ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNotNull ( it , Ġ" it Ġshould Ġbe Ġmultipart Ġdata ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparts Ġ= Ġit . read All Parts () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġparts . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġparts [ 0 ] Ġas ĠPart Data . File Item ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" file Field ", Ġfile . part Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" file . txt ", Ġfile . original FileName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" file Ġcontent ", Ġfile . stream Provider (). reader (). read Text ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile . dispose () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, Ġsetup Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( HttpHeaders . ContentType , ĠContentType . Multi Part . FormData . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmulti Part Entries Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPart Data . File Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstream Provider Ġ= Ġ{ Ġ" file Ġcontent ". toByteArray (). inputStream () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdispose Ġ= Ġ{}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpart Headers Ġ= Ġheaders Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . Content Disposition , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContent Disposition . File ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Parameter ( Content Disposition . Parameters . Name , Ġ" file Field ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Parameter ( Content Disposition . Parameters . FileName , Ġ" file . txt ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Multi Part Should Fail () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith Test Application Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapplication . intercept ( Application Call Pipeline . Call ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . receive Multipart (). read All Parts () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( error : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfail (" This Ġpipeline Ġshouldn 't Ġfinish Ġsuccessfully ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Fails With < AssertionError > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Request ( HttpMethod . Post , Ġ"/ "). await Completion () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Multi Parts ( assert s : Ġsuspend Ġ( Multi Part Data ?) Ġ-> ĠUnit , Ġsetup : ĠTest Application Request . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwith Test Application Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapplication . intercept ( Application Call Pipeline . Call ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( call . request . is Multipart ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert s ( call . receive Multipart ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert s ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Request ( HttpMethod . Post , Ġ"/", Ġsetup ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }