Skip to content

Commit 9db5b6c

Browse files
Jiankai ZhengJiankai Zheng
authored andcommitted
test(api): unit tests covering EpisodeApiRetrofit
1 parent 013a91a commit 9db5b6c

File tree

1 file changed

+148
-0
lines changed

1 file changed

+148
-0
lines changed
Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
package spotify.api.impl;
2+
3+
import okhttp3.MediaType;
4+
import okhttp3.Request;
5+
import okhttp3.ResponseBody;
6+
import org.junit.jupiter.api.Assertions;
7+
import org.junit.jupiter.api.BeforeEach;
8+
import org.junit.jupiter.api.Test;
9+
import org.mockito.Mock;
10+
import org.mockito.MockitoAnnotations;
11+
import retrofit2.Call;
12+
import retrofit2.Response;
13+
import spotify.exceptions.HttpRequestFailedException;
14+
import spotify.exceptions.SpotifyActionFailedException;
15+
import spotify.models.episodes.EpisodeFull;
16+
import spotify.models.episodes.EpisodeFullCollection;
17+
import spotify.retrofit.services.EpisodeService;
18+
19+
import java.io.IOException;
20+
import java.util.Collections;
21+
import java.util.List;
22+
23+
import static org.mockito.Mockito.verify;
24+
import static org.mockito.Mockito.when;
25+
26+
public class EpisodeApiRetrofitTest extends AbstractApiRetrofitTest {
27+
private final String fakeEpisodeId = "69";
28+
private final List<String> listOfFakeEpisodeIds = Collections.singletonList(fakeEpisodeId);
29+
private final String fakeEpisodeIds = String.join(",", listOfFakeEpisodeIds);
30+
private EpisodeApiRetrofit sut;
31+
@Mock
32+
private EpisodeService mockedEpisodeService;
33+
@Mock
34+
private Call<EpisodeFull> mockedEpisodeFullCall;
35+
@Mock
36+
private Call<EpisodeFullCollection> mockedEpisodeFullCollectionCall;
37+
@Mock
38+
private List<String> episodeListWithExceededSize;
39+
40+
@BeforeEach
41+
void setup() {
42+
MockitoAnnotations.openMocks(this);
43+
44+
sut = new EpisodeApiRetrofit(fakeAccessToken, mockedEpisodeService);
45+
46+
when(mockedEpisodeService.getEpisode(fakeAccessTokenWithBearer, fakeEpisodeId, fakeOptionalParameters)).thenReturn(mockedEpisodeFullCall);
47+
when(mockedEpisodeService.getEpisodes(fakeAccessTokenWithBearer, fakeEpisodeIds, fakeOptionalParameters)).thenReturn(mockedEpisodeFullCollectionCall);
48+
49+
when(mockedEpisodeFullCall.request()).thenReturn(new Request.Builder().url(fakeUrl).build());
50+
when(mockedEpisodeFullCollectionCall.request()).thenReturn(new Request.Builder().url(fakeUrl).build());
51+
52+
when(episodeListWithExceededSize.size()).thenReturn(51);
53+
}
54+
55+
@Test
56+
void getEpisodeUsesCorrectValuesToCreateHttpCall() throws IOException {
57+
when(mockedEpisodeFullCall.execute()).thenReturn(Response.success(new EpisodeFull()));
58+
59+
sut.getEpisode(fakeEpisodeId, null);
60+
61+
verify(mockedEpisodeService).getEpisode(fakeAccessTokenWithBearer, fakeEpisodeId, fakeOptionalParameters);
62+
}
63+
64+
@Test
65+
void getEpisodeExecutesHttpCall() throws IOException {
66+
when(mockedEpisodeFullCall.execute()).thenReturn(Response.success(new EpisodeFull()));
67+
68+
sut.getEpisode(fakeEpisodeId, fakeOptionalParameters);
69+
verify(mockedEpisodeFullCall).execute();
70+
}
71+
72+
@Test
73+
void getEpisodeThrowsSpotifyActionFailedExceptionWhenError() throws IOException {
74+
when(mockedEpisodeFullCall.execute())
75+
.thenReturn(
76+
Response.error(
77+
400,
78+
ResponseBody.create(MediaType.get("application/json"), getJson("error.json"))
79+
)
80+
);
81+
82+
Assertions.assertThrows(SpotifyActionFailedException.class, () -> sut.getEpisode(fakeEpisodeId, fakeOptionalParameters));
83+
}
84+
85+
@Test
86+
void getEpisodeThrowsHttpRequestFailedWhenHttpFails() throws IOException {
87+
when(mockedEpisodeFullCall.execute()).thenThrow(IOException.class);
88+
89+
Assertions.assertThrows(HttpRequestFailedException.class, () -> sut.getEpisode(fakeEpisodeId, fakeOptionalParameters));
90+
}
91+
92+
@Test
93+
void getEpisodeReturnsEpisodeFullWhenSuccessful() throws IOException {
94+
when(mockedEpisodeFullCall.execute()).thenReturn(Response.success(new EpisodeFull()));
95+
96+
Assertions.assertNotNull(sut.getEpisode(fakeEpisodeId, fakeOptionalParameters));
97+
}
98+
99+
@Test
100+
void getEpisodesUsesCorrectValuesToCreateHttpCall() throws IOException {
101+
when(mockedEpisodeFullCollectionCall.execute()).thenReturn(Response.success(new EpisodeFullCollection()));
102+
103+
sut.getEpisodes(listOfFakeEpisodeIds, null);
104+
105+
verify(mockedEpisodeService).getEpisodes(fakeAccessTokenWithBearer, fakeEpisodeIds, fakeOptionalParameters);
106+
}
107+
108+
@Test
109+
void getEpisodesExecutesHttpCall() throws IOException {
110+
when(mockedEpisodeFullCollectionCall.execute()).thenReturn(Response.success(new EpisodeFullCollection()));
111+
112+
sut.getEpisodes(listOfFakeEpisodeIds, fakeOptionalParameters);
113+
114+
verify(mockedEpisodeFullCollectionCall).execute();
115+
}
116+
117+
@Test
118+
void getEpisodesThrowsSpotifyActionFailedExceptionWhenError() throws IOException {
119+
when(mockedEpisodeFullCollectionCall.execute())
120+
.thenReturn(
121+
Response.error(
122+
400,
123+
ResponseBody.create(MediaType.get("application/json"), getJson("error.json"))
124+
)
125+
);
126+
127+
Assertions.assertThrows(SpotifyActionFailedException.class, () -> sut.getEpisodes(listOfFakeEpisodeIds, fakeOptionalParameters));
128+
}
129+
130+
@Test
131+
void getEpisodesThrowsHttpRequestFailedWhenHttpFails() throws IOException {
132+
when(mockedEpisodeFullCollectionCall.execute()).thenThrow(IOException.class);
133+
134+
Assertions.assertThrows(HttpRequestFailedException.class, () -> sut.getEpisodes(listOfFakeEpisodeIds, fakeOptionalParameters));
135+
}
136+
137+
@Test
138+
void getEpisodesReturnsEpisodeFullCollectionWhenSuccessful() throws IOException {
139+
when(mockedEpisodeFullCollectionCall.execute()).thenReturn(Response.success(new EpisodeFullCollection()));
140+
141+
Assertions.assertNotNull(sut.getEpisodes(listOfFakeEpisodeIds, fakeOptionalParameters));
142+
}
143+
144+
@Test
145+
void getEpisodesThrowsIllegalArgumentExceptionWhenListExceedsMaximumAllowedSize() {
146+
Assertions.assertThrows(IllegalArgumentException.class, () -> sut.getEpisodes(episodeListWithExceededSize, fakeOptionalParameters));
147+
}
148+
}

0 commit comments

Comments
 (0)