11package com .d4rk .androidtutorials .java .domain .home ;
22
33import static org .junit .Assert .assertThrows ;
4- import static org .mockito .Mockito .any ;
4+ import static org .mockito .ArgumentMatchers .any ;
55import static org .mockito .Mockito .doThrow ;
66import static org .mockito .Mockito .mock ;
77import static org .mockito .Mockito .verify ;
88
99import com .d4rk .androidtutorials .java .data .model .PromotedApp ;
1010import com .d4rk .androidtutorials .java .data .repository .HomeRepository ;
1111
12+ import org .junit .Before ;
1213import org .junit .Test ;
1314import org .mockito .ArgumentCaptor ;
1415
1718
1819public class GetPromotedAppsUseCaseTest {
1920
20- @ Test
21- public void invokeCallsRepository () {
22- HomeRepository repository = mock (HomeRepository .class );
23- GetPromotedAppsUseCase useCase = new GetPromotedAppsUseCase (repository );
21+ private HomeRepository repository ;
22+ private GetPromotedAppsUseCase useCase ;
23+ private GetPromotedAppsUseCase .Callback callback ;
24+
25+ @ Before
26+ public void setUp () {
27+ repository = mock (HomeRepository .class );
28+ useCase = new GetPromotedAppsUseCase (repository );
29+ callback = mock (GetPromotedAppsUseCase .Callback .class );
30+ }
2431
25- useCase .invoke (apps -> {});
32+ @ Test
33+ public void invokeRequestsPromotedAppsFromRepository () {
34+ useCase .invoke (callback );
2635
2736 verify (repository ).fetchPromotedApps (any ());
2837 }
2938
3039 @ Test
31- public void invokeReturnsAppsThroughCallback () {
32- HomeRepository repository = mock (HomeRepository .class );
33- GetPromotedAppsUseCase useCase = new GetPromotedAppsUseCase (repository );
34- GetPromotedAppsUseCase .Callback callback = mock (GetPromotedAppsUseCase .Callback .class );
40+ public void invokeForwardsRepositoryResultsToCallback () {
41+ ArgumentCaptor <HomeRepository .PromotedAppsCallback > captor =
42+ ArgumentCaptor .forClass (HomeRepository .PromotedAppsCallback .class );
3543
3644 useCase .invoke (callback );
3745
38- ArgumentCaptor <HomeRepository .PromotedAppsCallback > captor =
39- ArgumentCaptor .forClass (HomeRepository .PromotedAppsCallback .class );
4046 verify (repository ).fetchPromotedApps (captor .capture ());
47+ List <PromotedApp > promotedApps = Collections .singletonList (
48+ new PromotedApp ("App" , "package" , "icon" )
49+ );
4150
42- List <PromotedApp > apps = List .of (new PromotedApp ("App" , "pkg" , "icon" ));
43- captor .getValue ().onResult (apps );
51+ captor .getValue ().onResult (promotedApps );
4452
45- verify (callback ).onResult (apps );
53+ verify (callback ).onResult (promotedApps );
4654 }
4755
4856 @ Test
49- public void invokePropagatesEmptyResults () {
50- HomeRepository repository = mock (HomeRepository .class );
51- GetPromotedAppsUseCase useCase = new GetPromotedAppsUseCase (repository );
52- GetPromotedAppsUseCase .Callback callback = mock (GetPromotedAppsUseCase .Callback .class );
57+ public void invokeForwardsEmptyList () {
58+ ArgumentCaptor <HomeRepository .PromotedAppsCallback > captor =
59+ ArgumentCaptor .forClass (HomeRepository .PromotedAppsCallback .class );
5360
5461 useCase .invoke (callback );
5562
56- ArgumentCaptor <HomeRepository .PromotedAppsCallback > captor =
57- ArgumentCaptor .forClass (HomeRepository .PromotedAppsCallback .class );
5863 verify (repository ).fetchPromotedApps (captor .capture ());
64+ List <PromotedApp > promotedApps = Collections .emptyList ();
5965
60- List <PromotedApp > apps = Collections .emptyList ();
61- captor .getValue ().onResult (apps );
66+ captor .getValue ().onResult (promotedApps );
6267
63- verify (callback ).onResult (apps );
68+ verify (callback ).onResult (promotedApps );
6469 }
6570
6671 @ Test
67- public void invokePropagatesNullResults () {
68- HomeRepository repository = mock (HomeRepository .class );
69- GetPromotedAppsUseCase useCase = new GetPromotedAppsUseCase (repository );
70- GetPromotedAppsUseCase .Callback callback = mock (GetPromotedAppsUseCase .Callback .class );
72+ public void invokeForwardsNullList () {
73+ ArgumentCaptor <HomeRepository .PromotedAppsCallback > captor =
74+ ArgumentCaptor .forClass (HomeRepository .PromotedAppsCallback .class );
7175
7276 useCase .invoke (callback );
7377
74- ArgumentCaptor <HomeRepository .PromotedAppsCallback > captor =
75- ArgumentCaptor .forClass (HomeRepository .PromotedAppsCallback .class );
7678 verify (repository ).fetchPromotedApps (captor .capture ());
7779
7880 captor .getValue ().onResult (null );
@@ -81,12 +83,10 @@ public void invokePropagatesNullResults() {
8183 }
8284
8385 @ Test
84- public void invokePropagatesRepositoryException () {
85- HomeRepository repository = mock (HomeRepository .class );
86- GetPromotedAppsUseCase useCase = new GetPromotedAppsUseCase (repository );
87- GetPromotedAppsUseCase .Callback callback = mock (GetPromotedAppsUseCase .Callback .class );
88- doThrow (new IllegalStateException ("failure" ))
89- .when (repository ).fetchPromotedApps (any ());
86+ public void invokePropagatesRepositoryExceptions () {
87+ doThrow (new IllegalStateException ("failed" ))
88+ .when (repository )
89+ .fetchPromotedApps (any ());
9090
9191 assertThrows (IllegalStateException .class , () -> useCase .invoke (callback ));
9292 verify (repository ).fetchPromotedApps (any ());
0 commit comments