package io.oxygenhub.android import io.oxygenhub.android.api.Avatar 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 } 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() } override suspend fun avatar(name: String): Avatar? = avatar.invoke(name).also { calls += "avatar $name" } override suspend fun revokeToken() { calls += "revoke" revoke.invoke() } }