package Ġtop . better code . aut od oc . core . model Ċ Ċ import Ġtop . better code . aut od oc . core . Aut od oc Extension Ċ import Ġtop . better code . aut od oc . core . operation . Doc Operation Ċ import Ġtop . better code . aut od oc . core . postman . Event Ċ import Ġtop . better code . aut od oc . core . postman . Script Ċ import Ġtop . better code . aut od oc . core . read Collections Ċ import Ġtop . better code . aut od oc . core . write Collections Ċ import Ġtop . better code . logging . operation . Operation Ċ import Ġorg . springframework . http . MediaType Ċ import Ġjava . io . File Ċ Ċ /** Ċ Ġ* Ċ Ġ* Ġ@ author ĠPeter ĠW u Ċ Ġ*/ Ċ data Ġclass ĠDoc Module ( val Ġroot Module Dic : ĠFile ?, Ġval Ġproject Module Dic : ĠFile ?) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġcollections File : ĠFile Ġ= ĠFile ( project Module Dic , Ġ" collections . yml ") ĊĠĠĠ Ġval Ġcollections : ĠLinked HashSet < I Collection > ĊĠĠĠ Ġprivate Ġval Ġroot Collections : ĠLinked HashSet < Doc Collection > ĊĠĠĠ Ġprivate Ġval Ġproject Collections : ĠLinked HashSet < Doc Collection > ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire (!( project Module Dic Ġ== Ġnull Ġ&& Ġroot Module Dic Ġ== Ġnull )) Ġ{ Ġ" project Module Dic , root Module Dic ä¸įèĥ½ åĲĮæĹ¶ ä¸º null " Ġ} ĊĊĠĠĠĠĠĠĠ Ġcollections Ġ= Ġlinked Set Of () ĊĠĠĠĠĠĠĠ Ġif Ġ( root Module Dic ?. exists () Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot Collections File Ġ= ĠFile ( root Module Dic , Ġ" collections . yml ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot Collections Ġ= Ġif Ġ( root Collections File . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot Collections File . read Collections () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlinked Set Of () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot Collections . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollections . add ( Combine Collection ( it , Ġnull )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot Collections Ġ= Ġlinked Set Of () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġproject Collections Ġ= Ġif Ġ( collections File . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcollections File . read Collections () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlinked Set Of () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġproject Collections . forEach Ġ{ Ġcollection Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexist Ġ= Ġcollections . find Ġ{ Ġit . name Ġ== Ġcollection . name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( exist Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollections . add ( collection ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( exist Ġas ĠCombine Collection ). project Collection Ġ= Ġcollection ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġall Module Files ( action : Ġ( File ) Ġ-> ĠCollection < File >): ĠCollection < File > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult : ĠMutable Collection < File > Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġif Ġ( project Module Dic ?. exists () Ġ== Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . addAll ( action ( project Module Dic )) ĊĠĠĠĠĠĠĠ Ġif Ġ( this . root Module Dic ?. exists () Ġ== Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . addAll ( action ( this . root Module Dic )) ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġname : ĠString Ġ= Ġmodule File Ġ{ Ġit . name Ġ} ĊĊĠĠĠ Ġfun Ġ< T > Ġmodule File ( action : Ġ( File ) Ġ-> ĠT ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( project Module Dic ?. exists () Ġ== Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction ( project Module Dic ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction ( root Module Dic !! ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcollections ( collection Name : ĠString , Ġname : ĠString ): ĠDoc Collection Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcollection Tree Ġ= Ġproject Collections . find Ġ{ Ġit . name Ġ== Ġcollection Name Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( collection Tree Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcollection Tree Ġ= ĠDoc Collection ( collection Name , Ġdir Ġ= ĠFile ( project Module Dic , Ġ" collection /$ collection Name ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject Collections . add ( collection Tree ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcollection Tree . items . add ( name ) ĊĠĠĠĠĠĠĠ Ġreturn Ġcollection Tree ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclean () Ġ{ ĊĠĠĠĠĠĠĠ Ġ( root Collections Ġ+ Ġproject Collections ). forEach Ġ{ Ġcollection Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitems Ġ= Ġcollection . items ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcollection . dir . list Files ()?. filter Not Ġ{ Ġitems . contains ( it . name Without Extension ) Ġ|| Ġit . name Ġ== Ġ" field . yml " Ġ} ?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . delete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" delete Ġ$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( this . root Module Dic Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot Collection Names Ġ= Ġroot Collections . map Ġ{ Ġit . name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( this . root Module Dic , Ġ" collection "). list Files ()?. filter Not Ġ{ Ġroot Collection Names . contains ( it . name ) Ġ} ?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . delete Re cursively () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" delete Ġ$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġsub Collection Names Ġ= Ġproject Collections . map Ġ{ Ġit . name Ġ} ĊĠĠĠĠĠĠĠ ĠFile ( project Module Dic , Ġ" collection "). list Files ()?. filter Not Ġ{ Ġsub Collection Names . contains ( it . name ) Ġ} ?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . delete Re cursively () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" delete Ġ$ it ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠwriteTo Disk () Ġ{ ĊĠĠĠĠĠĠĠ Ġclean () ĊĠĠĠĠĠĠĠ Ġcollections File . write Collections ( project Collections ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpost man Events ( operation : ĠDoc Operation , Ġaut od oc : ĠAut od oc Extension ): ĠList < Event > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠlistOf ( Event (" pr ere quest ", ĠScript ( exec Ġ= Ġoperation . pr ere quest . if Empty Ġ{ Ġdefault Pr ere quest Exec ( operation ) Ġ})), ĠEvent (" test ", ĠScript ( exec Ġ= Ġoperation . test Exec . if Empty Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Post man Test Exec ( operation , Ġaut od oc ) ĊĠĠĠĠĠĠĠ Ġ} ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdefault Post man Test Exec ( operation : ĠOperation , Ġaut od oc : ĠAut od oc Extension ): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠstatusCode Ġ= Ġoperation . response . statusCode ĊĠĠĠĠĠĠĠ Ġval Ġexec Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġval Ġmax Response Time Ġ= Ġaut od oc . max Response Time ĊĠĠĠĠĠĠĠ Ġexec . add (" pm . test (' éªĮè¯ģ åĵįåºĶ çĬ¶æĢģ çłģ æĺ¯ $ statusCode ', Ġfunction Ġ() Ġ{ ") ĊĠĠĠĠĠĠĠ Ġexec . add (" Ġ Ġpm . response . to . have . status ($ statusCode ); ") ĊĠĠĠĠĠĠĠ Ġexec . add (" }); ") ĊĠĠĠĠĠĠĠ Ġexec . add ("") ĊĠĠĠĠĠĠĠ Ġexec . add (" pm . test (' éªĮè¯ģ åĵįåºĶ æĹ¶éĹ´ å°ı äºİ ${ max Response Time } ms ', Ġfunction Ġ() Ġ{ ") ĊĠĠĠĠĠĠĠ Ġexec . add (" Ġ Ġpm . expect ( pm . response . response Time ). to . be . below ($ max Response Time ); ") ĊĠĠĠĠĠĠĠ Ġexec . add (" }); ") ĊĠĠĠĠĠĠĠ Ġexec . add ("") ĊĠĠĠĠĠĠĠ Ġif Ġ( operation . response . headers . contentType ?. is Compatible With ( MediaType . APPLICATION _ JSON ) Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexec . add (" pm . test (' éªĮè¯ģ è¿ĶåĽŀ json æł¼å¼ı ', Ġfunction Ġ() Ġ{ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexec . add (" Ġ Ġpm . response . to . be . json ; ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( aut od oc . wrap Response Ġ|| Ġoperation . request . rest Uri Ġ== Ġaut od oc . auth Uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexec . add (" Ġ Ġvar Ġjson Data Ġ= Ġpm . response . json (); ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( aut od oc . wrap Response ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexec . add (" Ġ Ġpm . expect ( json Data . status ). to . equal (\" 2 0 0 \ "); ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( operation . request . rest Uri Ġ== Ġaut od oc . auth Uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaut od oc . auth Variables . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexec . add (" Ġ Ġpm . globals . set (' ${ it . substring After Last ('.') }', Ġjson Data .$ it ); ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexec . add (" }); ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexec . add ("") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġexec ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġoperation Ġoperation ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġdefault Pr ere quest Exec ( operation : ĠOperation ): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexec Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġoperation . request . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoperation . request . uri Variables . forEach Ġ{ Ġ( t , Ġu ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexec . add (" pm . globals . set ('$ t ', Ġ'$ u '); ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġexec ĊĠĠĠ Ġ} Ċ Ċ }