package io.oxygenhub.android import io.oxygenhub.android.api.Avatar import io.oxygenhub.android.api.Check import io.oxygenhub.android.api.Proposal import io.oxygenhub.android.api.ProposalState import io.oxygenhub.android.api.HubApi import io.oxygenhub.android.api.Inbox import io.oxygenhub.android.api.Issue import io.oxygenhub.android.api.IssueState import io.oxygenhub.android.api.Repository import io.oxygenhub.android.api.User /** A hub in memory: answers from the fixtures, or the failure set for a call. */ class FakeHubApi : HubApi { var user: () -> User = { Fixtures.user } var repositories: () -> List = { Fixtures.repos } var issues: (IssueState) -> List = { state -> Fixtures.issues.filter { state == IssueState.All || it.state == state.query } } var inbox: () -> Inbox = { Fixtures.inbox } var markRead: (Long) -> Unit = {} var markAllRead: () -> Unit = {} var revoke: () -> Unit = {} var avatar: (String) -> Avatar? = { null } var proposals: (ProposalState) -> List = { state -> Fixtures.proposals.filter { when (state) { ProposalState.Open -> it.isOpen ProposalState.All -> true else -> it.state == state.query } } } var proposal: (Long) -> Proposal = { n -> Fixtures.proposals.first { it.number == n } } var checks: (Long) -> List = { Fixtures.checks } var land: (Long) -> Proposal = { n -> proposal(n).copy(state = "landed", landed = io.oxygenhub.android.api.Landed("andymccall", "api (token phone)", 1)) } var userProposals: () -> io.oxygenhub.android.api.UserProposals = { io.oxygenhub.android.api.UserProposals( review = listOf(io.oxygenhub.android.api.ProposalBrief("andymccall/oxygenhub", 300, "Show a column's archived cards", "ada")), ) } var autoLand: (Long, Boolean) -> Proposal = { n, on -> proposal(n).copy(autoLand = if (on) "andymccall" else null) } val calls = mutableListOf() override suspend fun user(): User = user.invoke().also { calls += "user" } override suspend fun repositories(): List = repositories.invoke().also { calls += "repos" } override suspend fun issues(owner: String, name: String, state: IssueState): List = issues.invoke(state).also { calls += "issues $owner/$name ${state.query}" } override suspend fun inbox(limit: Int): Inbox = inbox.invoke().also { calls += "inbox" } override suspend fun markRead(id: Long) { calls += "read $id" markRead.invoke(id) } override suspend fun markAllRead() { calls += "read all" markAllRead.invoke() } var runnerToken: () -> io.oxygenhub.android.api.RunnerToken = { io.oxygenhub.android.api.RunnerToken("flowreg_test", "andymccall") } override suspend fun runnerToken() = runnerToken.invoke().also { calls += "runner token" } override suspend fun userProposals() = userProposals.invoke().also { calls += "user proposals" } override suspend fun proposals(owner: String, name: String, state: ProposalState): List = proposals.invoke(state).also { calls += "proposals $owner/$name ${state.query}" } override suspend fun proposal(owner: String, name: String, number: Long): Proposal = proposal.invoke(number).also { calls += "proposal $number" } override suspend fun checks(owner: String, name: String, number: Long): List = checks.invoke(number).also { calls += "checks $number" } override suspend fun land(owner: String, name: String, number: Long): Proposal { calls += "land $number" return land.invoke(number) } override suspend fun setAutoLand(owner: String, name: String, number: Long, on: Boolean): Proposal { calls += "auto-land $number $on" return autoLand.invoke(number, on) } override suspend fun avatar(name: String): Avatar? = avatar.invoke(name).also { calls += "avatar $name" } override suspend fun revokeToken() { calls += "revoke" revoke.invoke() } }