Skip to content

Commit eaffa59

Browse files
authored
Merge pull request #447 from akitikkx/feature/refactor-baserepository-tests
Refactor: Migrate BaseRepositoryTest and ShowDetailRepositoryTest to use FakeTvMazeService
2 parents 7afb997 + 225d3b3 commit eaffa59

File tree

4 files changed

+197
-214
lines changed

4 files changed

+197
-214
lines changed

app/src/test/java/com/theupnextapp/fake/FakeTvMazeService.kt

Lines changed: 42 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -37,25 +37,35 @@ import com.theupnextapp.network.models.tvmaze.NetworkShowSearchReponseLinks
3737
import com.theupnextapp.network.models.tvmaze.NetworkShowSearchResponsePreviousepisode
3838
import com.theupnextapp.network.models.tvmaze.NetworkShowSearchResponseSelf
3939
import com.theupnextapp.network.models.tvmaze.Externals
40-
import java.io.IOException // Added for error simulation
40+
import java.io.IOException
4141
import kotlinx.coroutines.CompletableDeferred
4242
import kotlinx.coroutines.Deferred
4343

4444
class FakeTvMazeService : TvMazeService {
4545

4646
var mockShowInfoResponse: NetworkShowInfoResponse? = null
47-
// Flag for getShowSummaryAsync error simulation - already present
48-
var shouldThrowGetShowSummaryError: Boolean = false
47+
var shouldThrowGetShowSummaryError: Boolean = false // Legacy, for generic IOException
48+
var showSummaryError: Throwable? = null // For specific throwables
4949

50+
var mockShowLookupResponse: NetworkTvMazeShowLookupResponse? = null
51+
var showLookupError: Throwable? = null
5052

5153
var mockNextEpisodeResponse: NetworkShowNextEpisodeResponse? = null
54+
var nextEpisodeError: Throwable? = null
55+
5256
var mockPreviousEpisodeResponse: NetworkShowPreviousEpisodeResponse? = null
57+
var shouldThrowGetPreviousEpisodeError: Boolean = false // Legacy, for generic IOException
58+
var previousEpisodeError: Throwable? = null // For specific throwables
59+
5360
var mockShowCastResponse: NetworkShowCastResponse? = null
61+
var showCastError: Throwable? = null
62+
5463
var mockShowSeasonsResponse: NetworkShowSeasonsResponse? = null
64+
var showSeasonsError: Throwable? = null
65+
5566
var mockTvMazeEpisodesResponse: NetworkTvMazeEpisodesResponse? = null
67+
var seasonEpisodesError: Throwable? = null
5668

57-
// Added: Flag for getPreviousEpisodeAsync error simulation
58-
var shouldThrowGetPreviousEpisodeError: Boolean = false
5969

6070
override fun getYesterdayScheduleAsync(
6171
countryCode: String,
@@ -79,14 +89,17 @@ class FakeTvMazeService : TvMazeService {
7989
}
8090

8191
override fun getShowLookupAsync(imdbId: String): Deferred<NetworkTvMazeShowLookupResponse> {
82-
throw NotImplementedError("Fake method not implemented")
92+
showLookupError?.let { throw it }
93+
mockShowLookupResponse?.let { return CompletableDeferred(it) }
94+
throw NotImplementedError("mockShowLookupResponse not set for this test, or showLookupError not specified.")
8395
}
8496

8597
override fun getShowImagesAsync(id: String): Deferred<NetworkTvMazeShowImageResponse> {
86-
throw NotImplementedError("Fake method not implemented")
98+
throw NotImplementedError("Fake method not implemented for getShowImagesAsync. Consider adding mock/error properties if needed.")
8799
}
88100

89101
override fun getSuggestionListAsync(name: String): Deferred<List<NetworkShowSearchResponse>> {
102+
// Keeping existing minimal mock for now, can be enhanced with error/mock properties if needed by tests
90103
val showData = NetworkShowSearchResponseShow(
91104
id = 1,
92105
name = "Queen of the South",
@@ -123,73 +136,52 @@ class FakeTvMazeService : TvMazeService {
123136
officialSite = "http://www.usanetwork.com/queen-of-the-south",
124137
runtime = 60,
125138
type = "Scripted",
126-
webChannel = Any(), // Consider replacing Any with a more specific mock or null if appropriate
139+
webChannel = Any(),
127140
weight = 99
128141
)
129-
130142
val searchResult = NetworkShowSearchResponse(score = 10.0, show = showData)
131-
val searchResults = mutableListOf(searchResult)
132-
133-
return CompletableDeferred(searchResults)
143+
return CompletableDeferred(listOf(searchResult))
134144
}
135145

136146
override fun getShowSummaryAsync(id: String?): Deferred<NetworkShowInfoResponse> {
137-
if (shouldThrowGetShowSummaryError) {
147+
showSummaryError?.let { throw it }
148+
if (shouldThrowGetShowSummaryError) { // Legacy generic error
138149
throw IOException("Fake network error for getShowSummary")
139150
}
140-
val currentMock = mockShowInfoResponse
141-
if (currentMock != null) {
142-
return CompletableDeferred(currentMock)
143-
} else {
144-
throw NotImplementedError("mockShowInfoResponse not set for this test")
145-
}
151+
mockShowInfoResponse?.let { return CompletableDeferred(it) }
152+
throw NotImplementedError("mockShowInfoResponse not set for this test, or showSummaryError/shouldThrowGetShowSummaryError not specified.")
146153
}
147154

148155
override fun getNextEpisodeAsync(name: String?): Deferred<NetworkShowNextEpisodeResponse> {
149-
val currentMock = mockNextEpisodeResponse
150-
if (currentMock != null) {
151-
return CompletableDeferred(currentMock)
152-
} else {
153-
throw NotImplementedError("mockNextEpisodeResponse not set for this test")
154-
}
156+
nextEpisodeError?.let { throw it }
157+
mockNextEpisodeResponse?.let { return CompletableDeferred(it) }
158+
throw NotImplementedError("mockNextEpisodeResponse not set for this test, or nextEpisodeError not specified.")
155159
}
156160

157161
override fun getPreviousEpisodeAsync(name: String?): Deferred<NetworkShowPreviousEpisodeResponse> {
158-
if (shouldThrowGetPreviousEpisodeError) {
162+
previousEpisodeError?.let { throw it }
163+
if (shouldThrowGetPreviousEpisodeError) { // Legacy generic error
159164
throw IOException("Fake network error for getPreviousEpisode")
160165
}
161-
val currentMock = mockPreviousEpisodeResponse
162-
if (currentMock != null) {
163-
return CompletableDeferred(currentMock)
164-
} else {
165-
throw NotImplementedError("mockPreviousEpisodeResponse not set for this test")
166-
}
166+
mockPreviousEpisodeResponse?.let { return CompletableDeferred(it) }
167+
throw NotImplementedError("mockPreviousEpisodeResponse not set for this test, or previousEpisodeError/shouldThrowGetPreviousEpisodeError not specified.")
167168
}
168169

169170
override fun getShowCastAsync(id: String?): Deferred<NetworkShowCastResponse> {
170-
val currentMock = mockShowCastResponse
171-
if (currentMock != null) {
172-
return CompletableDeferred(currentMock)
173-
} else {
174-
throw NotImplementedError("mockShowCastResponse not set for this test")
175-
}
171+
showCastError?.let { throw it }
172+
mockShowCastResponse?.let { return CompletableDeferred(it) }
173+
throw NotImplementedError("mockShowCastResponse not set for this test, or showCastError not specified.")
176174
}
177175

178176
override fun getShowSeasonsAsync(id: String?): Deferred<NetworkShowSeasonsResponse> {
179-
val currentMock = mockShowSeasonsResponse
180-
if (currentMock != null) {
181-
return CompletableDeferred(currentMock)
182-
} else {
183-
throw NotImplementedError("mockShowSeasonsResponse not set for this test")
184-
}
177+
showSeasonsError?.let { throw it }
178+
mockShowSeasonsResponse?.let { return CompletableDeferred(it) }
179+
throw NotImplementedError("mockShowSeasonsResponse not set for this test, or showSeasonsError not specified.")
185180
}
186181

187182
override fun getSeasonEpisodesAsync(id: String?): Deferred<NetworkTvMazeEpisodesResponse> {
188-
val currentMock = mockTvMazeEpisodesResponse
189-
if (currentMock != null) {
190-
return CompletableDeferred(currentMock)
191-
} else {
192-
throw NotImplementedError("mockTvMazeEpisodesResponse not set for this test")
193-
}
183+
seasonEpisodesError?.let { throw it }
184+
mockTvMazeEpisodesResponse?.let { return CompletableDeferred(it) }
185+
throw NotImplementedError("mockTvMazeEpisodesResponse not set for this test, or seasonEpisodesError not specified.")
194186
}
195187
}

0 commit comments

Comments
 (0)