package Ġcom . ming sh z . login Ċ Ċ import Ġcom . ming sh z . login . test . Test Config Ċ import Ġcom . ming sh z . login . test . entity . User Ċ import Ġme . jiang ca i . common . test . classic . Classic Mvc Test Ċ import Ġorg . junit . Test Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . context . ApplicationContext Ċ import Ġorg . springframework . http . MediaType Ċ import Ġorg . springframework . mock . web . Mock Http Session Ċ import Ġorg . springframework . test . context . Context Configuration Ċ import Ġorg . springframework . test . web . servlet . result . MockMvc Result Matchers . content Ċ import Ġorg . springframework . test . web . servlet . result . MockMvc Result Matchers . status Ċ import Ġorg . springframework . web . util . Nested Servlet Exception Ċ import Ġjava . time . temporal . Ch rono Unit Ċ Ċ /** Ċ Ġ* Ġ å®¢æĪ·ç«¯ Ċ Ġ* Ġ@ author ĠC J Ċ Ġ*/ Ċ @ Context Configuration ( classes Ġ= Ġ[ Test Config :: class ]) Ċ class ĠClass ic Login Config Test Ġ: ĠClass ic Mvc Test () Ġ{ ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġclassic Login Service : ĠClass ic Login Service < User > ĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġapplication Context : ĠApplication Context ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġchange Password () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġu Ġ= ĠUser () ĊĠĠĠĠĠĠĠ Ġu . username Ġ= Ġrandom Mobile () ĊĠĠĠĠĠĠĠ Ġval Ġraw Password Ġ= Ġrandom Mobile () ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġclassic Login Service . new Login ( u , Ġraw Password ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsession Ġ= Ġmock Mvc . perform ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost ("/ login ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contentType ( MediaType . APPLICATION _ JSON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠobjectMapper . writeValue As Bytes ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" username " Ġto Ġu . username , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" password " Ġto Ġraw Password ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( status (). is Ok ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( content (). string ( u . username )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andReturn () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. request ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. session Ġas ĠMock Http Session ĊĊĠĠĠĠĠĠĠ Ġmock Mvc . perform ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput ("/ password ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. session ( session ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( status (). is 4 xx Client Error ) ĊĊĠĠĠĠĠĠĠ Ġval Ġnew Password Ġ= Ġrandom Mobile () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Mvc . perform ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ("/ password ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. session ( session ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contentType ( MediaType . APPLICATION _ JSON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠobjectMapper . writeValue As Bytes ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" origin Password " Ġto Ġ" 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" new Password " Ġto Ġnew Password ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( status (). is 4 xx Client Error ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠNested Servlet Exception ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmock Mvc . perform ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput ("/ password ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. session ( session ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contentType ( MediaType . APPLICATION _ JSON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠobjectMapper . writeValue As Bytes ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" origin Password " Ġto Ġraw Password , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" new Password " Ġto Ġnew Password ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( status (). is Accepted ) ĊĊĊĊĠĠĠĠĠĠĠ Ġmock Mvc . perform ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost ("/ login ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contentType ( MediaType . APPLICATION _ JSON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠobjectMapper . writeValue As Bytes ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" username " Ġto Ġu . username , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" password " Ġto Ġnew Password ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( status (). is Ok ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( content (). string ( u . username )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgo () Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln ( application Context ) ĊĊĠĠĠĠĠĠĠ Ġval Ġu Ġ= ĠUser () ĊĠĠĠĠĠĠĠ Ġu . username Ġ= Ġrandom Mobile () ĊĠĠĠĠĠĠĠ Ġval Ġraw Password Ġ= Ġrandom Mobile () ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġclassic Login Service . new Login ( u , Ġraw Password ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠçĶ¨æĪ· å¯Ĩçłģ çĻ»å½ķ ĊĠĠĠĠĠĠĠ Ġmock Mvc . perform ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost ("/ login ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contentType ( MediaType . APPLICATION _ JSON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠobjectMapper . writeValue As Bytes ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" username " Ġto Ġu . username , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" password " Ġto Ġraw Password ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( status (). is Ok ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( content (). string ( u . username )) ĊĊĊĠĠĠĠĠĠĠ Ġmock Mvc . perform ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost ("/ login ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contentType ( MediaType . APPLICATION _ JSON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠobjectMapper . writeValue As Bytes ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" username " Ġto Ġu . username , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" password " Ġto Ġraw Password Ġ+ Ġraw Password ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( status (). is Unauthorized ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ å¿«éĢŁ çĻ»å½ķ ĊĠĠĠĠĠĠĠ Ġval Ġuri Builder Ġ= ĠStringBuilder ("/ mine ") ĊĠĠĠĠĠĠĠ Ġval Ġsession Ġ= Ġmock Mvc . perform ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ( uri Builder . toString ()) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( status (). is Unauthorized ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andReturn () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. request ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. session ĊĊĠĠĠĠĠĠĠ Ġclassic Login Service . request Token ( user , ĠCh rono Unit . DAYS , Ġ 1 L , Ġuri Builder ) ĊĊĊĠĠĠĠĠĠĠ Ġmock Mvc . perform ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ( uri Builder . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. session ( session Ġas ĠMock Http Session ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( status (). is Ok ) ĊĊĊĠĠĠĠĠĠĠ Ġmock Mvc . perform ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ("/ mine ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. session ( session ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( status (). is Ok ) ĊĊĠĠĠĠĠĠĠ Ġmock Mvc . perform ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ("/ mine ", Ġuser ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( status (). is Ok ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġæ ² ¡ çĻ»å½ķ ç»Ļ Ġ 4 0 1 Ġ æĿĥéĻĲ ä¸į è¶³ ç»Ļ ĠĠ 4 0 3 ĊĠĠĠĠĠĠĠ Ġmock Mvc . perform ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ("/ advanced Mine ", Ġuser ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( status (). is Forbidden ) ĊĊĠĠĠ Ġ} Ċ Ċ }