OXYGENHUB
# 41e2e862abce oxygenhub-android / app / src / test / java / io / oxygenhub / android / FakeHubApi.kt
4.1 KiB · last changed Notifications when a proposal can be landed; the runner comes back after an update or restart (closes #20, refs #8) 10 days ago source blame history raw
5ae4af48 Andy McCall ↶ 1
package io.oxygenhub.android
2
db00632a Andy McCall ↶ 3
import io.oxygenhub.android.api.Avatar
e2df27a8 Andy McCall ↶ 4
import io.oxygenhub.android.api.Check
5
import io.oxygenhub.android.api.Proposal
6
import io.oxygenhub.android.api.ProposalState
5ae4af48 Andy McCall ↶ 7
import io.oxygenhub.android.api.HubApi
8
import io.oxygenhub.android.api.Inbox
9
import io.oxygenhub.android.api.Issue
10
import io.oxygenhub.android.api.IssueState
11
import io.oxygenhub.android.api.Repository
12
import io.oxygenhub.android.api.User
13
14
/** A hub in memory: answers from the fixtures, or the failure set for a call. */
15
class FakeHubApi : HubApi {
16
    var user: () -> User = { Fixtures.user }
17
    var repositories: () -> List<Repository> = { Fixtures.repos }
18
    var issues: (IssueState) -> List<Issue> = { state ->
19
        Fixtures.issues.filter { state == IssueState.All || it.state == state.query }
20
    }
21
    var inbox: () -> Inbox = { Fixtures.inbox }
22
    var markRead: (Long) -> Unit = {}
23
    var markAllRead: () -> Unit = {}
24
    var revoke: () -> Unit = {}
db00632a Andy McCall ↶ 25
    var avatar: (String) -> Avatar? = { null }
e2df27a8 Andy McCall ↶ 26
    var proposals: (ProposalState) -> List<Proposal> = { state ->
27
        Fixtures.proposals.filter {
28
            when (state) {
29
                ProposalState.Open -> it.isOpen
30
                ProposalState.All -> true
31
                else -> it.state == state.query
32
            }
33
        }
34
    }
35
    var proposal: (Long) -> Proposal = { n -> Fixtures.proposals.first { it.number == n } }
36
    var checks: (Long) -> List<Check> = { Fixtures.checks }
37
    var land: (Long) -> Proposal = { n -> proposal(n).copy(state = "landed", landed = io.oxygenhub.android.api.Landed("andymccall", "api (token phone)", 1)) }
d1f635be Andy McCall ↶ 38
    var userProposals: () -> io.oxygenhub.android.api.UserProposals = {
39
        io.oxygenhub.android.api.UserProposals(
40
            review = listOf(io.oxygenhub.android.api.ProposalBrief("andymccall/oxygenhub", 300, "Show a column's archived cards", "ada")),
41
        )
42
    }
e2df27a8 Andy McCall ↶ 43
    var autoLand: (Long, Boolean) -> Proposal = { n, on -> proposal(n).copy(autoLand = if (on) "andymccall" else null) }
5ae4af48 Andy McCall ↶ 44
45
    val calls = mutableListOf<String>()
46
47
    override suspend fun user(): User = user.invoke().also { calls += "user" }
48
    override suspend fun repositories(): List<Repository> = repositories.invoke().also { calls += "repos" }
49
    override suspend fun issues(owner: String, name: String, state: IssueState): List<Issue> =
50
        issues.invoke(state).also { calls += "issues $owner/$name ${state.query}" }
51
    override suspend fun inbox(limit: Int): Inbox = inbox.invoke().also { calls += "inbox" }
52
    override suspend fun markRead(id: Long) {
53
        calls += "read $id"
54
        markRead.invoke(id)
55
    }
56
    override suspend fun markAllRead() {
57
        calls += "read all"
58
        markAllRead.invoke()
e2df27a8 Andy McCall ↶ 59
    }
4aee5293 Andy McCall ↶ 60
    var runnerToken: () -> io.oxygenhub.android.api.RunnerToken = { io.oxygenhub.android.api.RunnerToken("flowreg_test", "andymccall") }
61
    override suspend fun runnerToken() = runnerToken.invoke().also { calls += "runner token" }
ff65ea45 Andy McCall ↶ 62
    override suspend fun userProposals(landable: Boolean) =
63
        userProposals.invoke().also { calls += if (landable) "user proposals, landable" else "user proposals" }
e2df27a8 Andy McCall ↶ 64
    override suspend fun proposals(owner: String, name: String, state: ProposalState): List<Proposal> =
65
        proposals.invoke(state).also { calls += "proposals $owner/$name ${state.query}" }
66
    override suspend fun proposal(owner: String, name: String, number: Long): Proposal =
67
        proposal.invoke(number).also { calls += "proposal $number" }
68
    override suspend fun checks(owner: String, name: String, number: Long): List<Check> =
69
        checks.invoke(number).also { calls += "checks $number" }
70
    override suspend fun land(owner: String, name: String, number: Long): Proposal {
71
        calls += "land $number"
72
        return land.invoke(number)
73
    }
74
    override suspend fun setAutoLand(owner: String, name: String, number: Long, on: Boolean): Proposal {
75
        calls += "auto-land $number $on"
76
        return autoLand.invoke(number, on)
5ae4af48 Andy McCall ↶ 77
    }
db00632a Andy McCall ↶ 78
    override suspend fun avatar(name: String): Avatar? = avatar.invoke(name).also { calls += "avatar $name" }
5ae4af48 Andy McCall ↶ 79
    override suspend fun revokeToken() {
80
        calls += "revoke"
81
        revoke.invoke()
82
    }
83
}