| 1 |
package io.oxygenhub.android.ui |
| 2 |
|
| 3 |
import io.oxygenhub.android.FakeHubApi |
| 4 |
import io.oxygenhub.android.MainDispatcherRule |
| 5 |
import io.oxygenhub.android.api.HubException |
| 6 |
import io.oxygenhub.android.api.Release |
| 7 |
import io.oxygenhub.android.api.SearchHit |
| 8 |
import io.oxygenhub.android.ui.common.Load |
| 9 |
import io.oxygenhub.android.ui.releases.ReleasesViewModel |
| 10 |
import io.oxygenhub.android.ui.releases.SearchViewModel |
| 11 |
import org.junit.Assert.assertEquals |
| 12 |
import org.junit.Assert.assertNull |
| 13 |
import org.junit.Assert.assertTrue |
| 14 |
import org.junit.Rule |
| 15 |
import org.junit.Test |
| 16 |
|
| 17 |
class ReleasesAndSearchTest { |
| 18 |
@get:Rule val main = MainDispatcherRule() |
| 19 |
|
| 20 |
private val api = FakeHubApi() |
| 21 |
|
| 22 |
@Test |
| 23 |
fun releasesNewestFirst() { |
| 24 |
api.releaseList = listOf(Release("v0.9.3", createdMs = 1), Release("v0.9.4", createdMs = 2)) |
| 25 |
val tags = (ReleasesViewModel(api, "andymccall", "oxygenhub").state.value as Load.Ready).value.map { it.tag } |
| 26 |
assertEquals(listOf("v0.9.4", "v0.9.3"), tags) |
| 27 |
} |
| 28 |
|
| 29 |
@Test |
| 30 |
fun searchFindsIssuesAndProposalsAndSaysWhenItFails() { |
| 31 |
api.hits = { q -> if (q == "board") listOf(SearchHit("issue", "andymccall/oxygenhub", 293, "Boards that keep growing")) else throw HubException.Http(500, "down") } |
| 32 |
val vm = SearchViewModel(api) |
| 33 |
assertNull("nothing searched yet", vm.state.value) |
| 34 |
vm.search(" ") |
| 35 |
assertNull("a blank search is no search", vm.state.value) |
| 36 |
vm.search(" board ") |
| 37 |
val hits = (vm.state.value as Load.Ready).value |
| 38 |
assertEquals(listOf(293L), hits.map { it.number }) |
| 39 |
assertEquals("andymccall" to "oxygenhub", hits[0].owner to hits[0].name) |
| 40 |
assertTrue("search board" in api.calls) |
| 41 |
vm.search("fails") |
| 42 |
assertTrue(vm.state.value is Load.Failed) |
| 43 |
} |
| 44 |
} |