/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 7 ĠF ab io ĠB erta Ċ Ġ* Ċ Ġ* Ġ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 Ġch . bert a . fab io . popular movies . features . grid . component Ċ Ċ import Ġch . bert a . fab io . popular movies . Immediate Schedulers Rule Ċ import Ġch . bert a . fab io . popular movies . R Ċ import Ġch . bert a . fab io . popular movies . data . Movie Storage Ċ import Ġch . bert a . fab io . popular movies . data . Shared Prefs Ċ import Ġch . bert a . fab io . popular movies . data . d tos . Movie Ċ import Ġch . bert a . fab io . popular movies . data . local mov ied b . Movie Db Ċ import Ġch . bert a . fab io . popular movies . data . local mov ied b . tables . Movie Dao Ċ import Ġch . bert a . fab io . popular movies . data . local mov ied b . tables . Movie Entity Ċ import Ġch . bert a . fab io . popular movies . data . the mov ied b . The Movie Db Service Ċ import Ġch . bert a . fab io . popular movies . data . the mov ied b . d tos . Movies Page Ċ import Ġch . bert a . fab io . popular movies . features . grid . Sort Option Ċ import Ġch . bert a . fab io . popular movies . features . grid . make Sort Options Ċ import Ġch . bert a . fab io . popular movies . features . grid . v dos . rows . Grid Row Load More ViewData Ċ import Ġch . bert a . fab io . popular movies . features . grid . v dos . rows . Grid Row Movie ViewData Ċ import Ġch . bert a . fab io . popular movies . features . grid . view . Selected Movie Ċ import Ġch . bert a . fab io . popular movies . format Long Ċ import Ġcom . jak ew h art on . rx relay 2 . Publish Relay Ċ import Ġio . reactivex . Flow able Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . Single Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . mockito . Mockito Ċ import Ġjava . util .* Ċ Ċ class ĠModel Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġshared Prefs : ĠShared Prefs Ġ= ĠMockito . mock ( Shared Prefs :: class . java ) ĊĠĠĠ Ġprivate Ġval Ġthe Movie Db Service : ĠThe Movie Db Service Ġ= ĠMockito . mock ( The Movie Db Service :: class . java ) ĊĠĠĠ Ġprivate Ġval Ġmovie Dao : ĠMovie Dao Ġ= ĠMockito . mock ( Movie Dao :: class . java ) ĊĠĠĠ Ġprivate Ġval Ġmovie Db : ĠMovie Db Ġ= ĠMockito . mock ( Movie Db :: class . java ) ĊĠĠĠ Ġprivate Ġval Ġmovie Storage Ġ= ĠMovie Storage ( the Movie Db Service , Ġmovie Db ) ĊĊĠĠĠ Ġ/* ĊĠĠĠ Ġ* Ġ 0 : Ġby Ġpop ularity ĊĠĠĠ Ġ* Ġ 1 : Ġby Ġrating ĊĠĠĠ Ġ* Ġ 2 : Ġby Ġrelease Ġdate ĊĠĠĠ Ġ* Ġ 3 : Ġfavor ites ĊĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġsort Options Ġ= Ġmake Sort Options Ġ{ Ġ" some Random Title " Ġ} ĊĠĠĠ Ġprivate Ġval Ġinitial Sort Ġ= Ġsort Options [ 0 ] ĊĠĠĠ Ġprivate Ġval Ġactions : ĠPublish Relay < Grid Action > Ġ= ĠPublish Relay . create () ĊĊĠĠĠ Ġ@ Suppress (" unused ") ĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġimmediate Schedulers Rule Ġ= ĠIm mediate Schedulers Rule () ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ ĠMockito .` when `( shared Prefs . write Sort Pos ( Mockito . any Int ())). thenReturn ( Observable . just ( Unit )) ĊĠĠĠĠĠĠĠ ĠMockito .` when `( movie Db . movie Dao ()). thenReturn ( movie Dao ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġshould Load Fav Movies On Selection () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġmodel ( sort Options , ĠGrid State ( initial Sort ), Ġactions , Ġmovie Storage , Ġshared Prefs ) ĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġstate . test () ĊĠĠĠĠĠĠĠ Ġ// Ġassert Ġnothing Ġis Ġemitted Ġuntil Ġan Ġevent Ġhappens ĊĠĠĠĠĠĠĠ Ġobserver . assert No Values () ĊĊĠĠĠĠĠĠĠ Ġ// Ġexpected Ġgrid Ġstate Ġresult Ġemission s ĊĠĠĠĠĠĠĠ Ġval Ġfav Movies Ġ= Ġget Movie Entities ( 3 ) ĊĠĠĠĠĠĠĠ ĠMockito .` when `( movie Dao . getAll ()). thenReturn ( Flow able . just ( fav Movies )) ĊĠĠĠĠĠĠĠ Ġval Ġgrid ViewData Ġ= Ġmap Grid Row Movie Entity ViewData ( fav Movies ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected States Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid State ( sort Ġ= Ġsort Options [ 3 ], Ġloading Ġ= Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid State ( sort Ġ= Ġsort Options [ 3 ], Ġmovies Ġ= Ġgrid ViewData , Ġloading Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġactions . accept ( Grid Action . Sort Selection ( sort Options [ 3 ], Ġinitial Sort )) ĊĊĠĠĠĠĠĠĠ Ġobserver . assert Values (* expected States . to Typed Array ()) ĊĠĠĠĠĠĠĠ Ġobserver . assert No Errors () ĊĠĠĠĠĠĠĠ Ġobserver . assertNot Complete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġshould Load On l Movies On Selection () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġmodel ( sort Options , ĠGrid State ( initial Sort ), Ġactions , Ġmovie Storage , Ġshared Prefs ) ĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġstate . test () ĊĠĠĠĠĠĠĠ Ġobserver . assert No Values () ĊĊĠĠĠĠĠĠĠ Ġval Ġpop Movies Ġ= Ġget Movies ( 2 ) ĊĠĠĠĠĠĠĠ ĠMockito .` when `( the Movie Db Service . load Movies ( 1 , ĠSort Option . SORT _ POP ULAR ITY . value )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn ( Single . just ( Movies Page ( 1 , Ġpop Movies , Ġ 1 , Ġpop Movies . size ))) ĊĠĠĠĠĠĠĠ Ġval Ġpop GridView Data Ġ= Ġmap Grid Row Movie ViewData ( pop Movies ) ĊĊĠĠĠĠĠĠĠ Ġval Ġrating Movies Ġ= Ġget Movies ( 5 ) ĊĠĠĠĠĠĠĠ ĠMockito .` when `( the Movie Db Service . load Movies ( 1 , ĠSort Option . SORT _ RAT ING . value )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn ( Single . just ( Movies Page ( 1 , Ġrating Movies , Ġ 1 , Ġrating Movies . size ))) ĊĠĠĠĠĠĠĠ Ġval Ġrating GridView Data Ġ= Ġmap Grid Row Movie ViewData ( rating Movies ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdate Movies Ġ= Ġget Movies ( 7 ) ĊĠĠĠĠĠĠĠ ĠMockito .` when `( the Movie Db Service . load Movies ( 1 , ĠSort Option . SORT _ RELEASE _ DATE . value )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn ( Single . just ( Movies Page ( 1 , Ġdate Movies , Ġ 1 , Ġdate Movies . size ))) ĊĠĠĠĠĠĠĠ Ġval Ġdate GridView Data Ġ= Ġmap Grid Row Movie ViewData ( date Movies ) ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected States Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid State ( sort Ġ= Ġinitial Sort , Ġloading Ġ= Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid State ( sort Ġ= Ġsort Options [ 0 ], Ġmovies Ġ= Ġpop GridView Data , Ġloading Ġ= Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid State ( sort Ġ= Ġsort Options [ 1 ], Ġmovies Ġ= Ġpop GridView Data , Ġloading Ġ= Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid State ( sort Ġ= Ġsort Options [ 1 ], Ġmovies Ġ= Ġrating GridView Data , Ġloading Ġ= Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid State ( sort Ġ= Ġsort Options [ 2 ], Ġmovies Ġ= Ġrating GridView Data , Ġloading Ġ= Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid State ( sort Ġ= Ġsort Options [ 2 ], Ġmovies Ġ= Ġdate GridView Data , Ġloading Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġactions . accept ( Grid Action . Sort Selection ( sort Options [ 0 ], Ġinitial Sort )) ĊĠĠĠĠĠĠĠ Ġactions . accept ( Grid Action . Sort Selection ( sort Options [ 1 ], Ġsort Options [ 0 ])) ĊĠĠĠĠĠĠĠ Ġactions . accept ( Grid Action . Sort Selection ( sort Options [ 2 ], Ġsort Options [ 1 ])) ĊĠĠĠĠĠĠĠ Ġactions . accept ( Grid Action . Transient Clear ) ĊĊĠĠĠĠĠĠĠ ĠMockito . verify ( shared Prefs ). write Sort Pos ( 0 ) ĊĠĠĠĠĠĠĠ ĠMockito . verify ( shared Prefs ). write Sort Pos ( 1 ) ĊĠĠĠĠĠĠĠ ĠMockito . verify ( shared Prefs ). write Sort Pos ( 2 ) ĊĊĠĠĠĠĠĠĠ Ġobserver . assert Values (* expected States . to Typed Array ()) ĊĠĠĠĠĠĠĠ Ġobserver . assert No Errors () ĊĠĠĠĠĠĠĠ Ġobserver . assertNot Complete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠshouldBe Empty If No Movies () Ġ{ ĊĠĠĠĠĠĠĠ ĠMockito .` when `( the Movie Db Service . load Movies ( 1 , Ġinitial Sort . option . value )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn ( Single . just ( Movies Page ( 1 , Ġempty List (), Ġ 1 , Ġ 0 ))) ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġmodel ( sort Options , ĠGrid State ( initial Sort ), Ġactions , Ġmovie Storage , Ġshared Prefs ) ĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġstate . test () ĊĠĠĠĠĠĠĠ Ġobserver . assert No Values () ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected States Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid State ( sort Ġ= Ġinitial Sort , Ġloading Ġ= Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid State ( sort Ġ= Ġinitial Sort , Ġloading Ġ= Ġfalse , Ġmovies Ġ= Ġempty List (), Ġempty Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġactions . accept ( Grid Action . Sort Selection ( initial Sort , Ġinitial Sort )) ĊĊĠĠĠĠĠĠĠ Ġobserver . assert Values (* expected States . to Typed Array ()) ĊĠĠĠĠĠĠĠ Ġobserver . assert No Errors () ĊĠĠĠĠĠĠĠ Ġobserver . assertNot Complete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġshould Have Correct ErrorMessage On Fav Movie Load Fail () Ġ{ ĊĠĠĠĠĠĠĠ ĠMockito .` when `( movie Dao . getAll ()). thenReturn ( Flow able . error ( Throwable (" fav Ġmovies Ġerror "))) ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġmodel ( sort Options , ĠGrid State ( initial Sort ), Ġactions , Ġmovie Storage , Ġshared Prefs ) ĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġstate . test () ĊĠĠĠĠĠĠĠ Ġobserver . assert No Values () ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected States Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid State ( sort Ġ= Ġsort Options [ 3 ], Ġloading Ġ= Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsort Ġ= Ġsort Options [ 3 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= ĠR . string . sn ackbar _ movies _ load _ failed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsort Ġ= Ġsort Options [ 3 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġactions . accept ( Grid Action . Sort Selection ( sort Options [ 3 ], Ġinitial Sort )) ĊĠĠĠĠĠĠĠ Ġactions . accept ( Grid Action . Transient Clear ) ĊĊĠĠĠĠĠĠĠ Ġobserver . assert Values (* expected States . to Typed Array ()) ĊĠĠĠĠĠĠĠ Ġobserver . assert No Errors () ĊĠĠĠĠĠĠĠ Ġobserver . assertNot Complete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġshould Have Correct ErrorMessage On On l Movie Load Fail () Ġ{ ĊĠĠĠĠĠĠĠ ĠMockito .` when `( the Movie Db Service . load Movies ( 1 , Ġinitial Sort . option . value )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn ( Single . error ( Throwable (" on l Ġmovies Ġerror "))) ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġmodel ( sort Options , ĠGrid State ( initial Sort ), Ġactions , Ġmovie Storage , Ġshared Prefs ) ĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġstate . test () ĊĠĠĠĠĠĠĠ Ġobserver . assert No Values () ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected States Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid State ( sort Ġ= Ġinitial Sort , Ġloading Ġ= Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsort Ġ= Ġinitial Sort , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= ĠR . string . sn ackbar _ movies _ load _ failed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsort Ġ= Ġinitial Sort , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġactions . accept ( Grid Action . Sort Selection ( initial Sort , Ġinitial Sort )) ĊĠĠĠĠĠĠĠ Ġactions . accept ( Grid Action . Transient Clear ) ĊĊĠĠĠĠĠĠĠ Ġobserver . assert Values (* expected States . to Typed Array ()) ĊĠĠĠĠĠĠĠ Ġobserver . assert No Errors () ĊĠĠĠĠĠĠĠ Ġobserver . assertNot Complete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġshould Load Next Page On Scroll () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġmodel ( sort Options , ĠGrid State ( initial Sort ), Ġactions , Ġmovie Storage , Ġshared Prefs ) ĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġstate . test () ĊĠĠĠĠĠĠĠ Ġobserver . assert No Values () ĊĊĠĠĠĠĠĠĠ Ġval Ġpage 1 Movies Ġ= Ġget Movies ( 2 ) ĊĠĠĠĠĠĠĠ ĠMockito .` when `( the Movie Db Service . load Movies ( 1 , ĠSort Option . SORT _ POP ULAR ITY . value )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn ( Single . just ( Movies Page ( 1 , Ġpage 1 Movies , Ġ 1 , Ġpage 1 Movies . size ))) ĊĠĠĠĠĠĠĠ Ġval Ġpage 1 GridView Data Ġ= Ġmap Grid Row Movie ViewData ( page 1 Movies ) ĊĊĠĠĠĠĠĠĠ Ġval Ġpage 2 Movies Ġ= Ġget Movies ( 5 ) ĊĠĠĠĠĠĠĠ ĠMockito .` when `( the Movie Db Service . load Movies ( 2 , ĠSort Option . SORT _ POP ULAR ITY . value )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn ( Single . just ( Movies Page ( 2 , Ġpage 2 Movies , Ġ 2 , Ġpage 1 Movies . size Ġ+ Ġpage 2 Movies . size ))) ĊĠĠĠĠĠĠĠ Ġval Ġpage 2 GridView Data Ġ= Ġmap Grid Row Movie ViewData ( page 2 Movies ) ĊĊĠĠĠĠĠĠĠ Ġval Ġpage 1 And 2 GridView Data Ġ= Ġpage 1 GridView Data . plus ( page 2 GridView Data ) ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected States Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid State ( sort Ġ= Ġinitial Sort , Ġloading Ġ= Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid State ( sort Ġ= Ġinitial Sort , Ġmovies Ġ= Ġpage 1 GridView Data , Ġloading Ġ= Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsort Ġ= Ġinitial Sort , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovies Ġ= Ġpage 1 GridView Data . plus ( Grid Row Load More ViewData ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading More Ġ= Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid State ( sort Ġ= Ġinitial Sort , Ġmovies Ġ= Ġpage 1 And 2 GridView Data , Ġloading More Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġactions . accept ( Grid Action . Sort Selection ( initial Sort , Ġinitial Sort )) ĊĠĠĠĠĠĠĠ Ġactions . accept ( Grid Action . Load More ( 2 )) ĊĊĠĠĠĠĠĠĠ Ġobserver . assert Values (* expected States . to Typed Array ()) ĊĠĠĠĠĠĠĠ Ġobserver . assert No Errors () ĊĠĠĠĠĠĠĠ Ġobserver . assertNot Complete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġshould Have Correct ErrorMessage On Next Page Load Fail () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġmodel ( sort Options , ĠGrid State ( initial Sort ), Ġactions , Ġmovie Storage , Ġshared Prefs ) ĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġstate . test () ĊĠĠĠĠĠĠĠ Ġobserver . assert No Values () ĊĊĠĠĠĠĠĠĠ Ġval Ġpage 1 Movies Ġ= Ġget Movies ( 2 ) ĊĠĠĠĠĠĠĠ ĠMockito .` when `( the Movie Db Service . load Movies ( 1 , Ġinitial Sort . option . value )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn ( Single . just ( Movies Page ( 1 , Ġpage 1 Movies , Ġ 1 , Ġpage 1 Movies . size ))) ĊĠĠĠĠĠĠĠ Ġval Ġpage 1 GridView Data Ġ= Ġmap Grid Row Movie ViewData ( page 1 Movies ) ĊĊĠĠĠĠĠĠĠ ĠMockito .` when `( the Movie Db Service . load Movies ( 2 , Ġinitial Sort . option . value )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn ( Single . error ( Throwable (" on l Ġmovies Ġerror "))) ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected States Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid State ( sort Ġ= Ġinitial Sort , Ġloading Ġ= Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid State ( sort Ġ= Ġinitial Sort , Ġmovies Ġ= Ġpage 1 GridView Data , Ġloading Ġ= Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsort Ġ= Ġinitial Sort , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovies Ġ= Ġpage 1 GridView Data . plus ( Grid Row Load More ViewData ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading More Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsort Ġ= Ġinitial Sort , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovies Ġ= Ġpage 1 GridView Data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading More Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= ĠR . string . sn ackbar _ movies _ load _ failed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsort Ġ= Ġinitial Sort , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovies Ġ= Ġpage 1 GridView Data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġactions . accept ( Grid Action . Sort Selection ( initial Sort , Ġinitial Sort )) ĊĠĠĠĠĠĠĠ Ġactions . accept ( Grid Action . Load More ( 2 )) ĊĠĠĠĠĠĠĠ Ġactions . accept ( Grid Action . Transient Clear ) ĊĊĠĠĠĠĠĠĠ Ġobserver . assert Values (* expected States . to Typed Array ()) ĊĠĠĠĠĠĠĠ Ġobserver . assert No Errors () ĊĠĠĠĠĠĠĠ Ġobserver . assertNot Complete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġshould Refresh All Pages On Swipe () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġmodel ( sort Options , ĠGrid State ( initial Sort ), Ġactions , Ġmovie Storage , Ġshared Prefs ) ĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġstate . test () ĊĠĠĠĠĠĠĠ Ġobserver . assert No Values () ĊĊĠĠĠĠĠĠĠ Ġval Ġpage 1 Movies Ġ= Ġget Movies ( 2 ) ĊĠĠĠĠĠĠĠ ĠMockito .` when `( the Movie Db Service . load Movies ( 1 , ĠSort Option . SORT _ POP ULAR ITY . value )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn ( Single . just ( Movies Page ( 1 , Ġpage 1 Movies , Ġ 1 , Ġpage 1 Movies . size ))) ĊĠĠĠĠĠĠĠ Ġval Ġpage 1 GridView Data Ġ= Ġmap Grid Row Movie ViewData ( page 1 Movies ) ĊĊĠĠĠĠĠĠĠ Ġval Ġpage 2 Movies Ġ= Ġget Movies ( 5 ) ĊĠĠĠĠĠĠĠ ĠMockito .` when `( the Movie Db Service . load Movies ( 2 , ĠSort Option . SORT _ POP ULAR ITY . value )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn ( Single . just ( Movies Page ( 2 , Ġpage 2 Movies , Ġ 2 , Ġpage 1 Movies . size Ġ+ Ġpage 2 Movies . size ))) ĊĠĠĠĠĠĠĠ Ġval Ġpage 2 GridView Data Ġ= Ġmap Grid Row Movie ViewData ( page 2 Movies ) ĊĊĠĠĠĠĠĠĠ Ġval Ġpage 1 And 2 GridView Data Ġ= Ġpage 1 GridView Data . plus ( page 2 GridView Data ) ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected States Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid State ( sort Ġ= Ġinitial Sort , Ġloading Ġ= Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid State ( sort Ġ= Ġinitial Sort , Ġmovies Ġ= Ġpage 1 GridView Data , Ġloading Ġ= Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsort Ġ= Ġinitial Sort , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovies Ġ= Ġpage 1 GridView Data . plus ( Grid Row Load More ViewData ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading More Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid State ( sort Ġ= Ġinitial Sort , Ġmovies Ġ= Ġpage 1 And 2 GridView Data , Ġloading More Ġ= Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid State ( sort Ġ= Ġinitial Sort , Ġmovies Ġ= Ġpage 1 And 2 GridView Data , Ġrefresh ing Ġ= Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid State ( sort Ġ= Ġinitial Sort , Ġmovies Ġ= Ġpage 1 And 2 GridView Data , Ġrefresh ing Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġactions . accept ( Grid Action . Sort Selection ( initial Sort , Ġinitial Sort )) ĊĠĠĠĠĠĠĠ Ġactions . accept ( Grid Action . Load More ( 2 )) ĊĠĠĠĠĠĠĠ Ġactions . accept ( Grid Action . Refresh Swipe ) ĊĊĠĠĠĠĠĠĠ Ġobserver . assert Values (* expected States . to Typed Array ()) ĊĠĠĠĠĠĠĠ Ġobserver . assert No Errors () ĊĠĠĠĠĠĠĠ Ġobserver . assertNot Complete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġshould Have Correct Message On Deleted From Fav Result () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġmodel ( sort Options , ĠGrid State ( initial Sort ), Ġactions , Ġmovie Storage , Ġshared Prefs ) ĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġstate . test () ĊĠĠĠĠĠĠĠ Ġobserver . assert No Values () ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected States Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid State ( sort Ġ= Ġinitial Sort , Ġmessage Ġ= ĠR . string . sn ackbar _ movie _ removed _ from _ favorites ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid State ( sort Ġ= Ġinitial Sort , Ġmessage Ġ= Ġnull ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġactions . accept ( Grid Action . Movie Fav Deleted ) ĊĠĠĠĠĠĠĠ Ġactions . accept ( Grid Action . Transient Clear ) ĊĊĠĠĠĠĠĠĠ Ġobserver . assert Values (* expected States . to Typed Array ()) ĊĠĠĠĠĠĠĠ Ġobserver . assert No Errors () ĊĠĠĠĠĠĠĠ Ġobserver . assertNot Complete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġshould Have Correct Selected Movie OnClick () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġmodel ( sort Options , ĠGrid State ( initial Sort ), Ġactions , Ġmovie Storage , Ġshared Prefs ) ĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġstate . test () ĊĠĠĠĠĠĠĠ Ġobserver . assert No Values () ĊĊĠĠĠĠĠĠĠ Ġval Ġselected Movie On l Ġ= ĠSelected Movie ( 0 , Ġ" title ", Ġ" release Data ", Ġ" overview ", Ġ 1 2 . 5 , Ġ" poster ", Ġ" backdrop ", Ġfalse ) ĊĠĠĠĠĠĠĠ Ġval Ġselected Movie Fav Ġ= ĠSelected Movie ( 0 , Ġ" title ", Ġ" release Data ", Ġ" overview ", Ġ 1 2 . 5 , Ġ" poster ", Ġ" backdrop ", Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected States Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid State ( sort Ġ= Ġinitial Sort , Ġselected Movie Ġ= Ġselected Movie On l ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid State ( sort Ġ= Ġinitial Sort , Ġselected Movie Ġ= Ġselected Movie Fav ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġactions . accept ( Grid Action . Movie Selection ( selected Movie On l )) ĊĠĠĠĠĠĠĠ Ġactions . accept ( Grid Action . Movie Selection ( selected Movie Fav )) ĊĊĠĠĠĠĠĠĠ Ġobserver . assert Values (* expected States . to Typed Array ()) ĊĠĠĠĠĠĠĠ Ġobserver . assert No Errors () ĊĠĠĠĠĠĠĠ Ġobserver . assertNot Complete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Movies ( count : ĠInt ): ĠList < Movie > Ġ= Ġ( 1 .. count ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠMovie ( it , Ġ" backdrop ", Ġ" overview ", ĠDate (), Ġ" poster ", Ġ" title ", Ġ 1 2 . 5 ) Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmap Grid Row Movie ViewData ( movies : ĠList < Movie >): ĠList < Grid Row Movie ViewData > Ġ= Ġmovies ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid Row Movie ViewData ( it . id , Ġit . title , Ġit . overview , Ġit . release Date . format Long (), Ġit . vote Average , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . poster , Ġit . backdrop , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Movie Entities ( count : ĠInt ): ĠList < Movie Entity > Ġ= Ġ( 1 .. count ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠMovie Entity ( it , Ġ" title ", ĠDate (), Ġ 1 2 . 5 , Ġ" overview ", Ġ" poster ", Ġ" backdrop ") Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmap Grid Row Movie Entity ViewData ( movies : ĠList < Movie Entity >): ĠList < Grid Row Movie ViewData > Ġ= Ġmovies ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid Row Movie ViewData ( it . id , Ġit . title , Ġit . overview , Ġit . release Date . format Long (), Ġit . vote Average , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . poster , Ġit . backdrop , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ }