package Ġun q . edu . remote trainer . application . validator Ċ Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . mock Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . reset Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . wh enever Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . junit . jupiter . api . After Each Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . assert Throws Ċ import Ġun q . edu . remote trainer . application . rest . exception . ValidationError Ċ import Ġun q . edu . remote trainer . application . se vice . Exercise Service Ċ import Ġun q . edu . remote trainer . model . Exercise Ċ Ċ class ĠExercise Validator Test Ġ{ ĊĠĠĠ Ġprivate Ġval Ġexercise Service Mock : ĠExercise Service Ġ= Ġmock () ĊĠĠĠ Ġprivate Ġval Ġexercise Validator : ĠExercise Validator Ġ= ĠExercise Validator ( exercise Service Mock ) ĊĊĠĠĠ Ġ@ After Each ĊĠĠĠ Ġfun Ġafter () Ġ{ ĊĠĠĠĠĠĠĠ Ġreset ( exercise Service Mock ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġfail Ġfor Ġnull Ġid `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġarrange ĊĠĠĠĠĠĠĠ Ġval Ġexercise : ĠExercise Ġ= ĠExercise ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" some Ġname ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" some Ġdescription " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġact ĊĠĠĠĠĠĠĠ Ġval Ġerror Ġ= ĠassertThrows < ValidationError > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexercise Validator . validate For Update ( exercise ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġassert ĊĠĠĠĠĠĠĠ ĠassertThat ( error . message ). isEqualTo (" Exercise Ġto Ġupdate Ġshould Ġexist Ġin Ġthe Ġdatabase .") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġfail Ġif Ġanother Ġexercise Ġwith Ġthe Ġsame Ġname Ġexists `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġarrange ĊĠĠĠĠĠĠĠ Ġval Ġexercise Name : ĠString Ġ= Ġ" exercise Ġname " ĊĠĠĠĠĠĠĠ Ġval Ġexisting Exercise Id : ĠInt Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġval Ġexisting Exercise : ĠExercise Ġ= ĠExercise ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġexisting Exercise Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġexercise Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" some Ġdescription " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġwhenever ( exercise Service Mock . get Exercise ByName ( exercise Name )). thenReturn ( existing Exercise ) ĊĊĠĠĠĠĠĠĠ Ġval Ġexercise ToUpdate : ĠExercise Ġ= ĠExercise ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġexisting Exercise Id + 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġexercise Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" another Ġdescription " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġact ĊĠĠĠĠĠĠĠ Ġval Ġerror Ġ= ĠassertThrows < ValidationError > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexercise Validator . validate For Update ( exercise ToUpdate ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġassert ĊĠĠĠĠĠĠĠ ĠassertThat ( error . message ). isEqualTo (" Another Ġexercise Ġwith Ġthat Ġname Ġexists .") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġupdate Ġthe Ġexercise Ġif Ġfound Ġexercise Ġby Ġname Ġhas Ġthe Ġsame Ġid `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġarrange ĊĠĠĠĠĠĠĠ Ġval Ġexercise Name : ĠString Ġ= Ġ" exercise Ġname " ĊĠĠĠĠĠĠĠ Ġval Ġexisting Exercise Id : ĠInt Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġval Ġexisting Exercise : ĠExercise Ġ= ĠExercise ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġexisting Exercise Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġexercise Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" some Ġdescription " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġwhenever ( exercise Service Mock . get Exercise ByName ( exercise Name )). thenReturn ( existing Exercise ) ĊĊĠĠĠĠĠĠĠ Ġval Ġexercise ToUpdate : ĠExercise Ġ= ĠExercise ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġexisting Exercise Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġexercise Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" another Ġdescription " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġact ĊĠĠĠĠĠĠĠ Ġexercise Validator . validate For Update ( exercise ToUpdate ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġassert Ġ- Ġshouldn 't Ġfail ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġupdate Ġthe Ġexercise Ġif Ġthe Ġname Ġdoesn 't Ġexist `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġarrange ĊĠĠĠĠĠĠĠ Ġval Ġexercise Name : ĠString Ġ= Ġ" exercise Ġname " ĊĠĠĠĠĠĠĠ Ġwhenever ( exercise Service Mock . get Exercise ByName ( exercise Name )). thenReturn ( null ) ĊĊĠĠĠĠĠĠĠ Ġval Ġexercise ToUpdate : ĠExercise Ġ= ĠExercise ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġexercise Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" another Ġdescription " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġact ĊĠĠĠĠĠĠĠ Ġexercise Validator . validate For Update ( exercise ToUpdate ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġassert Ġ- Ġshouldn 't Ġfail ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠCRE ATION ĠVALID ATIONS ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` create Ġshould Ġfail Ġif Ġanother Ġexercise Ġwith Ġthe Ġsame Ġname Ġexists `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġarrange ĊĠĠĠĠĠĠĠ Ġval Ġexercise Name : ĠString Ġ= Ġ" exercise Ġname " ĊĠĠĠĠĠĠĠ Ġval Ġexisting Exercise Id : ĠInt Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġval Ġexisting Exercise : ĠExercise Ġ= ĠExercise ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġexisting Exercise Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġexercise Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" some Ġdescription " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġwhenever ( exercise Service Mock . get Exercise ByName ( exercise Name )). thenReturn ( existing Exercise ) ĊĊĠĠĠĠĠĠĠ Ġval Ġnew Exercise : ĠExercise Ġ= ĠExercise ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġexercise Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" another Ġdescription " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġact ĊĠĠĠĠĠĠĠ Ġval Ġerror Ġ= ĠassertThrows < ValidationError > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexercise Validator . validate For Create ( new Exercise ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġassert ĊĠĠĠĠĠĠĠ ĠassertThat ( error . message ). isEqualTo (" Another Ġexercise Ġwith Ġthat Ġname Ġexists .") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġcreate Ġthe Ġexercise Ġif Ġthe Ġname Ġdoesn 't Ġexist `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġarrange ĊĠĠĠĠĠĠĠ Ġval Ġexercise Name : ĠString Ġ= Ġ" exercise Ġname " ĊĠĠĠĠĠĠĠ Ġwhenever ( exercise Service Mock . get Exercise ByName ( exercise Name )). thenReturn ( null ) ĊĊĠĠĠĠĠĠĠ Ġval Ġnew Exercise : ĠExercise Ġ= ĠExercise ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġexercise Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" some Ġdescription " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġact ĊĠĠĠĠĠĠĠ Ġexercise Validator . validate For Create ( new Exercise ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġassert Ġ- Ġshouldn 't Ġfail ĊĠĠĠ Ġ} Ċ }