package Ġcom . github . kom merce . users Ċ Ċ import Ġarrow . core . Either Ċ import Ġcom . github . kom merce . users . dto . New User Dto Ċ import Ġcom . github . kom merce . users . dto . User Dto Ċ import Ġcom . github . kom merce . users . error . User Creation Error Ċ import Ġorg . junit . jupiter . api . Assertions . assertEquals Ċ import Ġorg . junit . jupiter . api . Test Ċ Ċ internal Ġclass ĠAdd User Test Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġreturn Ġuser Ġdata Ġwhen Ġuser Ġsuccessfully Ġadded `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġval Ġemail Ġ= Ġ" test @ test . com " ĊĠĠĠĠĠĠĠ Ġval Ġpassword Ġ= Ġ" 1 2 3 4 " ĊĠĠĠĠĠĠĠ Ġval Ġuser ToAdd Ġ= ĠNew User Dto ( email , Ġpassword ) ĊĠĠĠĠĠĠĠ Ġval Ġusers Module Ġ= Ġcreate Users Module () ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġusers Module . add User ( user ToAdd ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ Ġassert Success ( result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( email , Ġit . email ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġreturn Ġerror Ġwhen Ġemail Ġaddress Ġnot Ġvalid `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġval Ġinvalid Email Ġ= Ġ" test " ĊĠĠĠĠĠĠĠ Ġval Ġpassword Ġ= Ġ" 1 2 3 4 " ĊĠĠĠĠĠĠĠ Ġval Ġuser ToAdd Ġ= ĠNew User Dto ( invalid Email , Ġpassword ) ĊĠĠĠĠĠĠĠ Ġval Ġusers Module Ġ= Ġcreate Users Module () ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġusers Module . add User ( user ToAdd ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ Ġassert Error ( User Creation Error . EMAIL _ NOT _ VALID , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġreturn Ġerror Ġwhen Ġemail Ġaddress Ġalready Ġused `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġval Ġemail Ġ= Ġ" test @ test . com " ĊĠĠĠĠĠĠĠ Ġval Ġpassword Ġ= Ġ" 1 2 3 4 " ĊĠĠĠĠĠĠĠ Ġval Ġuser ToAdd Ġ= ĠNew User Dto ( email , Ġpassword ) ĊĠĠĠĠĠĠĠ Ġval Ġusers Module Ġ= Ġcreate Users Module () ĊĠĠĠĠĠĠĠ Ġusers Module . add User ( user ToAdd ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġusers Module . add User ( user ToAdd ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ Ġassert Error ( User Creation Error . EMAIL _ AL READY _ USED , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġassert Error ( expected : ĠUser Creation Error , Ġresult : ĠEither < User Creation Error , ĠUser Dto >) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEither . Left Ġ-> ĠassertEquals ( expected , Ġresult . a ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEither . Right Ġ-> Ġthrow ĠAssertionError (" Expected Ġerror , Ġbut Ġwas : Ġ${ result . b }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġassert Success ( result : ĠEither < User Creation Error , ĠUser Dto >, Ġassertions : Ġ( User Dto ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEither . Left Ġ-> Ġthrow ĠAssertionError (" Expected Ġresult , Ġbut Ġwas Ġerror : Ġ${ result . a }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEither . Right Ġ-> Ġassertions ( result . b ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }