package Ġcom . the apache 6 4 . n emo . feature . product detail Ċ Ċ import Ġandroidx . test . core . app . Activity Scenario Ċ import Ġandroidx . test . espress o . intent . Intent s Ċ import Ġandroidx . test . espress o . intent . Intent s . int ended Ċ import Ġandroidx . test . espress o . intent . matcher . Intent Matchers . has Component Ċ import Ġandroidx . test . ext . junit . runners . Android JUnit 4 Ċ import Ġandroidx . test . filters . Large Test Ċ import Ġandroidx . test . platform . app . Instrumentation Registry Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . mock Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . wh enever Ċ import Ġcom . sch ib st ed . sp ain . bar ista . assertion . Bar ista Visibility Assertions . assert Displayed Ċ import Ġcom . sch ib st ed . sp ain . bar ista . assertion . Bar ista Visibility Assertions . assertNot Displayed Ċ import Ġcom . sch ib st ed . sp ain . bar ista . interaction . Bar ista Click Interactions . click On Ċ import Ġcom . the apache 6 4 . n emo . Fake Product DataStore Ċ import Ġcom . the apache 6 4 . n emo . R Ċ import Ġcom . the apache 6 4 . n emo . data . local . table . cart . Cart Dao Ċ import Ġcom . the apache 6 4 . n emo . data . local . table . cart . Cart Entity Ċ import Ġcom . the apache 6 4 . n emo . data . remote . Config Ċ import Ġcom . the apache 6 4 . n emo . data . remote . N emo Api Ċ import Ġcom . the apache 6 4 . n emo . data . repository . Config Repo Ċ import Ġcom . the apache 6 4 . n emo . di . module . Api Module Ċ import Ġcom . the apache 6 4 . n emo . di . module . Cart Module Ċ import Ġcom . the apache 6 4 . n emo . feature . cart . Cart Activity Ċ import Ġcom . the apache 6 4 . n emo . feature . orders um mary . Order Summary Activity Ċ import Ġcom . the apache 6 4 . n emo . utils . test . Id ling Rule Ċ import Ġcom . the apache 6 4 . n emo . utils . test . Main Coroutine Rule Ċ import Ġcom . the apache 6 4 . n emo . utils . test . monitor Activity Ċ import Ġdagger . h ilt . android . testing . Bind Value Ċ import Ġdagger . h ilt . android . testing . H ilt Android Rule Ċ import Ġdagger . h ilt . android . testing . H ilt Android Test Ċ import Ġdagger . h ilt . android . testing . Un install Modules Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . flow . flow Of Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġthe apache 6 4 Ġ: ĠDec Ġ 0 8 ĠTue , 2 0 2 0 Ġ@ Ġ 0 8 : 0 9 Ċ Ġ*/ Ċ @ Un install Modules ( Api Module :: class , ĠCart Module :: class ) Ċ @ H ilt Android Test Ċ @ Large Test Ċ @ RunWith ( Android JUnit 4 :: class ) Ċ @ Experimental Cor outines Api Ċ class ĠProduct Detail Activity Test Ġ{ ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġh ilt Rule Ġ= ĠH ilt Android Rule ( this ) ĊĊĠĠĠ Ġ@ Bind Value ĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġval Ġfake N emo Api : ĠN emo Api Ġ= Ġmock () ĊĊĠĠĠ Ġ@ Bind Value ĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġval Ġconfig Repo : ĠConfig Repo Ġ= Ġmock () ĊĊĠĠĠ Ġ@ Bind Value ĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġval Ġcart Dao : ĠCart Dao Ġ= Ġmock () ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġid ling Rule Ġ= ĠId ling Rule () ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġcoroutine Rule Ġ= ĠMain Coroutine Rule () ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġinit () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġwhenever ( config Repo . getLocal Config ()). thenReturn ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConfig ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Products Ġ= Ġ 1 0 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproducts PerPage Ġ= Ġ 1 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrency Ġ= Ġ"$ ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelivery Charge Ġ= Ġ 1 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Pages Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠGood Ġproduct Ġshow Ġimage , Ġtitle , Ġrating , Ġprice , Ġdetails , Ġbuy Ġnow Ġbutton ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgiven Product _ when Good Product _ then Image Title Rating Price And Buy Now Shown () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠproductId Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġwhenever ( fake N emo Api . get Product ( productId )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn ( Fake Product DataStore . product Success Flow ) ĊĊĠĠĠĠĠĠĠ Ġwhenever ( cart Dao . get Cart Products Flow ()). thenReturn ( flow Of ( listOf ())) ĊĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠInstrument ation Registry . get Instrumentation (). target Context ĊĠĠĠĠĠĠĠ ĠActivity Scenario . launch < Product Detail Activity >( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProduct Detail Activity . getStart Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠproductId ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid ling Rule . data Binding Id ling Resource . monitor Activity ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Displayed ( R . id . iv _ product _ image ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Displayed ( R . id . tv _ product _ title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Displayed ( R . id . mrb _ product _ rating ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Displayed ( R . id . tv _ price ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Displayed ( R . id . b _ buy _ now ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠIf Ġproduct Ġalready Ġexist Ġin Ġcart , ĠGOTO Ġcart Ġshould Ġshow ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgiven Product _ when Exist In Cart _ then Go To Cart Displayed () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠproductId Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġwhenever ( fake N emo Api . get Product ( productId )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn ( Fake Product DataStore . product Success Flow ) ĊĊĠĠĠĠĠĠĠ Ġwhenever ( cart Dao . get Cart Products Flow ()). thenReturn ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflow Of ( listOf ( Cart Entity ( productId , Ġ 1 0 ))) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠInstrument ation Registry . get Instrumentation (). target Context ĊĠĠĠĠĠĠĠ ĠActivity Scenario . launch < Product Detail Activity >( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProduct Detail Activity . getStart Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠproductId ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid ling Rule . data Binding Id ling Resource . monitor Activity ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Displayed ( R . id . b _ go _ to _ cart ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Not Displayed ( R . id . b _ add _ to _ cart ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠIf Ġproduct Ġdoesn 't Ġexist Ġin Ġcart , Ġ' Add Ġto Ġcart ' Ġshould Ġshow ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgiven Product _ when NotIn Cart _ then AddTo Cart Displayed () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠproductId Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġwhenever ( fake N emo Api . get Product ( productId )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn ( Fake Product DataStore . product Success Flow ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġempty Ġproducts Ġin Ġcart ĊĠĠĠĠĠĠĠ Ġwhenever ( cart Dao . get Cart Products Flow ()). thenReturn ( flow Of ( listOf ())) ĊĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠInstrument ation Registry . get Instrumentation (). target Context ĊĠĠĠĠĠĠĠ ĠActivity Scenario . launch < Product Detail Activity >( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProduct Detail Activity . getStart Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠproductId ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid ling Rule . data Binding Id ling Resource . monitor Activity ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Displayed ( R . id . b _ add _ to _ cart ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Not Displayed ( R . id . b _ go _ to _ cart ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠClick ing Ġadd Ġto Ġcart Ġshould Ġshow Ġgo Ġto Ġcart ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgiven Product Detail Page _ when AddTo Cart Clicked _ then Go To Cart Displayed () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠproductId Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġwhenever ( fake N emo Api . get Product ( productId )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn ( Fake Product DataStore . product Success Flow ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġempty Ġproducts Ġin Ġcart ĊĠĠĠĠĠĠĠ Ġwhenever ( cart Dao . get Cart Products Flow ()). thenReturn ( flow Of ( listOf ())) ĊĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠInstrument ation Registry . get Instrumentation (). target Context ĊĠĠĠĠĠĠĠ ĠActivity Scenario . launch < Product Detail Activity >( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProduct Detail Activity . getStart Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠproductId ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid ling Rule . data Binding Id ling Resource . monitor Activity ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Displayed ( R . id . b _ add _ to _ cart ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclick On ( R . id . b _ add _ to _ cart ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Not Displayed ( R . id . b _ add _ to _ cart ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Displayed ( R . id . b _ go _ to _ cart ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠClick ing Ġgo Ġto Ġcart Ġshould Ġlaunch Ġcart Ġactivity ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgiven Product Detail Page _ when Go To Cart Clicked _ then Cart Activity Displayed () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠproductId Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġwhenever ( fake N emo Api . get Product ( productId )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn ( Fake Product DataStore . product Success Flow ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 1 Ġproduct Ġin Ġcart ĊĠĠĠĠĠĠĠ Ġwhenever ( cart Dao . get Cart Products Flow ()). thenReturn ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflow Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCart Entity ( productId , Ġ 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠInstrument ation Registry . get Instrumentation (). target Context ĊĠĠĠĠĠĠĠ ĠActivity Scenario . launch < Product Detail Activity >( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProduct Detail Activity . getStart Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠproductId ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid ling Rule . data Binding Id ling Resource . monitor Activity ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Displayed ( R . id . b _ go _ to _ cart ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInt ents . init () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclick On ( R . id . b _ go _ to _ cart ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintended ( has Component ( Cart Activity :: class . java . name )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInt ents . release () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠClick ing Ġbuy Ġnow Ġshould Ġgo Ġto Ġorder Ġsummary ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgiven Product Detail Page _ when Buy Now Clicked _ then Order Summary La unched () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠproductId Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġwhenever ( fake N emo Api . get Product ( productId )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn ( Fake Product DataStore . product Success Flow ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 1 Ġproduct Ġin Ġcart ĊĠĠĠĠĠĠĠ Ġwhenever ( cart Dao . get Cart Products Flow ()). thenReturn ( flow Of ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠInstrument ation Registry . get Instrumentation (). target Context ĊĠĠĠĠĠĠĠ ĠActivity Scenario . launch < Product Detail Activity >( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProduct Detail Activity . getStart Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠproductId ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid ling Rule . data Binding Id ling Resource . monitor Activity ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Displayed ( R . id . b _ buy _ now ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInt ents . init () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclick On ( R . id . b _ buy _ now ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintended ( has Component ( Order Summary Activity :: class . java . name )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInt ents . release () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }