/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 ĠF ord ĠMotor ĠCompany Ċ Ġ* ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . ford . internal projects . people mo ver . product Ċ Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . ford . internal projects . people mo ver . assignment . Assignment V 1 Ċ import Ġcom . ford . internal projects . people mo ver . assignment . Assignment Repository Ċ import Ġcom . ford . internal projects . people mo ver . auth . PERMISSION _ OWNER Ċ import Ġcom . ford . internal projects . people mo ver . auth . User Space Mapping Ċ import Ġcom . ford . internal projects . people mo ver . auth . User Space Mapping Repository Ċ import Ġcom . ford . internal projects . people mo ver . person . Person Ċ import Ġcom . ford . internal projects . people mo ver . person . Person Repository Ċ import Ġcom . ford . internal projects . people mo ver . space . Space Ċ import Ġcom . ford . internal projects . people mo ver . space . Space Repository Ċ import Ġcom . ford . internal projects . people mo ver . tag . location . Space Location Ċ import Ġcom . ford . internal projects . people mo ver . tag . location . Space Location Repository Ċ import Ġcom . ford . internal projects . people mo ver . tag . product . Product Tag Ċ import Ġcom . ford . internal projects . people mo ver . tag . product . Product Tag Repository Ċ import Ġcom . ford . internal projects . people mo ver . utilities . CHAR _ 2 6 0 Ċ import Ġcom . ford . internal projects . people mo ver . utilities . CHAR _ 5 2 0 Ċ import Ġcom . ford . internal projects . people mo ver . utilities . EMPTY _ NAME Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . boot . test . autoconfigure . web . servlet . Auto Configure MockMvc Ċ import Ġorg . springframework . boot . test . context . SpringBootTest Ċ import Ġorg . springframework . data . repository . findById OrNull Ċ import Ġorg . springframework . http . MediaType Ċ import Ġorg . springframework . test . context . Active Profiles Ċ import Ġorg . springframework . test . context . junit 4 . Spring Runner Ċ import Ġorg . springframework . test . web . servlet . MockMvc Ċ import Ġorg . springframework . test . web . servlet . request . MockMvc Request Builders .* Ċ import Ġorg . springframework . test . web . servlet . result . MockMvc Result Matchers . status Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . HashSet Ċ Ċ @ RunWith ( Spring Runner :: class ) Ċ @ SpringBootTest Ċ @ Active Profiles (" test ") Ċ @ Auto Configure MockMvc Ċ class ĠProduct Controller Api Test Ġ{ ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġproduct Repository : ĠProduct Repository ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġassignment Repository : ĠAssignment Repository ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġperson Repository : ĠPerson Repository ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġspace Repository : ĠSpace Repository ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġproduct Tag Repository : ĠProduct Tag Repository ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġspace Location Repository : ĠSpace Location Repository ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠobjectMapper : ĠObjectMapper ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġuser Space Mapping Repository : ĠUser Space Mapping Repository ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmock Mvc : ĠMock Mvc ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġspace : ĠSpace ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġspace Without Access : ĠSpace ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtag : ĠProduct Tag ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlocation : ĠSpace Location ĊĊĠĠĠ Ġvar Ġbase Products Url : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġprivate Ġfun Ġget Base Product Url ( space Uuid : ĠString ) Ġ= Ġ"/ api / spaces /${ space Uuid }/ products " ĊĠĠĠ Ġprivate Ġfun Ġget Single Product Url ( productId : ĠInt ) Ġ= Ġbase Products Url Ġ+ Ġ"/ ${ productId }" ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġspace Ġ= Ġspace Repository . save ( Space ( name Ġ= Ġ" tok ")) ĊĠĠĠĠĠĠĠ Ġspace Without Access Ġ= Ġspace Repository . save ( Space ( name Ġ= Ġ" tik ")) ĊĠĠĠĠĠĠĠ Ġbase Products Url Ġ= Ġget Base Product Url ( space . uuid ) ĊĠĠĠĠĠĠĠ Ġuser Space Mapping Repository . save ( User Space Mapping ( userId Ġ= Ġ" USER _ ID ", Ġspace Uuid Ġ= Ġspace . uuid , Ġpermission Ġ= ĠPER MISSION _ OWNER )) ĊĠĠĠĠĠĠĠ Ġtag Ġ= Ġproduct Tag Repository . save ( Product Tag ( space Uuid Ġ= Ġspace . uuid , Ġname Ġ= Ġ" AV ĠProduct ")) ĊĠĠĠĠĠĠĠ Ġlocation Ġ= Ġspace Location Repository . save ( Space Location ( space Uuid Ġ= Ġspace . uuid , Ġname Ġ= Ġ" M ars ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ Ġassignment Repository . delete All () ĊĠĠĠĠĠĠĠ Ġproduct Repository . delete All () ĊĠĠĠĠĠĠĠ Ġperson Repository . delete All () ĊĠĠĠĠĠĠĠ Ġspace Location Repository . delete All () ĊĠĠĠĠĠĠĠ Ġspace Repository . delete All () ĊĠĠĠĠĠĠĠ Ġproduct Tag Repository . delete All () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` POST Ġshould Ġcreate Ġnew ĠProduct `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproduct Add Request Ġ= ĠProduct Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" product Ġone ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtags Ġ= Ġset Of ( tag ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspace Location Ġ= Ġlocation ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmock Mvc . perform ( post ( base Products Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġ" Bearer ĠGO OD _ TOKEN ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contentType ( MediaType . APPLICATION _ JSON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content ( object Mapper . writeValue AsString ( product Add Request ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( status (). is Ok ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andReturn () ĊĊĠĠĠĠĠĠĠ Ġval Ġactual Product : ĠProduct Ġ= ĠobjectMapper . readValue ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . response . content AsString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProduct :: class . java ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġproduct In DB : ĠProduct Ġ= Ġproduct Repository . find ByName (" product Ġone ") !! ĊĊĠĠĠĠĠĠĠ ĠassertThat ( actual Product . name ). isEqualTo ( product Add Request . name ) ĊĠĠĠĠĠĠĠ ĠassertThat ( actual Product . space Uuid ). isEqualTo ( space . uuid ) ĊĠĠĠĠĠĠĠ ĠassertThat ( actual Product ). isEqualTo ( product In DB ) ĊĠĠĠĠĠĠĠ ĠassertThat ( actual Product . tags ). contains Only ( tag ) ĊĠĠĠĠĠĠĠ ĠassertThat ( actual Product . space Location ). isEqualTo ( location ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` POST Ġshould Ġreturn Ġ 4 0 0 Ġwhen Ġtrying Ġto Ġcreate Ġproduct Ġwith Ġno Ġproduct Ġname `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproduct Add Request Ġ= ĠProduct Request ( name Ġ= Ġ"") ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmock Mvc . perform ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost ( base Products Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġ" Bearer ĠGO OD _ TOKEN ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contentType ( MediaType . APPLICATION _ JSON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content ( object Mapper . writeValue AsString ( product Add Request )) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( status (). is BadRequest ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andReturn () ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġresult . resolved Exception !!. message ĊĠĠĠĠĠĠĠ ĠassertThat ( response ). contains (" Invalid ĠProduct Ġin ĠRequest . ĠDid Ġyou Ġforget Ġto Ġprovide Ġa Ġname Ġfor Ġthe Ġproduct ?") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` POST Ġshould Ġreturn Ġ 4 0 9 Ġwhen Ġtrying Ġto Ġcreate Ġproduct Ġof Ġthe Ġsame Ġname `() Ġ{ ĊĠĠĠĠĠĠĠ Ġproduct Repository . save ( Product ( name Ġ= Ġ" product Ġone ", Ġspace Uuid Ġ= Ġspace . uuid )) ĊĠĠĠĠĠĠĠ Ġval Ġproduct Add Request Ġ= ĠProduct Request ( name Ġ= Ġ" product Ġone ") ĊĊĠĠĠĠĠĠĠ Ġmock Mvc . perform ( post ( base Products Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġ" Bearer ĠGO OD _ TOKEN ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contentType ( MediaType . APPLICATION _ JSON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content ( object Mapper . writeValue AsString ( product Add Request ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( status (). is Conflict ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` POST Ġshould Ġreturn Ġ 4 0 3 Ġwhen Ġtrying Ġto Ġcreate Ġa Ġproduct Ġwithout Ġwrite Ġauthorization `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Body Object Ġ= ĠProduct Request (" Not Ġblank ") ĊĊĠĠĠĠĠĠĠ Ġmock Mvc . perform ( post ( base Products Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġ" Bearer ĠAN ONY MO US _ TOKEN ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contentType ( MediaType . APPLICATION _ JSON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content ( object Mapper . writeValue AsString ( request Body Object ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( status (). is Forbidden ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` PUT Ġshould Ġreturn Ġ 4 0 0 Ġwhen Ġtrying Ġto Ġupdate Ġproduct Ġwith Ġtoo Ġmany Ġcharacters Ġin Ġnotes Ġfield `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproduct : ĠProduct Ġ= Ġproduct Repository . save ( Product ( name Ġ= Ġ" test ", Ġspace Uuid Ġ= Ġspace . uuid )) ĊĠĠĠĠĠĠĠ Ġval Ġproduct Edit Request Ġ= ĠProduct Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġproduct . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotes Ġ= Ġ" 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġmock Mvc . perform ( put ( get Single Product Url ( product . id !! )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġ" Bearer ĠGO OD _ TOKEN ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contentType ( MediaType . APPLICATION _ JSON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content ( object Mapper . writeValue AsString ( product Edit Request ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( status (). is BadRequest ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` PUT Ġshould Ġupdate Ġa Ġproduct `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproduct : ĠProduct Ġ= Ġproduct Repository . save ( Product ( name Ġ= Ġ" test ", Ġspace Uuid Ġ= Ġspace . uuid )) ĊĠĠĠĠĠĠĠ Ġval Ġperson : ĠPerson Ġ= Ġperson Repository . save ( Person ( name Ġ= Ġ" bob ", Ġspace Uuid Ġ= Ġspace . uuid )) ĊĠĠĠĠĠĠĠ Ġassignment Repository . save ( Assignment V 1 ( person Ġ= Ġperson , ĠproductId Ġ= Ġproduct . id !! , Ġspace Uuid Ġ= Ġspace . uuid )) ĊĠĠĠĠĠĠĠ Ġval Ġproduct Edit Request Ġ= ĠProduct Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" product Ġtwo " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmock Mvc . perform ( put ( get Single Product Url ( product . id !! )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġ" Bearer ĠGO OD _ TOKEN ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contentType ( MediaType . APPLICATION _ JSON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content ( object Mapper . writeValue AsString ( product Edit Request ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( status (). is Ok ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andReturn () ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Product : ĠProduct Ġ= Ġproduct . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" product Ġtwo " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġactual Product : ĠProduct Ġ= ĠobjectMapper . readValue ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . response . content AsString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProduct :: class . java ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// Ġshould Ġactual Product Ġhave Ġthe Ġassignment Ġin Ġit ? Ġproduct In Db Ġwill Ġhave Ġit ĊĠĠĠĠĠĠĠ Ġval Ġproduct In Db : ĠProduct Ġ= Ġproduct Repository . findById OrNull ( product . id !! ) !! ĊĠĠĠĠĠĠĠ ĠassertThat ( actual Product ). isEqualTo ( expected Product ) ĊĠĠĠĠĠĠĠ ĠassertThat ( actual Product ). isEqualTo Ign oring Given Fields ( product In Db , Ġ" assignments ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` PUT Ġshould Ġreturn Ġ 4 0 9 Ġwhen Ġupdating Ġproduct Ġwith Ġan Ġalready Ġexisting Ġproduct Ġname `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproduct 1 : ĠProduct Ġ= Ġproduct Repository . save ( Product ( name Ġ= Ġ" product Ġone ", Ġspace Uuid Ġ= Ġspace . uuid )) ĊĠĠĠĠĠĠĠ Ġval Ġproduct 2 : ĠProduct Ġ= Ġproduct Repository . save ( Product ( name Ġ= Ġ" product Ġtwo ", Ġspace Uuid Ġ= Ġspace . uuid )) ĊĠĠĠĠĠĠĠ Ġproduct 1 . name Ġ= Ġproduct 2 . name ĊĊĠĠĠĠĠĠĠ Ġmock Mvc . perform ( put ( get Single Product Url ( product 1 . id !! )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġ" Bearer ĠGO OD _ TOKEN ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contentType ( MediaType . APPLICATION _ JSON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content ( object Mapper . writeValue AsString ( product 1 ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( status (). is Conflict ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` PUT Ġshould Ġreturn Ġ 4 0 0 Ġwhen Ġtrying Ġto Ġupdate Ġnon Ġexisting Ġproduct `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmock Mvc . perform ( put ( get Single Product Url ( 7 0 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġ" Bearer ĠGO OD _ TOKEN ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contentType ( MediaType . APPLICATION _ JSON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content ( object Mapper . writeValue AsString ( Product ( name Ġ= Ġ"", Ġspace Uuid Ġ= Ġspace . uuid )))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( status (). is BadRequest ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andReturn () ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġresult . resolved Exception !!. message ĊĠĠĠĠĠĠĠ ĠassertThat ( response ). contains (" Invalid ĠProduct ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` PUT Ġshould Ġreturn Ġ 4 0 3 Ġwhen Ġtrying Ġto Ġedit Ġa Ġproduct Ġwithout Ġwrite Ġauthorization `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproduct : ĠProduct Ġ= Ġproduct Repository . save ( Product (" name ", Ġspace Uuid Ġ= Ġspace . uuid )) ĊĠĠĠĠĠĠĠ Ġval Ġrequest Body Object Ġ= ĠProduct Request (" new Name ", ĠHashSet ()) ĊĊĠĠĠĠĠĠĠ Ġmock Mvc . perform ( put ( get Single Product Url ( product . id !! )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġ" Bearer ĠAN ONY MO US _ TOKEN ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contentType ( MediaType . APPLICATION _ JSON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content ( object Mapper . writeValue AsString ( request Body Object ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( status (). is Forbidden ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` PUT Ġshould Ġreturn Ġ 4 0 0 Ġwhen Ġtrying Ġto Ġedit Ġa Ġproduct Ġin Ġa Ġspace Ġthat Ġyou Ġdon Ġnot Ġhave Ġaccess Ġto `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproduct : ĠProduct Ġ= Ġproduct Repository . save ( Product (" name ", Ġspace Uuid Ġ= Ġspace Without Access . uuid )) ĊĠĠĠĠĠĠĠ Ġval Ġrequest Body Object Ġ= ĠProduct Request (" new Name ", ĠHashSet ()) ĊĊĠĠĠĠĠĠĠ Ġmock Mvc . perform ( put ( get Single Product Url ( product . id !! )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġ" Bearer ĠGO OD _ TOKEN ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contentType ( MediaType . APPLICATION _ JSON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content ( object Mapper . writeValue AsString ( request Body Object ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( status (). is BadRequest ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` DELETE Ġshould Ġdelete Ġproduct `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproduct : ĠProduct Ġ= Ġproduct Repository . save ( Product ( name Ġ= Ġ" test ", Ġspace Uuid Ġ= Ġspace . uuid )) ĊĊĠĠĠĠĠĠĠ Ġmock Mvc . perform ( delete ( get Single Product Url ( product . id !! )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġ" Bearer ĠGO OD _ TOKEN ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( status (). is Ok ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andReturn () ĊĊĠĠĠĠĠĠĠ ĠassertThat ( product Repository . count ()). is Zero () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` DELETE Ġproduct Ġshould Ġun assign Ġperson Ġfrom Ġproduct `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproduct : ĠProduct Ġ= Ġproduct Repository . save ( Product ( name Ġ= Ġ" test ", Ġspace Uuid Ġ= Ġspace . uuid )) ĊĠĠĠĠĠĠĠ Ġval Ġun assigned Product : ĠProduct Ġ= Ġproduct Repository . save ( Product ( name Ġ= Ġ" un assigned ", Ġspace Uuid Ġ= Ġspace . uuid )) ĊĠĠĠĠĠĠĠ Ġval Ġperson Ġ= Ġperson Repository . save ( Person ( name Ġ= Ġ" person ", Ġspace Uuid Ġ= Ġspace . uuid )) ĊĠĠĠĠĠĠĠ Ġassignment Repository . save ( Assignment V 1 ( person Ġ= Ġperson , ĠproductId Ġ= Ġproduct . id !! , Ġspace Uuid Ġ= Ġspace . uuid )) ĊĊĠĠĠĠĠĠĠ Ġmock Mvc . perform ( delete ( get Single Product Url ( product . id !! )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġ" Bearer ĠGO OD _ TOKEN ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( status (). is Ok ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andReturn () ĊĊĠĠĠĠĠĠĠ Ġval Ġpeople : ĠIterable < Assignment V 1 > Ġ= Ġassignment Repository . findAll () ĊĠĠĠĠĠĠĠ ĠassertThat ( assignment Repository . count ()). is One () ĊĠĠĠĠĠĠĠ ĠassertThat ( people . first (). person . name ). isEqualTo ( person . name ) ĊĠĠĠĠĠĠĠ ĠassertThat ( people . first (). productId ). isEqualTo ( un assigned Product . id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` DELETE Ġproduct Ġshould Ġun assign Ġperson Ġfrom Ġproduct Ġand Ġhandle Ġcases Ġwhere Ġperson Ġis Ġalready Ġun assigned `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproduct : ĠProduct Ġ= Ġproduct Repository . save ( Product ( name Ġ= Ġ" test ", Ġspace Uuid Ġ= Ġspace . uuid )) ĊĠĠĠĠĠĠĠ Ġval Ġun assigned Product : ĠProduct Ġ= Ġproduct Repository . save ( Product ( name Ġ= Ġ" un assigned ", Ġspace Uuid Ġ= Ġspace . uuid )) ĊĠĠĠĠĠĠĠ Ġval Ġperson Ġ= Ġperson Repository . save ( Person ( name Ġ= Ġ" person ", Ġspace Uuid Ġ= Ġspace . uuid )) ĊĠĠĠĠĠĠĠ Ġassignment Repository . save ( Assignment V 1 ( person Ġ= Ġperson , ĠproductId Ġ= Ġproduct . id !! , Ġspace Uuid Ġ= Ġspace . uuid )) ĊĠĠĠĠĠĠĠ Ġassignment Repository . save ( Assignment V 1 ( person Ġ= Ġperson , ĠproductId Ġ= Ġun assigned Product . id !! , Ġspace Uuid Ġ= Ġspace . uuid )) ĊĊĠĠĠĠĠĠĠ Ġmock Mvc . perform ( delete ( get Single Product Url ( product . id !! )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġ" Bearer ĠGO OD _ TOKEN ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( status (). is Ok ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andReturn () ĊĊĠĠĠĠĠĠĠ Ġval Ġpeople : ĠIterable < Assignment V 1 > Ġ= Ġassignment Repository . findAll () ĊĠĠĠĠĠĠĠ ĠassertThat ( assignment Repository . count ()). is One () ĊĠĠĠĠĠĠĠ ĠassertThat ( people . first (). person . name ). isEqualTo ( person . name ) ĊĠĠĠĠĠĠĠ ĠassertThat ( people . first (). productId ). isEqualTo ( un assigned Product . id !! ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` DELETE Ġshould Ġreturn Ġ 4 0 0 Ġwhen Ġtrying Ġto Ġdelete Ġnon Ġexisting Ġproduct `() Ġ{ ĊĠĠĠĠĠĠĠ Ġmock Mvc . perform ( delete ( get Single Product Url ( 7 0 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġ" Bearer ĠGO OD _ TOKEN ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( status (). is BadRequest ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` DELETE Ġshould Ġreturn Ġ 4 0 0 Ġwhen Ġtrying Ġto Ġdelete Ġa Ġproduct Ġin Ġa Ġspace Ġyou Ġdon Ġnot Ġhave Ġaccess Ġto `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproduct : ĠProduct Ġ= Ġproduct Repository . save ( Product ( name Ġ= Ġ" test ", Ġspace Uuid Ġ= Ġspace Without Access . uuid )) ĊĠĠĠĠĠĠĠ Ġmock Mvc . perform ( delete ( get Single Product Url ( product . id !! )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġ" Bearer ĠGO OD _ TOKEN ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( status (). is BadRequest ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` DELETE Ġshould Ġreturn Ġ 4 0 3 Ġwhen Ġtrying Ġto Ġdelete Ġa Ġproduct Ġwithout Ġwrite Ġauthorization `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproduct : ĠProduct Ġ= Ġproduct Repository . save ( Product ( name Ġ= Ġ" test ", Ġspace Uuid Ġ= Ġspace . uuid )) ĊĠĠĠĠĠĠĠ Ġmock Mvc . perform ( delete ( get Single Product Url ( product . id !! )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġ" Bearer ĠAN ONY MO US _ TOKEN ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( status (). is Forbidden ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` post Ġshould Ġvalidate Ġthe Ġurl Ġsend Ġwith Ġthe Ġproduct `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproduct Add Request Without Https Ġ= ĠProduct Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" product Ġwithout Ġhttps ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġ" www . ford labs . com " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġproduct Add Request With Https And No Slash Ġ= ĠProduct Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" product Ġwith Ġhttps ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġ" https : www . ford labs . com " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġproduct Add Request With Http Ġ= ĠProduct Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" product Ġwith Ġhttp ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġ" http : www . ford labs . com " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġmock Mvc . perform ( post ( base Products Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġ" Bearer ĠGO OD _ TOKEN ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contentType ( MediaType . APPLICATION _ JSON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content ( object Mapper . writeValue AsString ( product Add Request Without Https ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( status (). is Ok ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andReturn () ĊĊĠĠĠĠĠĠĠ Ġmock Mvc . perform ( post ( base Products Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġ" Bearer ĠGO OD _ TOKEN ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contentType ( MediaType . APPLICATION _ JSON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content ( object Mapper . writeValue AsString ( product Add Request With Https And No Slash ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( status (). is Ok ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andReturn () ĊĊĠĠĠĠĠĠĠ Ġmock Mvc . perform ( post ( base Products Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġ" Bearer ĠGO OD _ TOKEN ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contentType ( MediaType . APPLICATION _ JSON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content ( object Mapper . writeValue AsString ( product Add Request With Http ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( status (). is Ok ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andReturn () ĊĊĠĠĠĠĠĠĠ Ġval Ġproduct Without Https In DB : ĠProduct Ġ= Ġproduct Repository . find ByName (" product Ġwithout Ġhttps ") !! ĊĠĠĠĠĠĠĠ ĠassertThat ( product Without Https In DB . name ). isEqualTo (" product Ġwithout Ġhttps ") ĊĠĠĠĠĠĠĠ ĠassertThat ( product Without Https In DB . url ). isEqualTo (" https :// www . ford labs . com ") ĊĊĠĠĠĠĠĠĠ Ġval Ġproduct With Https In DB : ĠProduct Ġ= Ġproduct Repository . find ByName (" product Ġwith Ġhttps ") !! ĊĠĠĠĠĠĠĠ ĠassertThat ( product With Https In DB . name ). isEqualTo (" product Ġwith Ġhttps ") ĊĠĠĠĠĠĠĠ ĠassertThat ( product With Https In DB . url ). isEqualTo (" https :// www . ford labs . com ") ĊĊĠĠĠĠĠĠĠ Ġval Ġproduct With Http In DB : ĠProduct Ġ= Ġproduct Repository . find ByName (" product Ġwith Ġhttp ") !! ĊĠĠĠĠĠĠĠ ĠassertThat ( product With Http In DB . name ). isEqualTo (" product Ġwith Ġhttp ") ĊĠĠĠĠĠĠĠ ĠassertThat ( product With Http In DB . url ). isEqualTo (" http : www . ford labs . com ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` put Ġshould Ġappend Ġhttps Ġif Ġproduct Ġurl Ġdoes Ġnot Ġhave Ġit Ġat Ġthe Ġbeginning `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġproduct : ĠProduct Ġ= Ġproduct Repository . save ( Product ( name Ġ= Ġ" test ", Ġspace Uuid Ġ= Ġspace . uuid )) ĊĠĠĠĠĠĠĠ Ġval Ġproduct Edit Request Ġ= ĠProduct Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" product Ġone ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġ" www . ford labs . com " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġmock Mvc . perform ( put ( get Single Product Url ( product . id !! )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġ" Bearer ĠGO OD _ TOKEN ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contentType ( MediaType . APPLICATION _ JSON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content ( object Mapper . writeValue AsString ( product Edit Request ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( status (). is Ok ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andReturn () ĊĊĠĠĠĠĠĠĠ Ġval Ġproduct In DB : ĠOptional < Product > Ġ= Ġproduct Repository . findById ( product . id !! ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( product In DB . get (). name ). isEqualTo (" product Ġone ") ĊĠĠĠĠĠĠĠ ĠassertThat ( product In DB . get (). url ). isEqualTo (" https :// www . ford labs . com ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` POST Ġshould Ġdis allow Ġinvalid ĠProduct Request Ġinputs `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġname Too Long Ġ= ĠProduct ( name Ġ= ĠCHAR _ 2 6 0 , Ġspace Uuid Ġ= Ġspace . uuid ) ĊĠĠĠĠĠĠĠ Ġmock Mvc . perform ( post ( base Products Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġ" Bearer ĠGO OD _ TOKEN ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contentType ( MediaType . APPLICATION _ JSON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content ( object Mapper . writeValue AsString ( name Too Long ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( status (). is BadRequest ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andReturn () ĊĠĠĠĠĠĠĠ Ġval Ġname Blank Ġ= ĠProduct ( name Ġ= ĠEMPTY _ NAME , Ġspace Uuid Ġ= Ġspace . uuid ) ĊĠĠĠĠĠĠĠ Ġmock Mvc . perform ( post ( base Products Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġ" Bearer ĠGO OD _ TOKEN ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contentType ( MediaType . APPLICATION _ JSON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content ( object Mapper . writeValue AsString ( name Blank ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( status (). is BadRequest ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andReturn () ĊĠĠĠĠĠĠĠ Ġval Ġnotes Too Long Ġ= ĠProduct ( name Ġ= Ġ" person Ġname ", Ġspace Uuid Ġ= Ġspace . uuid , Ġnotes Ġ= ĠCHAR _ 5 2 0 ) ĊĠĠĠĠĠĠĠ Ġmock Mvc . perform ( post ( base Products Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġ" Bearer ĠGO OD _ TOKEN ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contentType ( MediaType . APPLICATION _ JSON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content ( object Mapper . writeValue AsString ( notes Too Long ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( status (). is BadRequest ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andReturn () ĊĠĠĠĠĠĠĠ Ġval Ġd or f Too Long Ġ= ĠProduct ( name Ġ= Ġ" person Ġname ", Ġspace Uuid Ġ= Ġspace . uuid , Ġd or f Ġ= ĠCHAR _ 2 6 0 ) ĊĠĠĠĠĠĠĠ Ġmock Mvc . perform ( post ( base Products Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġ" Bearer ĠGO OD _ TOKEN ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contentType ( MediaType . APPLICATION _ JSON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content ( object Mapper . writeValue AsString ( dor f Too Long ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( status (). is BadRequest ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andReturn () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` PUT Ġshould Ġdis allow Ġinvalid ĠProduct Request Ġinputs `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproduct : ĠProduct Ġ= Ġproduct Repository . save ( Product ( name Ġ= Ġ" test ", Ġspace Uuid Ġ= Ġspace . uuid )) ĊĠĠĠĠĠĠĠ Ġval Ġname Too Long Ġ= ĠProduct ( id Ġ= Ġproduct . id , Ġname Ġ= ĠCHAR _ 2 6 0 , Ġspace Uuid Ġ= Ġspace . uuid ) ĊĠĠĠĠĠĠĠ Ġmock Mvc . perform ( put ( get Single Product Url ( product . id !! )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġ" Bearer ĠGO OD _ TOKEN ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contentType ( MediaType . APPLICATION _ JSON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content ( object Mapper . writeValue AsString ( name Too Long ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( status (). is BadRequest ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andReturn () ĊĠĠĠĠĠĠĠ Ġval Ġname Blank Ġ= ĠProduct ( id Ġ= Ġproduct . id , Ġname Ġ= ĠEMPTY _ NAME , Ġspace Uuid Ġ= Ġspace . uuid ) ĊĠĠĠĠĠĠĠ Ġmock Mvc . perform ( put ( get Single Product Url ( product . id !! )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġ" Bearer ĠGO OD _ TOKEN ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contentType ( MediaType . APPLICATION _ JSON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content ( object Mapper . writeValue AsString ( name Blank ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( status (). is BadRequest ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andReturn () ĊĠĠĠĠĠĠĠ Ġval Ġnotes Too Long Ġ= ĠProduct ( id Ġ= Ġproduct . id , Ġname Ġ= Ġ" product Ġname ", Ġspace Uuid Ġ= Ġspace . uuid , Ġnotes Ġ= ĠCHAR _ 5 2 0 ) ĊĠĠĠĠĠĠĠ Ġmock Mvc . perform ( put ( get Single Product Url ( product . id !! )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġ" Bearer ĠGO OD _ TOKEN ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contentType ( MediaType . APPLICATION _ JSON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content ( object Mapper . writeValue AsString ( notes Too Long ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( status (). is BadRequest ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andReturn () ĊĠĠĠĠĠĠĠ Ġval Ġd or f Too Long Ġ= ĠProduct ( id Ġ= Ġproduct . id , Ġname Ġ= Ġ" person Ġname ", Ġspace Uuid Ġ= Ġspace . uuid , Ġd or f Ġ= ĠCHAR _ 2 6 0 ) ĊĠĠĠĠĠĠĠ Ġmock Mvc . perform ( put ( get Single Product Url ( product . id !! )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġ" Bearer ĠGO OD _ TOKEN ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contentType ( MediaType . APPLICATION _ JSON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content ( object Mapper . writeValue AsString ( dor f Too Long ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( status (). is BadRequest ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andReturn () ĊĠĠĠ Ġ} Ċ } Ċ