Skip to content

St4B/Librarian

Repository files navigation

Librarian

A simple library that helps us to unit-test Jetpack Paging. The motives behind creating it can be found in this post

Installation

In the project's build.gradle file you need to add the maven central repository:

repositories {
    mavenCentral()
}

In the module's build.gradle file you need to add the following dependency:

testImplementation("com.quadible:librarian:1.0.1")

Usage

First, you need to invoke toPagination on an emitted PagingData (There is no difference if PagingData is emitted from LiveData, Flow or Observable) and then you can use the returned Pagination object to make assertions.

// We assume that PagingData will emit three pages
// The first page contains: 1,2,3
// The second page contains: 4,5,6
// The third page contains: 7,8,9

val pagination = viewModel.pagesLiveData.getOrAwaitValue().toPagination()

// Then we can make the following assertions
assertEquals(false, pagination.isEmpty)
assertEquals(3, pagination.count)
assertEquals(listOf(1,2,3), pagination.first())
assertEquals(listOf(7,8,9), pagination.last())
assertEquals(listOf(4,5,6), pagination.pageAt(1))
assertEquals(listOf(1,2,3,4,5,6), pagination.loadedAt(1))
assertEquals(listOf(1,2,3,4,5,6,7,8,9), pagination.fullyLoaded())

For PagingData that is emitted from a Flow you can choose between making the above assertions with turbine or you can you use the turbine like API that we introduced:

viewModel.pagesFlow.testPages {
    val pagination = awaitPages()

    // Make the same assertions as we do in the above example

    ignoreRemaining() // Or you can use awaitNoMore() if you do not expect any other pages
}

About

A simple library that helps us to unit-test Jetpack Paging

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages