package Ġcom . im man uel q rw . core . api . test . unit . service Ċ Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . im man uel q rw . core . api . repository . Base Unique Repository Ċ import Ġcom . im man uel q rw . core . api . service . Base Unique Service Ċ import Ġcom . im man uel q rw . core . api . service . Search Service Ċ import Ġcom . im man uel q rw . core . entity . Unique Entity able Ċ import Ġcom . im man uel q rw . core . test . Test able Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . do Return Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . do Throw Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . wh enever Ċ import Ġorg . am sh ove . k lu ent . should Equal Ċ import Ġorg . am sh ove . k lu ent . should Not BeNull Ċ import Ġorg . junit . jupiter . api . After All Ċ import Ġorg . junit . jupiter . api . After Each Ċ import Ġorg . junit . jupiter . api . Before All Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġorg . junit . jupiter . api . Disabled Ċ import Ġorg . junit . jupiter . api . DisplayName Ċ import Ġorg . junit . jupiter . api . Nested Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . assert Throws Ċ import Ġorg . springframework . data . domain . Page Ċ import Ġorg . springframework . data . domain . Page able Ċ import Ġorg . springframework . data . jpa . domain . Specification Ċ import Ġjava . time . LocalDateTime Ċ import Ġjava . util . UUID Ċ import Ġjavax . persistence . Entity NotFoundException Ċ import Ġjavax . persistence . Rollback Exception Ċ Ċ /** Ċ Ġ* ĠUnit Ġtests Ġfor ĠService Ċ Ġ*/ Ċ abstract Ġclass ĠBase Unique Service Test < T Ġ: ĠUnique Entity able > Ġ: ĠTest able Ġ{ ĊĊĠĠĠ Ġprotected Ġabstract Ġval Ġclass Type : ĠClass < T > ĊĊĠĠĠ Ġprotected Ġabstract Ġval Ġservice : ĠBase Unique Service < T > ĊĊĠĠĠ Ġprotected Ġabstract Ġval Ġrepository : ĠBase Unique Repository < T > ĊĠĠĠ Ġprotected Ġabstract Ġval Ġsearch Service : ĠSearch Service < T > ĊĊĠĠĠ Ġprotected Ġabstract Ġval Ġvalid Id : ĠUUID ĊĠĠĠ Ġprotected Ġabstract Ġval Ġinvalid Id : ĠUUID ĊĊĠĠĠ Ġprotected Ġabstract Ġval Ġvalid Entity : ĠT ĊĠĠĠ Ġprotected Ġabstract Ġval Ġinvalid Entity : ĠT ĊĠĠĠ Ġprotected Ġabstract Ġval Ġreplaced Entity : ĠT ĊĊĠĠĠ Ġprotected Ġabstract Ġval Ġvalid Pat ched Fields : ĠMap < String , ĠAny > ĊĠĠĠ Ġprotected Ġabstract Ġval Ġinvalid Pat ched Fields : ĠMap < String , ĠAny > ĊĠĠĠ Ġprotected Ġabstract Ġval Ġoriginal Fields : ĠMap < String , ĠAny > ĊĠĠĠ Ġprotected Ġabstract Ġval Ġpatched Fields : ĠMap < String , ĠAny > ĊĊĠĠĠ Ġprotected Ġabstract Ġval Ġvalid Page able : ĠPage able ĊĠĠĠ Ġprotected Ġabstract Ġval Ġinvalid Page able : ĠPage able ĊĠĠĠ Ġprotected Ġabstract Ġval Ġvalid Page : ĠPage < T > ĊĊĠĠĠ Ġprotected Ġabstract Ġval Ġvalid Entity Ids : ĠIterable < UUID > ĊĠĠĠ Ġprotected Ġabstract Ġval Ġinvalid Entity Ids : ĠIterable < UUID > ĊĊĠĠĠ Ġprotected Ġabstract Ġval Ġvalid Entities : ĠList < T > ĊĊĠĠĠ Ġprotected Ġabstract Ġval Ġvalid Search : ĠString ĊĠĠĠ Ġprotected Ġabstract Ġval Ġinvalid Search : ĠString ĊĊĠĠĠ Ġprotected Ġabstract Ġval Ġvalid Count : ĠLong ĊĊĠĠĠ Ġprotected Ġabstract Ġval Ġvalid Search Specification : ĠSpecification < T >? ĊĠĠĠ Ġprotected Ġabstract Ġval Ġinvalid Search Specification : ĠSpecification < T >? ĊĊĠĠĠ Ġprotected Ġabstract Ġval ĠobjectMapper : ĠObjectMapper ĊĊĠĠĠ Ġ@ Before All ĊĠĠĠ Ġoverride Ġfun Ġpre SetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSub class Ġimplementation ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġoverride Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSub class Ġimplementation ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After Each ĊĠĠĠ Ġoverride Ġfun ĠtearDown () Ġ{} ĊĊĠĠĠ Ġ@ After All ĊĠĠĠ Ġoverride Ġfun Ġpost Tear Down () Ġ{} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠSuccess Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġ@ DisplayName (" given Ġvalid Ġid Ġ- Ġwhen ĠGET Ġentity Ġ- Ġreturns Ġentity ") ĊĠĠĠĠĠĠĠ Ġfun ĠtestGet Entity With Valid Id () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( repository . getOne ( valid Id )). thenReturn ( valid Entity ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . find ( valid Id ) Ġshould Equal Ġvalid Entity ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġ@ DisplayName (" given Ġvalid Ġids Ġ- Ġwhen ĠGET Ġentities Ġ- Ġreturns Ġentities ") ĊĠĠĠĠĠĠĠ Ġfun ĠtestGet Entities ById s () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( repository . findAll ById ( valid Entity Ids )). thenReturn ( valid Entities ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . findAll ById ( valid Entity Ids ) Ġshould Equal Ġvalid Entities ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġ@ DisplayName (" given Ġsearch Ġparameters Ġ- Ġwhen ĠCOUNT Ġentities Ġ- Ġreturns Ġcount ") ĊĠĠĠĠĠĠĠ Ġfun Ġtest Count Entities With Valid Search Parameters () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( search Service . generate Specification ( valid Search )). thenReturn (( valid Search Specification )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( repository . count ( valid Search Specification )). thenReturn ( valid Count ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . count ( valid Search ) Ġshould Equal Ġvalid Count ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġ@ DisplayName (" given Ġvalid Ġpage , Ġsort , Ġand Ġsearch Ġparameters Ġ- Ġwhen ĠGET Ġentities Ġ- Ġreturns Ġentities ") ĊĠĠĠĠĠĠĠ Ġfun ĠtestGet Entities With Valid Query Parameters () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( search Service . generate Specification ( valid Search )). thenReturn (( valid Search Specification )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( repository . findAll ( valid Search Specification , Ġvalid Page able )). thenReturn ( valid Page ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . findAll ( valid Page able , Ġvalid Search ) Ġshould Equal Ġvalid Page ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġ@ DisplayName (" given Ġsearch Ġparameters Ġ- Ġwhen ĠGET Ġentities Ġ- Ġreturns Ġentities ") ĊĠĠĠĠĠĠĠ Ġfun ĠtestGet Entities With Valid Search Parameters () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( search Service . generate Specification ( valid Search )). thenReturn (( valid Search Specification )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( repository . findAll ( valid Search Specification )). thenReturn ( valid Entities ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . findAll ( search Ġ= Ġvalid Search ) Ġshould Equal Ġvalid Entities ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġ@ DisplayName (" given Ġvalid Ġentity Ġ- Ġwhen ĠPOST Ġentity Ġ- Ġpers ists Ġentity ") ĊĠĠĠĠĠĠĠ Ġfun Ġtest Post Valid Entity () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( repository . save ( valid Entity )). thenReturn ( valid Entity ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . create ( valid Entity ) Ġshould Equal Ġvalid Entity ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġ@ DisplayName (" given Ġvalid Ġid Ġand Ġentity Ġto Ġreplace Ġ- Ġwhen ĠPUT Ġentity Ġ- Ġreplaces Ġentity ") ĊĠĠĠĠĠĠĠ Ġfun Ġtest Put Valid Entity With Valid Id () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( repository . getOne ( valid Id )). thenReturn ( valid Entity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( valid Entity . id ). thenReturn ( valid Id ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( repository . save ( valid Entity )). thenReturn ( re placed Entity ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . replace ( valid Id , Ġvalid Entity ) Ġshould Equal Ġreplaced Entity ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Disabled ĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġ@ DisplayName (" given Ġvalid Ġid Ġand Ġfields Ġto Ġreplace Ġ- Ġwhen ĠP ATCH Ġentity Ġ- Ġmod ifies Ġentity ") ĊĠĠĠĠĠĠĠ Ġfun Ġtest Patch Entity With Valid Id And Fields () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( repository . getOne ( valid Id )). thenReturn ( valid Entity ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( object Mapper . convert Value ( valid Entity , ĠMap :: class . java )). thenReturn ( original Fields ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Return ( patched Fields ). wh enever ( original Fields ). plus ( valid Pat ched Fields ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwhenever ( original Fields . plus ( valid Pat ched Fields )). thenReturn ( patched Fields ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( object Mapper . convert Value ( patched Fields , Ġclass Type )). thenReturn ( re placed Entity ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( repository . save ( re placed Entity )). thenReturn ( re placed Entity ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . modify ( valid Id , Ġvalid Pat ched Fields ) Ġshould Equal Ġreplaced Entity ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġ@ DisplayName (" given Ġvalid Ġid Ġ- Ġwhen ĠDELETE Ġentity Ġ- Ġsets Ġentity Ġremoved On Ġto Ġnow ") ĊĠĠĠĠĠĠĠ Ġfun Ġtest Delete Entity With Valid Id () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( repository . getOne ( valid Id )). thenReturn ( valid Entity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( valid Entity . removed On ). thenReturn ( LocalDateTime . now ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( repository . save ( valid Entity )). thenReturn ( valid Entity ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . remove ( valid Id ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalid Entity . removed On . should Not BeNull () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġ@ DisplayName (" given Ġvalid Ġsearch Ġparameters Ġ- Ġwhen ĠDELETE Ġentities Ġ- Ġsets Ġentities ' Ġremoved On Ġto Ġnow ") ĊĠĠĠĠĠĠĠ Ġfun Ġtest Delete Entities With Valid Search Parameters () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( search Service . generate Specification ( valid Search )). thenReturn (( valid Search Specification )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalid Entities : ĠList < T > Ġ= ĠlistOf ( valid Entity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( repository . findAll ( valid Search Specification )). thenReturn ( valid Entities ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( repository . save ( valid Entity )). thenReturn ( valid Entity ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . removeAll ( valid Search ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠFailure Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Nested ĊĠĠĠĠĠĠĠ Ġinner Ġclass ĠInvalid Uri Path Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ DisplayName (" given Ġinvalid Ġid Ġ- Ġwhen ĠGET Ġentity Ġ- Ġreturns ĠNotFound Ġresponse ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun ĠtestGet Entity With Invalid Id () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Throw ( Entity NotFoundException :: class ). wh enever ( repository ). getOne ( invalid Id ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThrows < Entity NotFoundException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . find ( invalid Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ DisplayName (" given Ġinvalid Ġids Ġ- Ġwhen ĠGET Ġentities Ġ- Ġreturns ĠNotFound Ġresponse ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun ĠtestGet All Entities With Invalid Id () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Throw ( Entity NotFoundException :: class ). wh enever ( repository ). findAll ById ( invalid Entity Ids ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThrows < Entity NotFoundException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . findAll ById ( invalid Entity Ids ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ DisplayName (" given Ġinvalid Ġid Ġ- Ġwhen ĠPUT Ġentity Ġ- Ġreturns ĠNotFound Ġresponse ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġtest Put Entity With Invalid Id () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Throw ( Entity NotFoundException :: class ). wh enever ( repository ). getOne ( invalid Id ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThrows < Entity NotFoundException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . replace ( invalid Id , Ġvalid Entity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ DisplayName (" given Ġinvalid Ġid Ġ- Ġwhen ĠP ATCH Ġentity Ġ- Ġreturns ĠNotFound Ġresponse ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġtest Patch Entity With Invalid Id () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Throw ( Entity NotFoundException :: class ). wh enever ( repository ). getOne ( invalid Id ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThrows < Entity NotFoundException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . modify ( invalid Id , Ġvalid Pat ched Fields ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ DisplayName (" given Ġinvalid Ġid Ġ- Ġwhen ĠDELETE Ġentity Ġ- Ġreturns ĠNotFound Ġresponse ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġtest Delete Entity With Invalid Id () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Throw ( Entity NotFoundException :: class ). wh enever ( repository ). getOne ( invalid Id ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThrows < Entity NotFoundException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . remove ( invalid Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Nested ĊĠĠĠĠĠĠĠ Ġinner Ġclass ĠInvalid Body Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ DisplayName (" given Ġinvalid Ġentity Ġ- Ġwhen ĠPOST Ġentity Ġ- Ġreturns ĠBadRequest Ġresponse ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġtest Post Invalid Entity () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Throw ( Rollback Exception :: class ). wh enever ( repository ). save ( invalid Entity ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThrows < Rollback Exception > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . create ( invalid Entity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ DisplayName (" given Ġinvalid Ġentity Ġ- Ġwhen ĠPUT Ġentity Ġ- Ġreturns ĠBadRequest Ġresponse ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġtest Put Invalid Entity () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( repository . getOne ( valid Id )). thenReturn ( valid Entity ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( valid Entity . id ). thenReturn ( valid Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Throw ( Rollback Exception :: class ). wh enever ( repository ). save ( invalid Entity ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThrows < Rollback Exception > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . replace ( valid Id , Ġinvalid Entity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Disabled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ DisplayName (" given Ġinvalid Ġpartial Ġentity Ġ- Ġwhen ĠP ATCH Ġentity Ġ- Ġreturns ĠBadRequest Ġresponse ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġtest Patch Entity With Invalid Fields () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( repository . getOne ( valid Id )). thenReturn ( valid Entity ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( object Mapper . convert Value ( valid Entity , ĠMap :: class . java )). thenReturn ( original Fields ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( original Fields . plus ( invalid Pat ched Fields )). thenReturn ( patched Fields ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( object Mapper . convert Value ( patched Fields , Ġclass Type )). thenReturn ( invalid Entity ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Throw ( Rollback Exception :: class ). wh enever ( repository ). save ( invalid Entity ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThrows < Rollback Exception > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . modify ( valid Id , Ġinvalid Pat ched Fields ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ! ĠFind Ġwhich Ġerror Ġthrown Ġby Ġbad Ġrequest ĊĠĠĠĠĠĠĠ Ġ@ Nested ĊĠĠĠĠĠĠĠ Ġinner Ġclass ĠInvalid QueryParam Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ DisplayName (" given Ġinvalid Ġpage Ġparameter Ġ- Ġwhen ĠGET Ġentities Ġ- Ġreturns ĠBadRequest Ġresponse ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun ĠtestGet Entities With Invalid Page Parameter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( search Service . generate Specification ( valid Search )). thenReturn (( valid Search Specification )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Throw ( RuntimeException :: class ). wh enever ( repository ). findAll ( valid Search Specification , Ġinvalid Page able ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThrows < RuntimeException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . findAll ( invalid Page able , Ġvalid Search ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ? ĠLook Ġinto Ġif Ġthere Ġis Ġa Ġway Ġto Ġmake Ġsort Ġparameter Ġfail Ġseparately ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ DisplayName (" given Ġinvalid Ġsort Ġparameter Ġ- Ġwhen ĠGET Ġentities Ġ- Ġreturns ĠBadRequest Ġresponse ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun ĠtestGet Entities With Invalid Sort Parameter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( search Service . generate Specification ( valid Search )). thenReturn (( valid Search Specification )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Throw ( RuntimeException :: class ). wh enever ( repository ). findAll ( valid Search Specification , Ġinvalid Page able ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThrows < RuntimeException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . findAll ( invalid Page able , Ġvalid Search ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ- ĠConsider Ġsplitting Ġinto Ġinvalid Ġsearch Ġkey , Ġoperation , Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ DisplayName (" given Ġinvalid Ġsearch Ġparameters Ġ- Ġwhen ĠGET Ġentities Ġ- Ġreturns ĠBadRequest Ġresponse ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun ĠtestGet Entities With Invalid Search Parameter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( search Service . generate Specification ( invalid Search )). thenReturn (( invalid Search Specification )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Throw ( RuntimeException :: class ). wh enever ( repository ). findAll ( invalid Search Specification , Ġinvalid Page able ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThrows < RuntimeException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . findAll ( valid Page able , Ġinvalid Search ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ- ĠConsider Ġsplitting Ġinto Ġinvalid Ġsearch Ġkey , Ġoperation , Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ DisplayName (" given Ġinvalid Ġsearch Ġparameters Ġ- Ġwhen ĠGET Ġentities Ġ- Ġreturns ĠBadRequest Ġresponse ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun ĠtestGet Entities With Only Invalid Search Parameter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( search Service . generate Specification ( invalid Search )). thenReturn (( invalid Search Specification )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Throw ( RuntimeException :: class ). wh enever ( repository ). findAll ( invalid Search Specification ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThrows < RuntimeException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . findAll ( search Ġ= Ġinvalid Search ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ- ĠConsider Ġsplitting Ġinto Ġinvalid Ġsearch Ġkey , Ġoperation , Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ DisplayName (" given ĠONLY Ġinvalid Ġsearch Ġparameters Ġ- Ġwhen ĠCOUNT Ġentities Ġ- Ġreturns ĠBadRequest Ġresponse ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġtest Count Entities With Only Invalid Search Parameter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( search Service . generate Specification ( invalid Search )). thenReturn (( invalid Search Specification )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Throw ( RuntimeException :: class ). wh enever ( repository ). count ( invalid Search Specification ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThrows < RuntimeException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . count ( invalid Search ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ DisplayName (" given Ġinvalid Ġsearch Ġparameters Ġ- Ġwhen ĠDELETE Ġentities Ġ- Ġreturns ĠBadRequest Ġresponse ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġtest Delete Entities With Invalid Search Parameter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( search Service . generate Specification ( invalid Search )). thenReturn (( invalid Search Specification )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Throw ( RuntimeException :: class ). wh enever ( repository ). findAll ( invalid Search Specification ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThrows < RuntimeException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . removeAll ( invalid Search ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ