package Ġorg . poly cre o . tests . integration Ċ Ċ import Ġassert k . all Ċ import Ġassert k . assertThat Ċ import Ġassert k . assertions . isEqualTo Ċ import Ġcom . jay way . json path . Json Path Ċ import Ġcom . jay way . json path . Path NotFoundException Ċ import Ġorg . fly way db . test . Fly way Test Execution Listener Ċ import Ġorg . fly way db . test . annotation . Fly way Test Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . poly cre o . kotlin . assert k json . has Size Ċ import Ġorg . poly cre o . kotlin . assert k json . isArray Ċ import Ġorg . poly cre o . kotlin . assert k json . is Int Ċ import Ġorg . poly cre o . kotlin . assert k json . isNot Defined Ċ import Ġorg . poly cre o . kotlin . assert k json . isString Ċ import Ġorg . poly cre o . kotlin . assert k json . json Node Of Ċ import Ġorg . poly cre o . kotlin . assert k json . json Path Ċ import Ġorg . poly cre o . oauth 2 . Dummy Opaque Token Authentication Provider Ċ import Ġorg . springframework . boot . test . web . client . Test Rest Template Ċ import Ġorg . springframework . test . context . Active Profiles Ċ import Ġorg . springframework . test . context . Test Execution Listeners Ċ import Ġorg . springframework . test . context . support . DependencyInjection Test Execution Listener Ċ Ċ private Ġval Ġlogger Ġ= Ġmu . Kotlin Logging . logger Ġ{} Ċ Ċ /** Ċ Ġ* ĠIntegration Ġtest Ġfor ĠChunk able Controller . Ċ Ġ*/ Ċ @ Active Profiles (" test ") Ċ @ Test Execution Listeners ( ĊĠĠĠ ĠDependency Injection Test Execution Listener :: class , ĊĠĠĠ ĠFly way Test Execution Listener :: class Ċ ) Ċ @ Suppress (" Function Naming ", Ġ" Magic Number ") Ċ interface ĠChunk able IntegrationTest < T Ġ: ĠAny > Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRoot Ġpath Ġfor Ġthe Ġresource . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġpath : ĠString ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAccess Ġtoken Ġto Ġuse Ġfor Ġeach Ġrequests . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar ĠaccessToken : ĠString ? ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ Test Rest Template ] Ġto Ġuse Ġfor Ġeach Ġrequests . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġtest Rest Template : ĠTest Rest Template ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġmultiple Ġresources Ġfor Ġtest Ġpreparation . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcreate ( size : ĠInt ): ĠIterable < T > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTest Ġfor ĠList ĠAPI . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠPre condition : Ġempty ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Fly way Test ĊĠĠĠ Ġfun Ġtest List _ Empty () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġexercise ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġtest Rest Template . get For Entity ( path , ĠString :: class . java ) ĊĠĠĠĠĠĠĠ Ġ// Ġverify ĊĠĠĠĠĠĠĠ ĠResponseEntity Assert s . assert Ok ( actual ) ĊĠĠĠĠĠĠĠ ĠassertThat ( json Node Of ( actual . body !! )). all Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson Path (" $. chunk . size "). is Int (). isEqualTo ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson Path (" $. chunk . pagination _ token "). isNot Defined () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson Path ("$ ._ embedded . elements "). isNot Defined () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTest Ġfor ĠList ĠAPI . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠPre condition : Ġ 3 Ġresources Ġexist ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Fly way Test ĊĠĠĠ Ġfun Ġtest List () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġsetup ĊĠĠĠĠĠĠĠ Ġcreate ( 3 ) ĊĠĠĠĠĠĠĠ Ġ// Ġexercise ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġtest Rest Template . get For Entity ( path , ĠString :: class . java ) ĊĠĠĠĠĠĠĠ Ġ// Ġverify ĊĠĠĠĠĠĠĠ ĠResponseEntity Assert s . assert Ok ( actual ) ĊĠĠĠĠĠĠĠ ĠassertThat ( json Node Of ( actual . body !! )). all Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson Path (" $. chunk . size "). is Int (). isEqualTo ( 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson Path (" $. chunk . pagination _ token "). isString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson Path ("$ ._ embedded . elements "). isArray (). has Size ( 3 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTest Ġfor ĠList ĠAPI Ġwith Ġpagination . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠPre condition : Ġ 3 Ġresources Ġexist , Ġrequested Ġby Ġsize = 2 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Fly way Test ĊĠĠĠ Ġfun Ġtest List _ Paged () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġsetup ĊĠĠĠĠĠĠĠ Ġcreate ( 3 ) ĊĠĠĠĠĠĠĠ Ġvar Ġpagination Token : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġrequest Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġretrieved Element Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġ"? size = 2 " Ġ+ Ġif Ġ( pagination Token Ġ!= Ġnull ) Ġ"& next =$ pagination Token " Ġelse Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġexercise ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġtest Rest Template . get For Entity ( path Ġ+ Ġquery , ĠString :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġverify ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponseEntity Assert s . assert Ok ( actual ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Count ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġretrieved Element Count Ġ+= ĠJson Path . read < Int >( actual . body !! , Ġ"$ . chunk . size ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpagination Token Ġ= ĠJson Path . read < String >( actual . body !! , Ġ"$ . chunk . pagination _ token ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠPath NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpagination Token Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( pagination Token Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠ ĠassertThat ( request Count ). isEqualTo ( 3 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( retrie ved Element Count ). isEqualTo ( 3 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTest Ġfor ĠList ĠAPI . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠPre condition : Ġwithout Ġaccess Ġtoken ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠExpected : Ġ 4 0 1 ĠUnauthorized ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Fly way Test ĊĠĠĠ Ġfun Ġtest List _ Without Token _ 4 0 1 () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġsetup ĊĠĠĠĠĠĠĠ ĠaccessToken Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ// Ġexercise ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġtest Rest Template . get For Entity ( path , ĠString :: class . java ) ĊĠĠĠĠĠĠĠ Ġ// Ġverify ĊĠĠĠĠĠĠĠ ĠResponseEntity Assert s . assert Unauthorized ( actual ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTest Ġfor ĠList ĠAPI . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠPre condition : Ġwithout Ġ` ROOT ` Ġor Ġ` *: List *` Ġauthority ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠExpected : Ġ 4 0 3 ĠFor bidden ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Fly way Test ĊĠĠĠ Ġfun Ġtest List _ Without Authority _ 4 0 3 () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġsetup ĊĠĠĠĠĠĠĠ ĠaccessToken Ġ= ĠDummy Opaque Token Authentication Provider . create Dummy Token ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" example - user ", ĠarrayOf (" ACT U ATOR "), ĠarrayOf (" openid ", Ġ" profile "), ĠSystem . currentTimeMillis (), Ġ 6 0 0 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġexercise ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġtest Rest Template . get For Entity ( path , ĠString :: class . java ) ĊĠĠĠĠĠĠĠ Ġ// Ġverify ĊĠĠĠĠĠĠĠ ĠResponseEntity Assert s . assert Forbidden ( actual ) ĊĠĠĠ Ġ} Ċ } Ċ