package Ġcom . orry wor x . oauth 2 client credentials flow Ċ Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . junit . jupiter . api . Assertions Ċ import Ġorg . junit . jupiter . api . Before All Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . Test Instance Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . boot . test . context . SpringBootTest Ċ import Ġorg . springframework . boot . test . web . client . Test Rest Template Ċ import Ġorg . springframework . http . Http Entity Ċ import Ġorg . springframework . http . HttpHeaders Ċ import Ġorg . springframework . http . HttpStatus Ċ import Ġorg . springframework . http . MediaType Ċ import Ġorg . springframework . security . oauth 2 . common . OAuth 2 AccessToken Ċ import Ġorg . springframework . util . Linked Multi Value Map Ċ import Ġorg . springframework . web . client . Resource AccessException Ċ Ċ @ Test Instance ( Test Instance . Lifecycle . PER _ CLASS ) Ċ @ SpringBootTest ( web Environment Ġ= ĠSpring Boot Test . Web Environment . RANDOM _ PORT ) Ċ class ĠO auth 2 Client Credentials Flow Application Tests () Ġ{ ĊĊĠĠĠ Ġ@ Before All ĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġheaders Ġ= ĠHttp Headers (). apply Ġ{ ĠcontentType Ġ= ĠMediaType . APPLICATION _ FORM _ URL ENCODE D Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= ĠLinked Multi Value Map < String , ĠString >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd (" client _ id ", Ġ" client ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd (" client _ secret ", Ġ" secret ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd (" grant _ type ", Ġ" client _ credentials ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= Ġrest Template . post For Entity ("/ oauth / token ", ĠHttp Entity ( map , Ġheaders ), ĠOAuth 2 AccessToken :: class . java ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( token . statusCode ). isEqualTo ( HttpStatus . OK ) ĊĊĠĠĠĠĠĠĠ Ġbe arer Ġ= ĠHttp Headers (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Bearer Auth ( token . body . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` echo `() Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat ( rest Template . post For Entity ("/ widget ", ĠHttp Entity ( widget , Ġbe arer ), ĠWidget :: class . java ). body ). isEqualTo ( widget ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` echo Ġwithout Ġauth `() Ġ{ ĊĠĠĠĠĠĠĠ ĠAssertions . assert Throws ( Resource AccessException :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrest Template . post For Entity ("/ widget ", ĠHttp Entity ( widget ), ĠWidget :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġwidget Ġ= ĠWidget ( 2 2 , Ġ" Cor onav irus ") ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġrest Template : ĠTest Rest Template ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbe arer : ĠHttp Headers Ċ } Ċ