Skip to content

Instantly share code, notes, and snippets.

@Farhandroid
Farhandroid / NavigationGraph.kt
Created March 1, 2022 11:55
NavigationGraph
@Composable
fun NavigationGraph(navController: NavHostController) {
NavHost(navController, startDestination = BottomNavigationItem.Home.screen_route) {
composable(BottomNavigationItem.Home.screen_route) {
HomeScreen()
}
composable(BottomNavigationItem.Mail.screen_route) {
Mail()
}
composable(BottomNavigationItem.Person.screen_route) {
@Farhandroid
Farhandroid / Movie.kt
Created February 22, 2022 20:22
Movie
data class Movie(
val movieId: Int,
val overview: String,
val imageId: Int,
val title: String,
val rating: String,
val releaseDate: String,
):Serializable
@Farhandroid
Farhandroid / MovieListContent.kt
Created February 22, 2022 20:10
MovieListContent
@Composable
fun MovieListContent(allMovies: List<Movie>, navController: NavHostController) {
LazyColumn(
contentPadding = PaddingValues(horizontal = 8.dp, vertical = 4.dp)
) {
items(
items = allMovies,
itemContent = {
MovieListItem(movie = it, navController = navController)
@Test
fun getSearchedResult_receivedResponse_wrongPageSize_shouldFail() {
runBlocking {
enqueueMockResponse("ImageResponse.json")
val responseBody = service.getSearchedImage("nature", 5).body()
val photoList = responseBody!!.photos
assertThat(photoList.size).isEqualTo(6)
}
}
@Farhandroid
Farhandroid / dependency.kt
Last active February 21, 2022 14:20
Dependency
//Mock Server
testImplementation 'com.squareup.okhttp3:mockwebserver:4.9.0'
//Truth
testImplementation "com.google.truth:truth:1.1"
//okhttp
implementation 'com.squareup.okhttp3:okhttp:4.9.1'
testImplementation 'junit:junit:4.13.2'
@Farhandroid
Farhandroid / FirstTest.kt
Last active February 21, 2022 12:13
FirstUnitTest
@Test
fun getSearchedResult_sentRequest_receivedExpected() {
runBlocking {
// Prepare fake response
enqueueMockResponse("ImageResponse.json")
//Send Request to the MockServer
val responseBody = service.getSearchedImage("nature", 5).body()
//Request received by the mock server
val request = server.takeRequest()
assertThat(responseBody).isNotNull()
@Farhandroid
Farhandroid / SetupMockwebServer.kt
Last active February 21, 2022 11:45
SetupMockwebServer.
private lateinit var service: ImageApiService
private lateinit var server: MockWebServer
@Before
fun setUp() {
server = MockWebServer()
service = Retrofit.Builder()
.baseUrl(server.url(""))//We will use MockWebServers url
.addConverterFactory(GsonConverterFactory.create())
.build()
@Farhandroid
Farhandroid / ImageApiService.kt
Created February 21, 2022 10:43
ImageApiService
interface ImageApiService {
@GET("v1/search")
suspend fun getSearchedImage(
@Query("query")
searchQuery:String,
@Query("per_page")
page:Int
): Response<APIResponse>
}
@Farhandroid
Farhandroid / MovieRemoteDataSourceImpl.kt
Created February 16, 2022 03:04
MovieRemoteDataSourceImpl
class MovieRemoteDataSourceImpl(private val movieApi: MovieApi, private val movieDB: MovieDB) :
MovieRemoteDataSource {
private val movieDao = movieDB.movieDao()
@OptIn(ExperimentalPagingApi::class)
override fun getPopularMovies(): Flow<PagingData<Movie>> {
val pagingSourceFactory = { movieDao.getAllMovies() }
return Pager(
config = PagingConfig(pageSize = 20),
remoteMediator = MovieRemoteMediator(
@Farhandroid
Farhandroid / MovieLocalDataSource.kt
Created February 16, 2022 02:40
MovieLocalDataSource
interface MovieLocalDataSource {
fun getMoviesFromDB(movieId : Int): Flow<Movie>
}