// ĠCopyright Ġ 2 0 1 9 ĠAmazon . com , ĠInc . Ġor Ġits Ġaffiliates . ĠAll ĠRights ĠReserved . Ċ // ĠSPDX - License - Identifier : ĠApache - 2 . 0 Ċ Ċ package Ġsoftware . aws . tool k its . jetbrains . services . lambda . sam Ċ Ċ import Ġcom . intellij . psi . Psi File Factory Ċ import Ġcom . intellij . test Framework . Project Rule Ċ import Ġcom . intellij . test Framework . run In Ed t AndGet Ċ import Ġcom . intellij . test Framework . run In Ed t And Wait Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . jetbrains . yaml . YAML Language Ċ import Ġorg . jetbrains . yaml . psi . YAML File Ċ import Ġorg . jetbrains . yaml . psi . YAML KeyValue Ċ import Ġorg . jetbrains . yaml . psi . YAML Mapping Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . rules . Temporary Folder Ċ import Ġsoftware . aws . tool k its . jetbrains . services . cloudformation . Function Ċ import Ġsoftware . aws . tool k its . jetbrains . services . lambda . sam . Sam Template Utils . find Functions From Template Ċ import Ġsoftware . aws . tool k its . jetbrains . services . lambda . sam . Sam Template Utils . function From Element Ċ Ċ class ĠSam Template UtilsTest Ġ{ ĊĊĠĠĠ Ġ@ Rule ĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġval Ġproject Rule Ġ= ĠProject Rule () ĊĊĠĠĠ Ġ@ Rule ĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġval Ġfolder Rule Ġ= ĠTemporary Folder () ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcan Pull Functions From AS am Template () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġyaml File (). virtual File ĊĊĠĠĠĠĠĠĠ Ġrun In Ed t And Wait Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfunctions Ġ= Ġfind Functions From Template ( project Rule . project , Ġfile ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( functions ). has Size ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Function ( functions [ 0 ], Ġ" My Sam Function ", Ġ" hello . zip ", Ġ" helloworld . App :: handle Request ", Ġ" java 8 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Function ( functions [ 1 ], Ġ" My Lambda Function ", Ġ" foo . zip ", Ġ" foobar . App :: handle Request ", Ġ" java 8 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcan Pull Function From AS am Template With Global () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġyaml File With Global (). virtual File ĊĠĠĠĠĠĠĠ Ġrun In Ed t And Wait Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfunctions Ġ= Ġfind Functions From Template ( project Rule . project , Ġfile ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( functions ). has Size ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Function ( functions [ 0 ], Ġ" My Sam Function ", Ġ" hello . zip ", Ġ" helloworld . App :: handle Request ", Ġ" java 8 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Function ( functions [ 1 ], Ġ" My Lambda Function ", Ġ" foo . zip ", Ġ" foobar . App :: handle Request ", Ġ" java 8 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcan Convert AP si Element Function () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġyaml File () ĊĊĠĠĠĠĠĠĠ Ġval Ġfunction Ġ= Ġrun In Ed t AndGet Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfunction Element Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile . findBy Location (" Resources . My Sam Function ") Ġ?: Ġthrow ĠRuntimeException (" Can 't Ġfind ĠMy Sam Function ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfunction From Element ( function Element ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġthrow ĠAssertionError (" Function Ġnot Ġfound ") ĊĊĠĠĠĠĠĠĠ Ġassert Function ( function , Ġ" My Sam Function ", Ġ" hello . zip ", Ġ" helloworld . App :: handle Request ", Ġ" java 8 ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġyaml File (): ĠYAML File Ġ= Ġrun In Ed t AndGet Ġ{ ĊĠĠĠĠĠĠĠ ĠPsi File Factory . getInstance ( project Rule . project ). create File FromText ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠYAML Language . INSTANCE , Ġ""" Ċ Resources : ĊĠĠĠ ĠMy Sam Function : ĊĠĠĠĠĠĠĠ ĠType : ĠAWS :: Server less :: Function ĊĠĠĠĠĠĠĠ ĠProperties : ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCode Uri : Ġhello . zip ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHandler : Ġhel loworld . App :: handle Request ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRuntime : Ġjava 8 ĊĠĠĠ ĠMy Lambda Function : ĊĠĠĠĠĠĠĠ ĠType : ĠAWS :: Lambda :: Function ĊĠĠĠĠĠĠĠ ĠProperties : ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCode : Ġfoo . zip ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHandler : Ġfoo bar . App :: handle Request ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRuntime : Ġjava 8 ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) Ġas ĠYAML File ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġyaml File With Global (): ĠYAML File Ġ= Ġrun In Ed t AndGet Ġ{ ĊĠĠĠĠĠĠĠ ĠPsi File Factory . getInstance ( project Rule . project ). create File FromText ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠYAML Language . INSTANCE , Ġ""" Ċ Globals : ĊĠĠĠ ĠFunction : ĊĠĠĠĠĠĠĠ ĠRuntime : Ġjava 8 ĊĠĠĠĠĠĠĠ ĠTimeout : Ġ 1 8 0 Ċ Resources : ĊĠĠĠ ĠMy Sam Function : ĊĠĠĠĠĠĠĠ ĠType : ĠAWS :: Server less :: Function ĊĠĠĠĠĠĠĠ ĠProperties : ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCode Uri : Ġhello . zip ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHandler : Ġhel loworld . App :: handle Request ĊĠĠĠ ĠMy Lambda Function : ĊĠĠĠĠĠĠĠ ĠType : ĠAWS :: Lambda :: Function ĊĠĠĠĠĠĠĠ ĠProperties : ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCode : Ġfoo . zip ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHandler : Ġfoo bar . App :: handle Request ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRuntime : Ġjava 8 ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) Ġas ĠYAML File ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġassert Function ( ĊĠĠĠĠĠĠĠ Ġfunction : ĠFunction , ĊĠĠĠĠĠĠĠ Ġlogical Name : ĠString , ĊĠĠĠĠĠĠĠ Ġcode Location : ĠString , ĊĠĠĠĠĠĠĠ Ġhandler : ĠString , ĊĠĠĠĠĠĠĠ Ġruntime : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrun In Ed t And Wait Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( function . logical Name ). isEqualTo ( logical Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( function . code Location ()). isEqualTo ( code Location ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( function . handler ()). isEqualTo ( handler ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( function . runtime ()). isEqualTo ( runtime ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠYAML File . findBy Location ( location : ĠString ): ĠYAML KeyValue ? Ġ= Ġ( documents . first OrNull ()?. top Level Value Ġas ? ĠYAML Mapping )?. findBy Location ( location ) Ċ Ċ fun ĠYAML Mapping . findBy Location ( location : ĠString ): ĠYAML KeyValue ? Ġ{ ĊĠĠĠ Ġval Ġparts Ġ= Ġlocation . split ('.') ĊĠĠĠ Ġval Ġhead Ġ= Ġparts . first () ĊĠĠĠ Ġval Ġtail Ġ= Ġparts . take Last ( parts . size Ġ- Ġ 1 ) ĊĠĠĠ Ġreturn Ġwhen Ġ( tail . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġget KeyValue ByKey ( head ) ĊĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġ( getKey Value ByKey ( head )?. value Ġas ? ĠYAML Mapping )?. findBy Location ( tail . join ToString (". ")) ĊĠĠĠ Ġ} Ċ }