package Ġcom . stripe . android . identity . navigation Ċ Ċ import Ġandroid . view . View Ċ import Ġandroidx . arch . core . executor . testing . Instant Task Executor Rule Ċ import Ġandroidx . fragment . app . testing . launch Fragment In Container Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . navigation . Navigation Ċ import Ġandroidx . navigation . testing . Test Nav Host Controller Ċ import Ġandroidx . test . core . app . Application Provider Ċ import Ġcom . google . common . truth . Truth . assertThat Ċ import Ġcom . stripe . android . core . exception . API Exception Ċ import Ġcom . stripe . android . identity . Identity Verification Sheet Contract Ċ import Ġcom . stripe . android . identity . R Ċ import Ġcom . stripe . android . identity . databinding . Consent Fragment Binding Ċ import Ġcom . stripe . android . identity . networking . Resource Ċ import Ġcom . stripe . android . identity . networking . models . Verification Page Ċ import Ġcom . stripe . android . identity . networking . models . Verification Page Data Ċ import Ġcom . stripe . android . identity . networking . models . Verification Page Data Requirement Error Ċ import Ġcom . stripe . android . identity . networking . models . Verification Page Data Requirements Ċ import Ġcom . stripe . android . identity . networking . models . Verification Page Static Content Consent Page Ċ import Ġcom . stripe . android . identity . viewModel Factory For Ċ import Ġcom . stripe . android . identity . view model . Identity ViewModel Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . rules . Test Rule Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . mockito . kotlin . any Ċ import Ġorg . mockito . kotlin . mock Ċ import Ġorg . mockito . kotlin . wh enever Ċ import Ġorg . ro bo lectric . Ro bo lectric TestRunner Ċ Ċ @ RunWith ( Ro bo lectric TestRunner :: class ) Ċ internal Ġclass ĠCon sent Fragment Test Ġ{ ĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġvar Ġrule : ĠTest Rule Ġ= ĠInstant Task Executor Rule () ĊĊĠĠĠ Ġprivate Ġval Ġverification Page Ġ= Ġmock < Verification Page >(). also Ġ{ ĊĠĠĠĠĠĠĠ Ġwhenever ( it . bio metric Consent ). thenReturn ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVerification Page Static Content Consent Page ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccept ButtonText Ġ= ĠCON SENT _ ACCEPT _ TEXT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= ĠCON SENT _ TITLE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivacy Policy Ġ= ĠCON SENT _ PRIV ACY _ POLICY , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Estimate Ġ= ĠCON SENT _ TIME _ EST IM ATE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= ĠCON SENT _ BODY , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdecl ine ButtonText Ġ= ĠCON SENT _ DECL INE _ TEXT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġcorrect Verification Data Ġ= Ġmock < Verification Page Data >(). also Ġ{ ĊĠĠĠĠĠĠĠ Ġwhenever ( it . requirements ). thenReturn ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVerification Page Data Requirements ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerrors Ġ= Ġempty List (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmissing Ġ= Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġincorrect Verification Data Ġ= Ġmock < Verification Page Data >(). also Ġ{ ĊĠĠĠĠĠĠĠ Ġwhenever ( it . requirements ). thenReturn ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVerification Page Data Requirements ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerrors Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVerification Page Data Requirement Error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= ĠERROR _ BODY , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Text Ġ= ĠERROR _ BUTTON _ TEXT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequirement Ġ= ĠVerification Page Data Requirement Error . Requirement . BIO METRIC CON SENT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= ĠERROR _ TITLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmissing Ġ= Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġverification Page LiveData Ġ= ĠMutable LiveData < Resource < Verification Page >>() ĊĠĠĠ Ġprivate Ġval Ġmock Identity ViewModel Ġ= Ġmock < Identity ViewModel >(). also Ġ{ ĊĠĠĠĠĠĠĠ Ġwhenever ( it . verification Page ). thenReturn ( verification Page LiveData ) ĊĠĠĠĠĠĠĠ Ġwhenever ( it . args ). thenReturn ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIdentity Verification Sheet Contract . Args ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverification SessionId Ġ= ĠVER IFICATION _ SESSION _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġep hemeral Key Secret Ġ= ĠEP HE MER AL _ KEY , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmerchant Logo Ġ= ĠMER CHANT _ LOG O ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġwaiting Ġverification Page ĠUI Ġshows Ġprogress Ġcircular `() Ġ{ ĊĠĠĠĠĠĠĠ Ġlaunch Consent Fragment Ġ{ Ġbinding , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( binding . load ings . visibility ). isEqualTo ( View . VISIBLE ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( binding . texts . visibility ). isEqualTo ( View . GONE ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( binding . buttons . visibility ). isEqualTo ( View . GONE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġverification Page Ġis Ġready ĠUI Ġis Ġbound Ġcorrectly `() Ġ{ ĊĠĠĠĠĠĠĠ Ġlaunch Consent Fragment Ġ{ Ġbinding , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverification Page LiveData . post Value ( Resource . success ( verification Page )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( binding . load ings . visibility ). isEqualTo ( View . GONE ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( binding . texts . visibility ). isEqualTo ( View . VISIBLE ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( binding . buttons . visibility ). isEqualTo ( View . VISIBLE ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( binding . title Text . text ). isEqualTo ( CON SENT _ TITLE ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( binding . privacy Policy . text . toString ()). isEqualTo ( CON SENT _ PRIV ACY _ POLICY ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( binding . time Estimate . text ). isEqualTo ( CON SENT _ TIME _ EST IM ATE ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( binding . body . text . toString ()). isEqualTo ( CON SENT _ BODY ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( binding . agree . text ). isEqualTo ( CON SENT _ ACCEPT _ TEXT ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( binding . decl ine . text ). isEqualTo ( CON SENT _ DECL INE _ TEXT ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġverification ApiError LiveData Ġis Ġready Ġtransitions Ġto Ġerror Fragment `() Ġ{ ĊĠĠĠĠĠĠĠ Ġlaunch Consent Fragment Ġ{ Ġ_, Ġnav Controller Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverification Page LiveData . post Value ( Resource . error ( throwable Ġ= Ġmock ())) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( nav Controller . current Destination ?. id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( R . id . error Fragment ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġaccepted Ġand Ġpost Verification Data Ġsuccess Ġtransitions Ġto Ġdoc Selection Fragment `() Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock Identity ViewModel . post Verification Page Data ( any ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). thenReturn ( correct Verification Data ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Consent Fragment Ġ{ Ġbinding , Ġnav Controller Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverification Page LiveData . post Value ( Resource . success ( verification Page )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . agree . call OnClick () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( nav Controller . current Destination ?. id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( R . id . doc Selection Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġaccepted Ġand Ġpost Verification Data Ġfails Ġtransitions Ġto Ġerror Fragment `() Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock Identity ViewModel . post Verification Page Data ( any ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). then Throw ( API Exception ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Consent Fragment Ġ{ Ġbinding , Ġnav Controller Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverification Page LiveData . post Value ( Resource . success ( verification Page )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . agree . call OnClick () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( nav Controller . current Destination ?. id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( R . id . error Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġdecl ined Ġand Ġpost Verification Data Ġsuccess Ġtransitions Ġto Ġerror Fragment Ġwith Ġreturned Ġvalue `() Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock Identity ViewModel . post Verification Page Data ( any ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). thenReturn ( incorrect Verification Data ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Consent Fragment Ġ{ Ġbinding , Ġnav Controller Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverification Page LiveData . post Value ( Resource . success ( verification Page )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . decl ine . call OnClick () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire NotNull ( nav Controller . back Stack . last (). arguments ). let Ġ{ Ġarguments Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( arguments [ Error Fragment . ARG _ ERROR _ TITLE ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( ERROR _ TITLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( arguments [ Error Fragment . ARG _ ERROR _ CONTENT ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( ERROR _ BODY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( arguments [ Error Fragment . ARG _ GO _ BACK _ BUTTON _ DEST INATION ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( R . id . action _ error Fragment _ to _ consent Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( arguments [ Error Fragment . ARG _ GO _ BACK _ BUTTON _ TEXT ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( ERROR _ BUTTON _ TEXT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( nav Controller . current Destination ?. id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( R . id . error Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġdecl ined Ġand Ġpost Verification Data Ġfails Ġtransitions Ġto Ġerror Fragment `() Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock Identity ViewModel . post Verification Page Data ( any ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). then Throw ( API Exception ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Consent Fragment Ġ{ Ġbinding , Ġnav Controller Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverification Page LiveData . post Value ( Resource . success ( verification Page )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . decl ine . call OnClick () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( nav Controller . current Destination ?. id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( R . id . error Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlaunch Consent Fragment ( ĊĠĠĠĠĠĠĠ Ġtest Block : Ġ( binding : ĠCon sent Fragment Binding , Ġnav Controller : ĠTest Nav Host Controller ) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ= Ġlaunch Fragment In Container ( ĊĠĠĠĠĠĠĠ Ġtheme Res Id Ġ= ĠR . style . Theme _ Material Components ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠCon sent Fragment ( viewModel Factory For ( mock Identity ViewModel )) ĊĠĠĠ Ġ}. on Fragment Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnav Controller Ġ= ĠTest Nav Host Controller ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApplication Provider . getApplicationContext () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġnav Controller . set Graph ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . navigation . identity _ nav _ graph ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġnav Controller . setCurrent Destination ( R . id . consent Fragment ) ĊĠĠĠĠĠĠĠ ĠNavigation . setView Nav Controller ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . require View (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġtest Block ( Consent Fragment Binding . bind ( it . require View ()), Ġnav Controller ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCON SENT _ TITLE Ġ= Ġ" title " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCON SENT _ PRIV ACY _ POLICY Ġ= Ġ" privacy Ġpolicy " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCON SENT _ TIME _ EST IM ATE Ġ= Ġ" time Ġestimate " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCON SENT _ BODY Ġ= Ġ" this Ġis Ġthe Ġconsent Ġbody " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCON SENT _ ACCEPT _ TEXT Ġ= Ġ" yes " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCON SENT _ DECL INE _ TEXT Ġ= Ġ" no " ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠERROR _ BODY Ġ= Ġ" error Ġbody " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠERROR _ BUTTON _ TEXT Ġ= Ġ" go Ġback Ġto Ġconsent " ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠERROR _ TITLE Ġ= Ġ" error Ġtitle " ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠVER IFICATION _ SESSION _ ID Ġ= Ġ" id _ 5 6 7 8 " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEP HE MER AL _ KEY Ġ= Ġ" e ak _ 5 6 7 8 " ĊĠĠĠĠĠĠĠ Ġval ĠMER CHANT _ LOG O Ġ= ĠR . drawable . check _ mark ĊĠĠĠ Ġ} Ċ } Ċ