Skip to content

Instantly share code, notes, and snippets.

@tolmachevroman
Last active November 26, 2017 05:09
Show Gist options
  • Save tolmachevroman/e998ed1a7a05d05793b039ba179dc9cd to your computer and use it in GitHub Desktop.
Save tolmachevroman/e998ed1a7a05d05793b039ba179dc9cd to your computer and use it in GitHub Desktop.
Medium Post 3. RestaurantsRepositoryTest
@RunWith(AndroidJUnit4::class)
class RestaurantsRepositoryTest {
@Rule
@JvmField
var instantExecutor = InstantTaskExecutorRule()
@Mock
private lateinit var observer: Observer<Resource<List<Restaurant>>>
private lateinit var mockWebServer: MockWebServer
private lateinit var database: Database
private lateinit var utils: Utils
private lateinit var restaurantsDao: RestaurantsDao
private lateinit var repository: RestaurantsRepository
private lateinit var appExecutors: AppExecutors
private lateinit var retrofit: Retrofit
private lateinit var webService: WebService
companion object {
val TIMEOUT = 1000L
}
@Before
fun setup() {
MockitoAnnotations.initMocks(this)
val context = InstrumentationRegistry.getTargetContext()
database = Room.inMemoryDatabaseBuilder(context, Database::class.java).allowMainThreadQueries().build()
restaurantsDao = database.restaurantsDao()
utils = Utils(context)
appExecutors = AppExecutors()
mockWebServer = MockWebServer()
mockWebServer.start()
retrofit = Retrofit.Builder()
.addConverterFactory(MoshiConverterFactory.create())
.baseUrl(mockWebServer.url("/").toString())
.client(OkHttpClient())
.build()
webService = retrofit.create<WebService>(WebService::class.java)
repository = RestaurantsRepository(webService, restaurantsDao, utils, appExecutors)
}
@After
fun tearDown() {
mockWebServer.shutdown()
}
// ...
/**
* Case 2: receive item with invalid name.
* Expected result: Resource(status = SUCCESS, data = [], error = null)
*/
@Test
fun itemWithInvalidNameTest() {
//given
val content = this.javaClass.classLoader.getResource("get-restaurants-cases/invalid-name.json").readText(Charset.forName("UTF-8"))
mockWebServer.enqueue(MockResponse()
.setResponseCode(200)
.setBody(content))
//when
repository.getRestaurants().observeForever(observer)
//then
verify(observer, timeout(TIMEOUT)).onChanged(ArgumentMatchers.refEq(Resource.success(emptyList())))
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment