Skip to content

Instantly share code, notes, and snippets.

@Farhandroid
Farhandroid / RenameColumnInfo.kt
Created February 7, 2022 11:56
Rename ColumnInfo
@ColumnInfo(name = "address")
var address: String? = null
@Farhandroid
Farhandroid / RenameColumn.kt
Last active February 7, 2022 12:01
Rename Column
@Database(
entities = [User::class],
version = 3,
autoMigrations = [
AutoMigration(
from = 2, to = 3,
spec = UserDatabase.RenameFromUserAddressToAddress::class
),
],
exportSchema = true
@Farhandroid
Farhandroid / MovieDao.kt
Created February 16, 2022 02:20
MovieDao
@Dao
interface MovieDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun addMovies(movies: List<Movie>)
@Query("SELECT * FROM movies")
fun getAllMovies(): PagingSource<Int, Movie>
@Query("SELECT * FROM movies WHERE movieId = :movieId")
fun getMovie(movieId: Int): Flow<Movie>
@Farhandroid
Farhandroid / MovieRemoteKeysDao.kt
Created February 16, 2022 02:26
MovieRemoteKeysDao
@Dao
interface MovieRemoteKeysDao {
@Query("SELECT * FROM movie_remote_keys WHERE id = :movieId")
suspend fun getMovieRemoteKeys(movieId: Int): MovieRemoteKeys?
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun addAllMovieRemoteKeys(movieRemoteKeys : List<MovieRemoteKeys>)
@Query("DELETE FROM movie_remote_keys")
@Farhandroid
Farhandroid / MovieLocalDataSource.kt
Created February 16, 2022 02:40
MovieLocalDataSource
interface MovieLocalDataSource {
fun getMoviesFromDB(movieId : Int): Flow<Movie>
}
@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 / 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 / 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 / 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 / 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'