Skip to content

Commit 9d2ac46

Browse files
authored
Merge pull request android10#17 from chronvas/master
Refactored Context extension networkInfo to return a nullable NetworkInfo
2 parents 67c4ec7 + 26c4905 commit 9d2ac46

File tree

4 files changed

+27
-5
lines changed

4 files changed

+27
-5
lines changed

app/src/main/kotlin/com/fernandocejas/sample/core/extension/Context.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,5 @@ import android.content.Context
1919
import android.net.ConnectivityManager
2020
import android.net.NetworkInfo
2121

22-
val Context.networkInfo: NetworkInfo get() =
22+
val Context.networkInfo: NetworkInfo? get() =
2323
(this.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager).activeNetworkInfo

app/src/main/kotlin/com/fernandocejas/sample/core/platform/NetworkHandler.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ import javax.inject.Inject
2121
import javax.inject.Singleton
2222

2323
/**
24-
* Injectable class which handles device network connection.
24+
* Injectable class which returns information about the network connection state.
2525
*/
2626
@Singleton
2727
class NetworkHandler
2828
@Inject constructor(private val context: Context) {
29-
val isConnected get() = context.networkInfo.isConnectedOrConnecting
29+
val isConnected get() = context.networkInfo?.isConnectedOrConnecting
3030
}

app/src/main/kotlin/com/fernandocejas/sample/features/movies/MoviesRepository.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,14 @@ interface MoviesRepository {
3636
override fun movies(): Either<Failure, List<Movie>> {
3737
return when (networkHandler.isConnected) {
3838
true -> request(service.movies(), { it.map { it.toMovie() } }, emptyList())
39-
false -> Left(NetworkConnection())
39+
false, null -> Left(NetworkConnection())
4040
}
4141
}
4242

4343
override fun movieDetails(movieId: Int): Either<Failure, MovieDetails> {
4444
return when (networkHandler.isConnected) {
4545
true -> request(service.movieDetails(movieId), { it.toMovieDetails() }, MovieDetailsEntity.empty())
46-
false -> Left(NetworkConnection())
46+
false, null -> Left(NetworkConnection())
4747
}
4848
}
4949

app/src/test/kotlin/com/fernandocejas/sample/features/movies/MoviesRepositoryTest.kt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,17 @@ class MoviesRepositoryTest : UnitTest() {
8989
verifyZeroInteractions(service)
9090
}
9191

92+
@Test fun `movies service should return network failure when undefined connection`() {
93+
given { networkHandler.isConnected }.willReturn(null)
94+
95+
val movies = networkRepository.movies()
96+
97+
movies shouldBeInstanceOf Either::class.java
98+
movies.isLeft shouldEqual true
99+
movies.either({ failure -> failure shouldBeInstanceOf NetworkConnection::class.java }, {})
100+
verifyZeroInteractions(service)
101+
}
102+
92103
@Test fun `movies service should return server error if no successful response`() {
93104
given { networkHandler.isConnected }.willReturn(true)
94105

@@ -149,6 +160,17 @@ class MoviesRepositoryTest : UnitTest() {
149160
verifyZeroInteractions(service)
150161
}
151162

163+
@Test fun `movie details service should return network failure when undefined connection`() {
164+
given { networkHandler.isConnected }.willReturn(null)
165+
166+
val movieDetails = networkRepository.movieDetails(1)
167+
168+
movieDetails shouldBeInstanceOf Either::class.java
169+
movieDetails.isLeft shouldEqual true
170+
movieDetails.either({ failure -> failure shouldBeInstanceOf NetworkConnection::class.java }, {})
171+
verifyZeroInteractions(service)
172+
}
173+
152174
@Test fun `movie details service should return server error if no successful response`() {
153175
given { networkHandler.isConnected }.willReturn(true)
154176

0 commit comments

Comments
 (0)