Skip to content

Instantly share code, notes, and snippets.

View elihart's full-sized avatar

Eli Hart elihart

  • Airbnb
  • San Francisco
View GitHub Profile
@elihart
elihart / HappoTestActivity.kt
Created November 20, 2019 20:40
HappoTestActivity
class HappoTestActivity : IntegrationTestActivity() {
override fun testCurrentScreen(
mockProvider: MockedFragmentProvider,
fragment: MvRxFragment,
resetView: (onViewReset: (MvRxFragment) -> Unit) -> Unit,
finishedTestingFragment: () -> Unit
) {
happoViewSnapshotBuilder.snap(
activity = this,
component = mockProvider.fragmentName,
@elihart
elihart / MvRxViewModelInitializationTestExample.kt
Created November 20, 2019 20:34
MvRxViewModelInitializationTestExample
@Test
fun initialization() = testInitialization(
expectRequests = {
GET("text/endpoint")
},
expectState = {
copy(text = Loading())
}
)
@elihart
elihart / MvRxViewModelTestSetsMappedExample.kt
Created November 20, 2019 20:33
MvRxViewModelTestSetsMappedExample
@Test
fun squared() = TestViewModel::squareNumber {
setsMapped(2 to 4, 5 to 25) {  ::result }
}
@elihart
elihart / MvRxViewModelAutomaticTestExample.kt
Created November 20, 2019 20:32
MvRxViewModelPropertyTestExample
@Test
fun setBold() = TextViewModel::setBold {
sets {  ::options {  ::bold } }
}
@elihart
elihart / MvRxViewModelTextLoadingTest.kt
Created November 20, 2019 20:29
MvRxViewModelTextLoadingTest
@Test
fun loadText() = TextViewModel::loadText {
withParams(1)
expectRequests {
GET("text/endpoint?id=1") shouldReturn "server result"
} expectState {
copy(text = "server result")
}
}
@elihart
elihart / MvRxViewModelTextLoadExample.kt
Created November 20, 2019 20:28
MvRxViewModelTextLoadExample
fun loadText(textId: Long) {
buildRequest<String>(
path = "text/endpoint",
params = {
kv("id", textId)
}
).execute {
copy(text = it)
}
}
@elihart
elihart / MvRxViewModelBoldTest.kt
Created November 20, 2019 20:26
MvRxViewModelBoldTest
@Test
fun setBold() = TextViewModel::setBold {
initialState {
setFalse {  ::options {  ::bold } }
}
withParams(true) expectState {
setTrue {  ::options {  ::bold } }
}
}
@elihart
elihart / MvRxViewModelWithBoldOption.kt
Created November 20, 2019 20:26
MvRxViewModelWithBoldOption
data class TextOptions(val bold: Boolean = false)
data class TextState(val text: String? = null, val options: TextOptions = TextOptions()) : MvRxState
class TextViewModel(state: TextState) : MvRxViewModel<TextState>(state) {
fun setText(text: String) {
setState {
copy(text = text)
}
@elihart
elihart / MvRxViewModelTestClass.kt
Created November 20, 2019 20:23
MvRxViewModelTestClass
class TextViewModelTest : ViewModelTest<TextState, TextViewModel> {
override fun buildViewModel() = TextViewModel(TextState())
@Test
fun setText() = TextViewModel::setText {
withParams("hello") expectState {
copy(text = "hello")
}
}
@elihart
elihart / MvRxViewModelUnitTestSimpleExample.kt
Created November 20, 2019 20:22
MvRxViewModelUnitTestSimpleExample
@Test
fun setText() = TextViewModel::setText {
withParams("hello") expectState {
copy(text = "hello")
}
}