package Ġcom . team 0 3 . cock tail recipes app Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . test . core . app . Application Provider Ċ import Ġandroidx . test . espress o . Esp ress o . on View Ċ import Ġandroidx . test . espress o . action . View Actions .* Ċ import Ġandroidx . test . espress o . assertion . View Assertions . matches Ċ import Ġandroidx . test . espress o . matcher . View Matchers .* Ċ import Ġandroidx . test . ext . junit . rules . Activity Scenario Rule Ċ import Ġandroidx . test . ext . junit . runners . Android JUnit 4 Ċ import Ġcom . android . vol ley . Response Ċ import Ġorg . json . JSONObject Ċ import Ġorg . junit . Assert Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġjava . time . LocalDateTime Ċ Ċ /** Ċ Ġ* ĠInstrument ed Ġtest , Ġwhich Ġwill Ġexecute Ġon Ġan ĠAndroid Ġdevice . Ċ Ġ* Ċ Ġ* ĠSee Ġ[ testing Ġdocumentation ]( http :// d . android . com / tools / testing ). Ċ Ġ*/ Ċ @ RunWith ( Android JUnit 4 :: class ) Ċ class ĠExample Instrument ed Test Ġ{ ĊĠĠĠ Ġprivate Ġval Ġcontext Ġ= ĠApplication Provider . getApplicationContext < Context >() ĊĠĠĠ Ġprivate Ġval Ġserver Ġ= Ġserver API ( context ); ĊĠĠĠ Ġprivate Ġval Ġtest Listener Ġ= ĠTest Listener (); ĊĠĠĠ Ġprivate Ġval Ġtest Error Listener Ġ= ĠTest Error Listener (); ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġactivity Rule Ġ= ĠActivity Scenario Rule ( MainActivity :: class . java ) ĊĊĊĠĠĠ Ġdata Ġclass ĠAnswer Success ( ĊĠĠĠĠĠĠĠ Ġvar Ġsuccess : ĠInt ? Ġ= Ġ- 1 ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġdata Ġclass ĠAnswer UserID ( ĊĠĠĠĠĠĠĠ Ġvar Ġuser _ id : ĠInt ? Ġ= Ġ- 1 ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġdata Ġclass ĠRecipe ( ĊĠĠĠĠĠĠĠ Ġvar Ġname : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġvar Ġpre ptime _ minutes : ĠInt , ĊĠĠĠĠĠĠĠ Ġvar Ġdifficulty : ĠInt , ĊĠĠĠĠĠĠĠ Ġvar Ġinstruction : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġvar Ġcreation _ time : ĠLocalDateTime ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġvar Ġcreator _ username : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġvar Ġr atin : ĠFloat ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġdata Ġclass ĠAnswer Recipes ( ĊĠĠĠĠĠĠĠ Ġvar Ġrecipes : ĠList < Recipe > ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġutil _ wait Result () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ(! test Error Listener . got Response Ġ&& Ġ! test Listener . got Response ); ĊĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( true , Ġtest Listener . got Response ); ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( false , Ġtest Error Listener . got Response ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġregister _ check API _ calls () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġanswer Ġ= Ġserver . register (" daniel ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 4 aeb 2 0 0 0 b 9 de 5 8 5 8 f 5 e 5 e 0 b 7 eda 5 2 f 2 5 3 caf 1 9 5 8 2 c 6 7 cb bb 4 5 3 be 6 9 8 7 ecc 1 baf 2 7 d 7 5 6 7 0 e 3 9 f 7 8 0 5 8 fb 1 e bee 3 d 1 6 b 8 3 d 1 cb dc 8 d 3 6 2 8 6 3 6 3 7 7 b 2 4 5 8 ea 5 bf 1 2 ff 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Listener Ġas ĠResponse . Listener < JSONObject >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Error Listener Ġas ĠResponse . Error Listener ); ĊĊĠĠĠĠĠĠĠ Ġutil _ wait Result (); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġlogin _ check API _ call () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġanswer Ġ= Ġserver . login (" username ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" password _ hash ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Listener Ġas ĠResponse . Listener < JSONObject >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Error Listener Ġas ĠResponse . Error Listener ); ĊĊĠĠĠĠĠĠĠ Ġutil _ wait Result (); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġget Recipes _ check API _ call () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġanswer Ġ= Ġserver . get Recipes ( test Listener Ġas ĠResponse . Listener < JSONObject >, Ġtest Error Listener Ġas ĠResponse . Error Listener ); ĊĠĠĠĠĠĠĠ Ġutil _ wait Result (); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġchange Password _ check API _ call () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġanswer Ġ= Ġserver . change Password (- 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" old _ password _ hash ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" new _ password _ hash ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Listener Ġas ĠResponse . Listener < JSONObject >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Error Listener Ġas ĠResponse . Error Listener ); ĊĠĠĠĠĠĠĠ Ġutil _ wait Result (); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdelete Recipe _ check API _ call () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġanswer Ġ= Ġserver . delete Recipe (- 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Listener Ġas ĠResponse . Listener < JSONObject >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Error Listener Ġas ĠResponse . Error Listener ); ĊĠĠĠĠĠĠĠ Ġutil _ wait Result (); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġlike Recipe _ check API _ call () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġanswer Ġ= Ġserver . like Recipe (- 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Listener Ġas ĠResponse . Listener < JSONObject >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Error Listener Ġas ĠResponse . Error Listener ); ĊĠĠĠĠĠĠĠ Ġutil _ wait Result (); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġadd Recipe _ check API _ call () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġanswer Ġ= Ġserver . add Recipe ( 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Fre ddy ĠKr ue ger ", ĊĠĠĠĠĠĠĠĠĠĠĠĠ 5 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" First Ġput Ġin ĠSt ro h 8 0 Ġin Ġ 1 Ġ 2 cl Ġshot Ġg lass . ĠTake Ġa Ġte as po on Ġand Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" layer Ġthe ĠJ aeger Ġonto Ġthe Ġr um . ĠThen Ġfinally Ġdo Ġthe Ġsame Ġwith Ġthe Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ba ile ys . ĠEn joy !", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" St ro h 8 0 ", Ġ" J aeger me ister ", Ġ" Ba ile ys "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Listener Ġas ĠResponse . Listener < JSONObject >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Error Listener Ġas ĠResponse . Error Listener ); ĊĊĠĠĠĠĠĠĠ Ġutil _ wait Result (); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġrate Recipe _ check API _ call () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġanswer Ġ= Ġserver . like Recipe (- 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Listener Ġas ĠResponse . Listener < JSONObject >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Error Listener Ġas ĠResponse . Error Listener ); ĊĠĠĠĠĠĠĠ Ġutil _ wait Result (); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġlogin Data Test (){ ĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . et Username )). perform ( type Text (" Test username "), Ġclose Soft Keyboard ()) ĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . et Password )). perform ( type Text (" Test password "), Ġclose Soft Keyboard ()) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfill Out Registration form () Ġ{ ĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . btn Register )). perform ( click ()) ĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . txt _ username )). perform ( type Text (" John ĠDoe "), Ġclose Soft Keyboard ()) ĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . txt _ password )). perform ( type Text (" password 1 "), Ġclose Soft Keyboard ()) ĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . txt _ password _ repeat )). perform ( type Text (" password 1 "), Ġclose Soft Keyboard ()) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfill Out Registration form _ Error Password Repeat () Ġ{ ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( Register Funcs (). validate Input (" John ĠDoe ", Ġ" password 1 ", Ġ" password 2 "), Ġ- 4 ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfill Out Registration form _ Error Empty Username () Ġ{ ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( Register Funcs (). validate Input ("", Ġ" password 1 ", Ġ" password 2 "), Ġ- 1 ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfill Out Registration form _ Error Empty Password () Ġ{ ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( Register Funcs (). validate Input (" John ĠDoe ", Ġ"", Ġ" password 2 "), Ġ- 2 ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfill Out Registration form _ Error Empty Password Repeat () Ġ{ ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( Register Funcs (). validate Input (" John ĠDoe ", Ġ" password 1 ", Ġ""), Ġ- 3 ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠRegister an Login With Correct Input () Ġ{ ĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . btn Register )). perform ( click ()) ĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . txt _ username )). perform ( type Text (" Username Test 1 2 3 "), Ġclose Soft Keyboard ()) ĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . txt _ password )). perform ( type Text (" password 1 2 3 "), Ġclose Soft Keyboard ()) ĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . txt _ password _ repeat )). perform ( type Text (" password 1 2 3 "), Ġclose Soft Keyboard ()) ĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . btn _ register )). perform ( click ()) ĊĊĠĠĠĠĠĠĠ ĠThread . sleep ( 2 0 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . et Username )). perform ( type Text (" Username Test 1 2 3 "), Ġclose Soft Keyboard ()) ĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . et Password )). perform ( type Text (" password 1 2 3 "), Ġclose Soft Keyboard ()) ĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . btn Login )). perform ( click ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠPerform Logout () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġlogin ĊĊĠĠĠĠĠĠĠ Ġ// on View ( with Id ( R . id . et Username )). perform ( type Text (" daniel "), Ġclose Soft Keyboard ()) ĊĠĠĠĠĠĠĠ Ġ// on View ( with Id ( R . id . et Password )). perform ( type Text (" 1 2 3 4 q wer "), Ġclose Soft Keyboard ()) ĊĠĠĠĠĠĠĠ Ġ// on View ( with Id ( R . id . btn Login )). perform ( click ()) ĊĊĠĠĠĠĠĠĠ Ġ// Ġuser - profile ĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . img Btn Avatar )). perform ( click ()) ĊĊĠĠĠĠĠĠĠ Ġ// Ġlogout ĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . logout Button )). check ( matches ( with Text ( R . string . logout _ button _ text ))) ĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . logout Button )). perform ( click ()) ĊĊĠĠĠĠĠĠĠ Ġ// Ġcheck Ġif Ġwe Ġare Ġin Ġlogin Ġpage ĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . btn Login )). check ( matches ( is Displayed ())) ĊĠĠĠ Ġ} Ċ }