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