/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠAnd rey ĠT ol pe ev Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . github . v ase 4 kin . team city app . build list . view Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . Instrumentation Ċ import Ġandroid . content . Intent Ċ import Ġandroidx . test . espress o . Esp ress o . on View Ċ import Ġandroidx . test . espress o . action . View Actions . click Ċ import Ġandroidx . test . espress o . assertion . View Assertions . matches Ċ import Ġandroidx . test . espress o . intent . Intent s . assert NoUn verified Intent s Ċ import Ġandroidx . test . espress o . intent . Intent s . int ended Ċ import Ġandroidx . test . espress o . intent . Intent s . int ending Ċ import Ġandroidx . test . espress o . intent . matcher . Bundle Matchers . has Entry Ċ import Ġandroidx . test . espress o . intent . matcher . Intent Matchers . has Component Ċ import Ġandroidx . test . espress o . intent . matcher . Intent Matchers . has Extras Ċ import Ġandroidx . test . espress o . matcher . View Matchers . is Displayed Ċ import Ġandroidx . test . espress o . matcher . View Matchers . with Id Ċ import Ġandroidx . test . espress o . matcher . View Matchers . with Text Ċ import Ġandroidx . test . ext . junit . runners . Android JUnit 4 Ċ import Ġandroidx . test . platform . app . Instrumentation Registry Ċ import Ġcom . github . v ase 4 kin . team city app . R Ċ import Ġcom . github . v ase 4 kin . team city app . Team City Application Ċ import Ġcom . github . v ase 4 kin . team city app . api . Team City Service Ċ import Ġcom . github . v ase 4 kin . team city app . base . extractor . Bundle Extractor Values Ċ import Ġcom . github . v ase 4 kin . team city app . build _ details . view . Build Details Activity Ċ import Ġcom . github . v ase 4 kin . team city app . build list . api . Build s Ċ import Ġcom . github . v ase 4 kin . team city app . build list . filter . Build List Filter Impl Ċ import Ġcom . github . v ase 4 kin . team city app . d agger . components . App Component Ċ import Ġcom . github . v ase 4 kin . team city app . d agger . components . RestApi Component Ċ import Ġcom . github . v ase 4 kin . team city app . d agger . modules . App Module Ċ import Ġcom . github . v ase 4 kin . team city app . d agger . modules . Fake Team City ServiceImpl Ċ import Ġcom . github . v ase 4 kin . team city app . d agger . modules . Mocks Ċ import Ġcom . github . v ase 4 kin . team city app . d agger . modules . RestApi Module Ċ import Ġcom . github . v ase 4 kin . team city app . filter _ builds . router . Filter Build s Router Ċ import Ġcom . github . v ase 4 kin . team city app . filter _ builds . view . Filter Build s Activity Ċ import Ġcom . github . v ase 4 kin . team city app . filter _ builds . view . Filter Build s View Ċ import Ġcom . github . v ase 4 kin . team city app . helper . Custom Intent s Test Rule Ċ import Ġcom . github . v ase 4 kin . team city app . helper . RecyclerView Matcher . Companion . with RecyclerView Ċ import Ġcom . github . v ase 4 kin . team city app . helper . TestUtils Ċ import Ġcom . github . v ase 4 kin . team city app . helper . TestUtils . Companion . has Items Count Ċ import Ġcom . github . v ase 4 kin . team city app . helper . TestUtils . Companion . match Toolbar Title Ċ import Ġcom . github . v ase 4 kin . team city app . home . view . Home Activity Ċ import Ġcom . github . v ase 4 kin . team city app . overview . view . eq Ċ import Ġcom . github . v ase 4 kin . team city app . run build . inter actor . EXTRA _ BUILD _ TYPE _ ID Ċ import Ġcom . github . v ase 4 kin . team city app . run build . router . Run Build Router Ċ import Ġcom . github . v ase 4 kin . team city app . run build . view . Run Build Activity Ċ import Ġio . reactivex . Single Ċ import Ġit . cos en on jav iste . d agger mock . D agger Mock Rule Ċ import Ġorg . hamcrest . Core Matchers . equalTo Ċ import Ġorg . hamcrest . core . All Of . all Of Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . BeforeClass Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . mockito . Matchers . any String Ċ import Ġorg . mockito . Mockito .` when ` Ċ import Ġorg . mockito . Mockito . verify Ċ import Ġorg . mockito . Spy Ċ Ċ /** Ċ Ġ* ĠTests Ġfor Ġ[ Build List Activity ] Ċ Ġ*/ Ċ @ RunWith ( Android JUnit 4 :: class ) Ċ class ĠBuild List Activity Test Ġ{ ĊĊĠĠĠ Ġ@ Rule ĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġval Ġdagger Rule : ĠD agger Mock Rule < RestApi Component > Ġ= ĊĠĠĠĠĠĠĠ ĠD agger Mock Rule ( RestApi Component :: class . java , ĠRest Api Module ( Mocks . URL )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addComponent Dependency ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApp Component :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApp Module ( Instrumentation Registry . get Instrumentation (). target Context . application Context Ġas ĠTeam City Application ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Ġ{ Ġrest Api Component Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapp Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstrument ation Registry . get Instrumentation (). target Context . application Context Ġas ĠTeam City Application ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp . set RestApi Injector ( rest Api Component ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Rule ĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġval Ġactivity Rule : ĠCustom Intent s Test Rule < Home Activity > Ġ= ĊĠĠĠĠĠĠĠ ĠCustom Intent s Test Rule ( Home Activity :: class . java ) ĊĊĠĠĠ Ġ@ Spy ĊĠĠĠ Ġprivate Ġval Ġteam City Service : ĠTeam City Service Ġ= ĠFake Team City ServiceImpl () ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġ@ BeforeClass ĊĠĠĠĠĠĠĠ Ġfun Ġdisable On boarding () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTestUtils . disable On boarding () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġapp Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInstrument ation Registry . get Instrumentation (). target Context . application Context Ġas ĠTeam City Application ĊĠĠĠĠĠĠĠ Ġapp . rest Api Injector . shared User Storage (). clear All () ĊĠĠĠĠĠĠĠ Ġapp . rest Api Injector . shared User Storage () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. save Guest User Account AndSet It As Active ( Mocks . URL , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest User Can See Toolbar Text () Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity Rule . launch Activity ( null ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠOpen Ġbuild Ġtype ĊĠĠĠĠĠĠĠ Ġon View ( with Text (" build Ġtype ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. perform ( click ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠChecking Ġtoolbar Ġtitle ĊĠĠĠĠĠĠĠ Ġmatch Toolbar Title (" build Ġtype ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest User Can See Success Fully Loaded Build s () Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity Rule . launch Activity ( null ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠOpen Ġbuild Ġtype ĊĠĠĠĠĠĠĠ Ġon View ( with Text (" build Ġtype ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. perform ( click ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠList Ġhas Ġitem Ġwith Ġheader ĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . build _ recycler _ view )). check ( has Items Count ( 5 )) ĊĠĠĠĠĠĠĠ Ġ// ĠChecking Ġheader Ġ 1 ĊĠĠĠĠĠĠĠ Ġon View ( with RecyclerView ( R . id . build _ recycler _ view ). at Position On View ( 0 , ĠR . id . section _ text )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. check ( matches ( with Text (" 2 2 ĠJune "))) ĊĠĠĠĠĠĠĠ Ġ// ĠChecking Ġadapter Ġitem Ġ 1 ĊĠĠĠĠĠĠĠ Ġon View ( with RecyclerView ( R . id . build _ recycler _ view ). at Position On View ( 1 , ĠR . id . build Status )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. check ( matches ( with Text (" Running Ġtests "))) ĊĠĠĠĠĠĠĠ Ġon View ( with RecyclerView ( R . id . build _ recycler _ view ). at Position On View ( 1 , ĠR . id . branch Name )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. check ( matches ( with Text (" refs / heads / master "))) ĊĠĠĠĠĠĠĠ Ġon View ( with RecyclerView ( R . id . build _ recycler _ view ). at Position On View ( 1 , ĠR . id . build Number )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. check ( matches ( with Text ("# 2 4 5 8 "))) ĊĠĠĠĠĠĠĠ Ġ// ĠChecking Ġheader Ġ 2 ĊĠĠĠĠĠĠĠ Ġon View ( with RecyclerView ( R . id . build _ recycler _ view ). at Position On View ( 2 , ĠR . id . section _ text )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. check ( matches ( with Text (" 2 1 ĠJune "))) ĊĠĠĠĠĠĠĠ Ġ// ĠChecking Ġadapter Ġitem Ġ 2 ĊĠĠĠĠĠĠĠ Ġon View ( with RecyclerView ( R . id . build _ recycler _ view ). at Position On View ( 3 , ĠR . id . build Status )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. check ( matches ( with Text (" Success "))) ĊĠĠĠĠĠĠĠ Ġon View ( with RecyclerView ( R . id . build _ recycler _ view ). at Position On View ( 3 , ĠR . id . branch Name )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. check ( matches ( with Text (" refs / heads / master "))) ĊĠĠĠĠĠĠĠ Ġon View ( with RecyclerView ( R . id . build _ recycler _ view ). at Position On View ( 3 , ĠR . id . build Number )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. check ( matches ( with Text ("# 2 4 5 9 "))) ĊĠĠĠĠĠĠĠ Ġ// ĠChecking Ġadapter Ġitem Ġ 3 ĊĠĠĠĠĠĠĠ Ġon View ( with RecyclerView ( R . id . build _ recycler _ view ). at Position On View ( 4 , ĠR . id . build Status )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. check ( matches ( with Text (" Error Ġwith Ġsm th "))) ĊĠĠĠĠĠĠĠ Ġon View ( with RecyclerView ( R . id . build _ recycler _ view ). at Position On View ( 4 , ĠR . id . build Number )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. check ( matches ( with Text ("# 2 4 6 0 "))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest User Can See Failure Message If Sm th Bad H app ens In Build List Loading () Ġ{ ĊĠĠĠĠĠĠĠ Ġ` when `( team City Service . list Build s ( any String (), Ġany String ())). thenReturn ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSingle . error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRuntimeException (" sm th Ġbad Ġh append !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġactivity Rule . launch Activity ( null ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠOpen Ġbuild Ġtype ĊĠĠĠĠĠĠĠ Ġon View ( with Text (" build Ġtype ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. perform ( click ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġerror Ġmessage ĊĠĠĠĠĠĠĠ Ġon View ( with Text ( R . string . error _ view _ error _ text )). check ( matches ( is Displayed ())) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest User Can See Load Empty List Message If Build List IsEmpty () Ġ{ ĊĠĠĠĠĠĠĠ Ġ` when `( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġteam City Service . list Build s ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany String (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany String () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). thenReturn ( Single . just ( Build s ( 0 , Ġempty List ()))) ĊĊĠĠĠĠĠĠĠ Ġactivity Rule . launch Activity ( null ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠOpen Ġbuild Ġtype ĊĠĠĠĠĠĠĠ Ġon View ( with Text (" build Ġtype ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. perform ( click ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġthe Ġlist Ġis Ġempty ĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . empty _ title )). check ( matches ( is Displayed ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. check ( matches ( with Text ( R . string . empty _ list _ message _ builds ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest User Can Open Run Build () Ġ{ ĊĠĠĠĠĠĠĠ Ġ` when `( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġteam City Service . list Build s ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany String (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany String () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). thenReturn ( Single . just ( Build s ( 0 , Ġempty List ()))) ĊĊĠĠĠĠĠĠĠ Ġactivity Rule . launch Activity ( null ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠOpen Ġbuild Ġtype ĊĠĠĠĠĠĠĠ Ġon View ( with Text (" build Ġtype ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. perform ( click ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠPress ing Ġrun Ġbuild Ġfab ĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . floating _ action _ button )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. perform ( click ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġrun Ġbuild Ġactivity Ġis Ġopened ĊĠĠĠĠĠĠĠ Ġintended ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġall Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Component ( Run Build Activity :: class . java . name ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Extras ( has Entry ( equalTo ( EXTRA _ BUILD _ TYPE _ ID ), ĠequalTo (" build _ type _ id "))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest User Can See Sn ackBar If Build Is Added To Queue () Ġ{ ĊĠĠĠĠĠĠĠ Ġ` when `( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġteam City Service . list Build s ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany String (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany String () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). thenReturn ( Single . just ( Build s ( 0 , Ġempty List ()))) ĊĊĠĠĠĠĠĠĠ Ġ// ĠPre paring Ġstub bing Ġintent ĊĠĠĠĠĠĠĠ Ġval Ġresult Data Ġ= ĠIntent () ĊĠĠĠĠĠĠĠ Ġresult Data . putExtra ( Run Build Router . EXTRA _ H REF , Ġ" href ") ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠInstrument ation . Activity Result ( Activity . RESULT _ OK , Ġresult Data ) ĊĊĠĠĠĠĠĠĠ Ġactivity Rule . launch Activity ( null ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠOpen Ġbuild Ġtype ĊĠĠĠĠĠĠĠ Ġon View ( with Text (" build Ġtype ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. perform ( click ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġup Ġresult Ġstub bing ĊĠĠĠĠĠĠĠ Ġint ending ( has Component ( Run Build Activity :: class . java . name )). respond With ( result ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠPress ing Ġrun Ġbuild Ġfab ĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . floating _ action _ button )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. perform ( click ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġsn ack Ġbar Ġtext ĊĠĠĠĠĠĠĠ Ġon View ( with Text ( R . string . text _ build _ is _ run )). check ( matches ( is Displayed ())) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest User Can See Build List Is Ref reshed If Build Is Added To Queue () Ġ{ ĊĠĠĠĠĠĠĠ Ġ` when `( team City Service . list Build s ( any String (), Ġany String ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn ( Single . just ( Build s ( 0 , Ġempty List ()))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. then Call Real Method () ĊĊĠĠĠĠĠĠĠ Ġ// ĠPre paring Ġstub bing Ġintent ĊĠĠĠĠĠĠĠ Ġval Ġresult Data Ġ= ĠIntent () ĊĠĠĠĠĠĠĠ Ġresult Data . putExtra ( Run Build Router . EXTRA _ H REF , Ġ" href ") ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠInstrument ation . Activity Result ( Activity . RESULT _ OK , Ġresult Data ) ĊĊĠĠĠĠĠĠĠ Ġactivity Rule . launch Activity ( null ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠOpen Ġbuild Ġtype ĊĠĠĠĠĠĠĠ Ġon View ( with Text (" build Ġtype ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. perform ( click ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġthe Ġlist Ġis Ġempty ĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . empty _ title )). check ( matches ( is Displayed ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. check ( matches ( with Text ( R . string . empty _ list _ message _ builds ))) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġup Ġresult Ġstub bing ĊĠĠĠĠĠĠĠ Ġint ending ( has Component ( Run Build Activity :: class . java . name )). respond With ( result ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠPress ing Ġrun Ġbuild Ġfab ĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . floating _ action _ button )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. perform ( click ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġnew Ġitems Ġappeared ĊĠĠĠĠĠĠĠ Ġon View ( with RecyclerView ( R . id . build _ recycler _ view ). at Position On View ( 1 , ĠR . id . build Status )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. check ( matches ( with Text (" Running Ġtests "))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest User Can Open Recent ly Queued Build From Sn ackBar If No Errors () Ġ{ ĊĠĠĠĠĠĠĠ Ġ` when `( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġteam City Service . list Build s ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany String (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany String () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). thenReturn ( Single . just ( Build s ( 0 , Ġempty List ()))) ĊĊĠĠĠĠĠĠĠ Ġ// ĠPre paring Ġstub bing Ġintent ĊĠĠĠĠĠĠĠ Ġval Ġresult Data Ġ= ĠIntent () ĊĠĠĠĠĠĠĠ Ġresult Data . putExtra ( Run Build Router . EXTRA _ H REF , Ġ" href ") ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠInstrument ation . Activity Result ( Activity . RESULT _ OK , Ġresult Data ) ĊĊĠĠĠĠĠĠĠ Ġactivity Rule . launch Activity ( null ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠOpen Ġbuild Ġtype ĊĠĠĠĠĠĠĠ Ġon View ( with Text (" build Ġtype ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. perform ( click ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġup Ġresult Ġstub bing ĊĠĠĠĠĠĠĠ Ġint ending ( has Component ( Run Build Activity :: class . java . name )). respond With ( result ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠPress ing Ġrun Ġbuild Ġfab ĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . floating _ action _ button )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. perform ( click ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠMock Ġbuild Ġcall ĊĠĠĠĠĠĠĠ Ġval Ġbuild Ġ= ĠMock s . running Build () ĊĠĠĠĠĠĠĠ Ġ` when `( team City Service . build ( any String ())). thenReturn ( Single . just ( build )) ĊĊĠĠĠĠĠĠĠ Ġ// ĠClick Ġon Ġshow Ġbutton Ġof Ġqueued Ġbuild Ġsn ack Ġbar ĊĠĠĠĠĠĠĠ Ġon View ( with Text ( R . string . text _ show _ build )). perform ( click ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġbuild Ġis Ġopened ĊĠĠĠĠĠĠĠ Ġintended ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġall Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Component ( Build Details Activity :: class . java . name ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Extras ( has Entry ( equalTo ( Bundle Extractor Values . BUILD ), ĠequalTo ( build ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest User Can See Error Snackbar When Open Recent ly Queued Build If There Are Errors () Ġ{ ĊĠĠĠĠĠĠĠ Ġ` when `( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġteam City Service . list Build s ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany String (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany String () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). thenReturn ( Single . just ( Build s ( 0 , Ġempty List ()))) ĊĊĠĠĠĠĠĠĠ Ġ// ĠPre paring Ġstub bing Ġintent ĊĠĠĠĠĠĠĠ Ġval Ġresult Data Ġ= ĠIntent () ĊĠĠĠĠĠĠĠ Ġresult Data . putExtra ( Run Build Router . EXTRA _ H REF , Ġ" href ") ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠInstrument ation . Activity Result ( Activity . RESULT _ OK , Ġresult Data ) ĊĊĠĠĠĠĠĠĠ Ġactivity Rule . launch Activity ( null ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠOpen Ġbuild Ġtype ĊĠĠĠĠĠĠĠ Ġon View ( with Text (" build Ġtype ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. perform ( click ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġup Ġresult Ġstub bing ĊĠĠĠĠĠĠĠ Ġint ending ( has Component ( Run Build Activity :: class . java . name )). respond With ( result ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠPress ing Ġrun Ġbuild Ġfab ĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . floating _ action _ button )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. perform ( click ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠMock Ġbuild Ġcall ĊĠĠĠĠĠĠĠ Ġ` when `( team City Service . build ( any String ())). thenReturn ( Single . error ( RuntimeException ())) ĊĊĠĠĠĠĠĠĠ Ġ// ĠClick Ġon Ġshow Ġbutton Ġof Ġqueued Ġbuild Ġsn ack Ġbar ĊĠĠĠĠĠĠĠ Ġon View ( with Text ( R . string . text _ show _ build )). perform ( click ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġerror Ġsn ack Ġbar ĊĠĠĠĠĠĠĠ Ġon View ( with Text ( R . string . error _ opening _ build )). check ( matches ( is Displayed ())) ĊĊĠĠĠĠĠĠĠ Ġ// ĠClick Ġon Ġretry Ġbutton ĊĠĠĠĠĠĠĠ Ġon View ( with Text ( R . string . download _ artifact _ retry _ sn ack _ bar _ retry _ button )). perform ( click ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġerror Ġsn ack Ġbar Ġagain ĊĠĠĠĠĠĠĠ Ġon View ( with Text ( R . string . error _ opening _ build )). check ( matches ( is Displayed ())) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest User Can Open Filter Build s () Ġ{ ĊĠĠĠĠĠĠĠ Ġ` when `( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġteam City Service . list Build s ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany String (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany String () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). thenReturn ( Single . just ( Build s ( 0 , Ġempty List ()))) ĊĊĠĠĠĠĠĠĠ Ġactivity Rule . launch Activity ( null ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠOpen Ġbuild Ġtype ĊĠĠĠĠĠĠĠ Ġon View ( with Text (" build Ġtype ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. perform ( click ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠPress ing Ġfilter Ġbuilds Ġtoolbar Ġitem ĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . filter _ builds )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. perform ( click ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġfilter Ġbuilds Ġactivity Ġis Ġopened ĊĠĠĠĠĠĠĠ Ġintended ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġall Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Component ( Filter Build s Activity :: class . java . name ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Extras ( has Entry ( equalTo ( EXTRA _ BUILD _ TYPE _ ID ), ĠequalTo (" build _ type _ id "))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest User Can See Sn ackBar If Build Filters Have Been Applied () Ġ{ ĊĠĠĠĠĠĠĠ Ġ` when `( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġteam City Service . list Build s ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany String (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany String () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). thenReturn ( Single . just ( Build s ( 0 , Ġempty List ()))) ĊĊĠĠĠĠĠĠĠ Ġ// ĠPre paring Ġstub bing Ġintent ĊĠĠĠĠĠĠĠ Ġval Ġresult Data Ġ= ĠIntent () ĊĠĠĠĠĠĠĠ Ġval Ġfilter Ġ= ĠBuild List Filter Impl () ĊĠĠĠĠĠĠĠ Ġfilter . set Filter ( Filter Build s View . FILTER _ CANCEL LED ) ĊĠĠĠĠĠĠĠ Ġfilter . set Branch (" branch ") ĊĠĠĠĠĠĠĠ Ġfilter . set Personal ( true ) ĊĠĠĠĠĠĠĠ Ġfilter . set Pin ned ( true ) ĊĠĠĠĠĠĠĠ Ġresult Data . putExtra ( Filter Build s Router . EXTRA _ FILTER , Ġfilter ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠInstrument ation . Activity Result ( Activity . RESULT _ OK , Ġresult Data ) ĊĊĠĠĠĠĠĠĠ Ġactivity Rule . launch Activity ( null ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠOpen Ġbuild Ġtype ĊĠĠĠĠĠĠĠ Ġon View ( with Text (" build Ġtype ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. perform ( click ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġup Ġresult Ġstub bing ĊĠĠĠĠĠĠĠ Ġint ending ( has Component ( Filter Build s Activity :: class . java . name )). respond With ( result ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠPress ing Ġfilter Ġbuilds Ġtoolbar Ġitem ĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . filter _ builds )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. perform ( click ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġsn ack Ġbar Ġtext ĊĠĠĠĠĠĠĠ Ġon View ( with Text ( R . string . text _ filters _ applied )). check ( matches ( is Displayed ())) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġdata Ġwas Ġloaded Ġwith Ġnew Ġfilter ĊĠĠĠĠĠĠĠ Ġverify ( team City Service ). list Build s ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeq (" build _ type _ id "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeq (" c anceled : true , branch : name : branch , personal : true , pinned : true , count : 1 0 ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest User Cannot Click On Section () Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity Rule . launch Activity ( null ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠOpen Ġbuild Ġtype ĊĠĠĠĠĠĠĠ Ġon View ( with Text (" build Ġtype ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. perform ( click ()) ĊĊĠĠĠĠĠĠĠ Ġintended ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġall Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Component ( Build List Activity :: class . java . name ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Extras ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Entry ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠequalTo ( Bundle Extractor Values . BUILD _ LIST _ FILTER ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠequalTo < Any >( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Entry ( equalTo ( Bundle Extractor Values . ID ), ĠequalTo (" build _ type _ id ")), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Entry ( equalTo ( Bundle Extractor Values . NAME ), ĠequalTo (" build Ġtype ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠClick ing Ġon Ġheader ĊĠĠĠĠĠĠĠ Ġon View ( with RecyclerView ( R . id . build _ recycler _ view ). at Position On View ( 0 , ĠR . id . section _ text )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. check ( matches ( with Text (" 2 2 ĠJune "))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. perform ( click ()) ĊĊĠĠĠĠĠĠĠ Ġassert NoUn verified Intent s () ĊĠĠĠ Ġ} Ċ } Ċ