package Ġcom . st ef an br atan ov . sof ias uper mark ets api . flows Ċ Ċ import Ġassert k . assertThat Ċ import Ġassert k . assertions . isEqualTo Ċ import Ġcom . st ef an br atan ov . sof ias uper mark ets api . get Product Ċ import Ġcom . st ef an br atan ov . sof ias uper mark ets api . interfaces . Url Products Extractor Ċ import Ġcom . st ef an br atan ov . sof ias uper mark ets api . links . B illa Sub links Sc raper Ċ import Ġcom . st ef an br atan ov . sof ias uper mark ets api . model . Product Store Ċ import Ġcom . st ef an br atan ov . sof ias uper mark ets api . model . Super market Ċ import Ġcom . st ef an br atan ov . sof ias uper mark ets api . repository . Product Store Repository Ċ import Ġio . mock k . every Ċ import Ġio . mock k . impl . annotations . Inject Mock Ks Ċ import Ġio . mock k . impl . annotations . Mock K Ċ import Ġio . mock k . junit 5 . Mock K Extension Ċ import Ġio . mock k . mock k Class Ċ import Ġio . mock k . verify Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . extension . Extend With Ċ import Ġjava . net . URL Ċ Ċ @ Extend With ( Mock K Extension :: class ) Ċ internal Ġclass ĠB illa Flow Test Ġ{ ĊĊĠĠĠ Ġ@ Mock K ĊĠĠĠ Ġlateinit Ġvar Ġb illa Sub links Sc raper : ĠB illa Sub links Sc raper ĊĊĠĠĠ Ġ@ Mock K ĊĠĠĠ Ġlateinit Ġvar Ġurl Products Extractor : ĠUrl Products Extractor ĊĊĠĠĠ Ġ@ Mock K ĊĠĠĠ Ġlateinit Ġvar Ġproduct Store Repository : ĠProduct Store Repository ĊĊĠĠĠ Ġ@ Inject Mock Ks ĊĠĠĠ Ġlateinit Ġvar Ġunder Test : ĠB illa Flow ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` runs Ġflow Ġfor Ġb illa `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġhello Ġ= Ġget Product (" hello ") ĊĠĠĠĠĠĠĠ Ġval Ġworld Ġ= Ġget Product (" world ") ĊĊĠĠĠĠĠĠĠ Ġval Ġurl 1 Ġ= Ġmock k Class ( URL :: class ) ĊĠĠĠĠĠĠĠ Ġval Ġurl 2 Ġ= Ġmock k Class ( URL :: class ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġb illa Sub links Sc raper . getSub links () Ġ} Ġreturns ĠlistOf ( url 1 , Ġurl 2 ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġurl Products Extractor . extract ( url 1 ) Ġ} Ġreturns ĠlistOf ( hello ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġurl Products Extractor . extract ( url 2 ) Ġ} Ġreturns ĠlistOf ( world ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproduct Store Repository . save If Products NotEmpty ( any ()) Ġ} Ġreturns Argument Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġunder Test . run S af ely () ĊĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġurl Products Extractor . extract ( url 1 ) Ġ} ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġurl Products Extractor . extract ( url 2 ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected To Save Ġ= ĠProduct Store ( super market Ġ= Ġ" B illa ", Ġproducts Ġ= ĠlistOf ( hello , Ġworld )) ĊĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproduct Store Repository . save If Products NotEmpty ( match Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . super market Ġ== Ġexpected To Save . super market Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . products Ġ== Ġexpected To Save . products ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` gets Ġcorrect Ġsuper market Ġname `() Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat ( under Test . get Super market ()). isEqualTo ( Super market . B IL LA ) ĊĠĠĠ Ġ} Ċ Ċ }