package Ġcom . gil ded rose . item Ċ Ċ import Ġcom . gil ded rose . Base Test Ċ import Ġcom . gil ded rose . Item Ċ import Ġorg . assertj . core . api . Java 6 Assertions . assertThat Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ Ċ class ĠBack stage P asses Item Updater Test Ġ: ĠBaseTest () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġupdater : ĠItem Updater ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġitem : ĠItem ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġupdater Ġ= ĠBack stage P asses Item Updater () ĊĠĠĠĠĠĠĠ Ġitem Ġ= ĠItem (" A ged ĠB rie ", Ġgenerate Random Number (), Ġgenerate Random Quality Value ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġupdate _ after Any NumberOf Days _ should De crease Sell In By NumberOf Days () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdays Ġ= Ġgenerate Random Number () ĊĠĠĠĠĠĠĠ Ġval Ġinitial Sell In Ġ= Ġgenerate Random Number () ĊĠĠĠĠĠĠĠ Ġitem Ġ= Ġitem . copy ( sell In Ġ= Ġinitial Sell In ) ĊĊĠĠĠĠĠĠĠ Ġrepeat ( days , Ġ{ Ġupdater . update ( item ) Ġ}) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( item . sell In ). isEqualTo ( initial Sell In Ġ- Ġdays ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġupdate _ after Any NumberOf Days _ should Have Quality In Limits () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( days Ġin Ġ 0 Ġuntil Ġ 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( days , Ġ{ Ġupdater . update ( item ) Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( item . quality ). is Between ( 0 , Ġ 5 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġupdate _ when Sell In Negative Or Zero _ should Set Quality To Zero () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( sell In Ġin Ġ- 1 0 0 Ġuntil Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdays Ġ= Ġgenerate Random Number () Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ġ= Ġitem . copy ( sell In Ġ= Ġsell In ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( days , Ġ{ Ġupdater . update ( item ) Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( item . quality ). is Zero () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġupdate _ when Sell In More Than Zero And LessThan Six _ should Increase Quality By NumberOf Days Multip lied By Three () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( sell In Ġin Ġ 1 Ġuntil Ġ 6 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdays Ġ= Ġsell In ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinitial Item Quality Ġ= Ġgenerate Random Quality Value () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ġ= Ġitem . copy ( sell In Ġ= Ġsell In , Ġquality Ġ= Ġinitial Item Quality ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( days , Ġ{ Ġupdater . update ( item ) Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Quality Ġ= Ġ( initial Item Quality Ġ+ Ġdays Ġ* Ġ 3 ). coerce At Most ( 5 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( item . quality ). isEqualTo ( expected Quality ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġupdate _ when Sell In More Than Five And LessThan Ele ven _ should Increase Quality By NumberOf Days Multip lied By Two () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( sell In Ġin Ġ 6 Ġuntil Ġ 1 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdays Ġ= Ġ( 0 .. sell In Ġ- Ġ 6 ). random ize () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinitial Item Quality Ġ= Ġgenerate Random Quality Value () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ġ= Ġitem . copy ( sell In Ġ= Ġsell In , Ġquality Ġ= Ġinitial Item Quality ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( days , Ġ{ Ġupdater . update ( item ) Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Quality Ġ= Ġ( initial Item Quality Ġ+ Ġdays Ġ* Ġ 2 ). coerce At Most ( 5 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( item . quality ). isEqualTo ( expected Quality ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġupdate _ when Sell In More Than Ele ven _ should Increase Quality By NumberOf Days () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( sell In Ġin Ġ 1 1 Ġuntil Ġ 1 0 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdays Ġ= Ġ( 0 .. sell In Ġ- Ġ 1 1 ). random ize () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinitial Item Quality Ġ= Ġgenerate Random Quality Value () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ġ= Ġitem . copy ( sell In Ġ= Ġsell In , Ġquality Ġ= Ġinitial Item Quality ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( days , Ġ{ Ġupdater . update ( item ) Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Quality Ġ= Ġ( initial Item Quality Ġ+ Ġdays ). coerce At Most ( 5 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( item . quality ). isEqualTo ( expected Quality ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }