package Ġar . edu . un q . ar qs 1 . M erc ad illo Lib re Back . controllers . products _ controller Ċ Ċ import Ġar . edu . un q . ar qs 1 . M erc ad illo Lib re Back . Application Test Ċ import Ġar . edu . un q . ar qs 1 . M erc ad illo Lib re Back . models . Business Ċ import Ġar . edu . un q . ar qs 1 . M erc ad illo Lib re Back . models . New Business Ċ import Ġar . edu . un q . ar qs 1 . M erc ad illo Lib re Back . models . Product Ċ import Ġar . edu . un q . ar qs 1 . M erc ad illo Lib re Back . models . Update Product Ċ import Ġar . edu . un q . ar qs 1 . M erc ad illo Lib re Back . models . d tos . Credentials Ċ import Ġar . edu . un q . ar qs 1 . M erc ad illo Lib re Back . repositories . product . Products Repository Ċ import Ġorg . hamcrest . Core Matchers Ċ import Ġorg . junit . jupiter . api . Assertions . assertEquals Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . http . HttpMethod Ċ import Ġorg . springframework . http . HttpStatus Ċ import Ġorg . springframework . http . Response Entity Ċ import Ġorg . springframework . test . web . servlet . Result Actions Ċ import Ġorg . springframework . test . web . servlet . result . MockMvc Result Matchers ĊĊ Ċ class ĠUpdate Product Test Ġ: ĠApplication Test () Ġ{ ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġlateinit Ġvar Ġproducts Repository : ĠProducts Repository ĊĊĠĠĠ Ġprivate Ġvar Ġsell er : ĠBusiness ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġproduct : ĠProduct ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Business Ġ= ĠNew Business ( name Ġ= Ġ" name ", Ġemail Ġ= Ġ" email @ email . com ", Ġpassword Ġ= Ġ" sar lang a ") ĊĠĠĠĠĠĠĠ Ġcredentials Ġ= ĠCredentials ( new Business . email , Ġnew Business . password ) ĊĠĠĠĠĠĠĠ Ġsell er Ġ= Ġcreate Business ( new Business ) ĊĊĠĠĠĠĠĠĠ Ġproduct Ġ= Ġproducts Repository . save ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProduct ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" product ", Ġdescription Ġ= Ġ" descr ption ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprice Ġ= Ġ 1 0 , Ġstock Ġ= Ġ 1 0 , Ġsell er Ġ= Ġsell er !! , ĠisActive Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Product Request ( product : ĠUpdate Product ): ĠResult Actions Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbusiness Authenticated Exchange ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcredentials !! , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ v 1 / products /${ product . id }", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHttpMethod . PUT , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproduct ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Product ( ĊĠĠĠĠĠĠĠ Ġid : ĠLong ? Ġ= Ġproduct !!. id , ĊĠĠĠĠĠĠĠ Ġname : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġdescription : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġprice : ĠInt ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġstock : ĠInt ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġsell er Id : ĠLong ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ= ĊĊĠĠĠĠĠĠĠ ĠUpdate Product ( id , Ġname , Ġdescription , Ġprice , Ġstock ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen Name IsEmpty _ then Returns Status 4 0 0 () Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate Product Request ( update Product ( name Ġ= Ġ"")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( MockMvc Result Matchers . status (). is BadRequest ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen Description IsEmpty _ then Returns Status 4 0 0 () Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate Product Request ( update Product ( description Ġ= Ġ"")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( MockMvc Result Matchers . status (). is BadRequest ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen Price Is B ellow 0 _ then Returns Status 4 0 0 () Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate Product Request ( update Product ( price Ġ= Ġ- 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( MockMvc Result Matchers . status (). is BadRequest ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen Stock Is B ellow 0 _ then Returns Status 4 0 0 () Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate Product Request ( update Product ( stock Ġ= Ġ- 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( MockMvc Result Matchers . status (). is BadRequest ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġupdates The Name () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠnewName Ġ= Ġ" new Ġname " ĊĠĠĠĠĠĠĠ Ġupdate Product Request ( update Product ( name Ġ= ĠnewName )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( MockMvc Result Matchers . status (). is Ok ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( MockMvc Result Matchers . json Path ("$ ", ĠCore Matchers . notNull Value ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( MockMvc Result Matchers . json Path (" $. name ", ĠCore Matchers .` is `( new Name ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġupdates The Description () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Description Ġ= Ġ" new Ġdescription " ĊĠĠĠĠĠĠĠ Ġupdate Product Request ( update Product ( description Ġ= Ġnew Description )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( MockMvc Result Matchers . status (). is Ok ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( MockMvc Result Matchers . json Path ("$ ", ĠCore Matchers . notNull Value ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( MockMvc Result Matchers . json Path (" $. description ", ĠCore Matchers .` is `( new Description ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġupdates The Stock () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Stock Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġupdate Product Request ( update Product ( stock Ġ= Ġnew Stock )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( MockMvc Result Matchers . status (). is Ok ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( MockMvc Result Matchers . json Path ("$ ", ĠCore Matchers . notNull Value ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( MockMvc Result Matchers . json Path (" $. stock ", ĠCore Matchers .` is `( new Stock ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġupdates The Price () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Price Ġ= Ġ 1 0 0 0 0 0 ĊĠĠĠĠĠĠĠ Ġupdate Product Request ( update Product ( price Ġ= Ġnew Price )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( MockMvc Result Matchers . status (). is Ok ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( MockMvc Result Matchers . json Path ("$ ", ĠCore Matchers . notNull Value ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( MockMvc Result Matchers . json Path (" $. price ", ĠCore Matchers .` is `( new Price ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen The ProductId Is DoesNot Exists _ then Returns 4 0 4 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġupdate Product Ġ= Ġupdate Product () ĊĠĠĠĠĠĠĠ Ġupdate Product . id Ġ= Ġproduct !!. id ?. plus ( 1 ) ĊĠĠĠĠĠĠĠ Ġupdate Product Request ( update Product ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( MockMvc Result Matchers . status (). is NotFound ) ĊĠĠĠ Ġ} Ċ }