Skip to content

Commit 808d3a6

Browse files
committed
Add tests for pending transfer orders in ChannelDetailsViewModel
1 parent 87474f6 commit 808d3a6

File tree

2 files changed

+82
-4
lines changed

2 files changed

+82
-4
lines changed

Bitkit/ViewModels/ChannelDetailsViewModel.swift

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -147,10 +147,10 @@ class ChannelDetailsViewModel: ObservableObject {
147147
return connections
148148
}
149149

150-
let pendingOrders = orders.filter { order in
151-
// Include orders that are created or paid but not yet opened
152-
(order.state2 == .created || order.state2 == .paid) && paidOrderIds.contains(order.id)
153-
}
150+
let pendingOrders = Self.pendingOrders(
151+
orders: orders,
152+
paidOrderIds: paidOrderIds
153+
)
154154

155155
for order in pendingOrders {
156156
let fakeChannel = createFakeChannel(from: order)
@@ -160,6 +160,12 @@ class ChannelDetailsViewModel: ObservableObject {
160160
return connections
161161
}
162162

163+
static func pendingOrders(orders: [IBtOrder], paidOrderIds: Set<String>) -> [IBtOrder] {
164+
orders.filter { order in
165+
paidOrderIds.contains(order.id) && (order.state2 == .created || order.state2 == .paid)
166+
}
167+
}
168+
163169
/// Creates a fake channel from a Blocktank order for UI display purposes
164170
private func createFakeChannel(from order: IBtOrder) -> ChannelDetails {
165171
return ChannelDetails(
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
import BitkitCore
2+
import XCTest
3+
4+
@testable import Bitkit
5+
6+
final class ChannelDetailsViewModelTests: XCTestCase {
7+
@MainActor
8+
func testPendingOrdersFiltersByPaidIdsAndState() {
9+
let createdPaid = makeOrder(id: "createdPaid", state2: .created)
10+
let paidPaid = makeOrder(id: "paidPaid", state2: .paid)
11+
let createdUnpaid = makeOrder(id: "createdUnpaid", state2: .created)
12+
let executedPaid = makeOrder(id: "executedPaid", state2: .executed)
13+
let expiredPaid = makeOrder(id: "expiredPaid", state2: .expired)
14+
15+
let orders = [createdPaid, paidPaid, createdUnpaid, executedPaid, expiredPaid]
16+
let paidOrderIds: Set<String> = ["createdPaid", "paidPaid", "executedPaid", "expiredPaid"]
17+
18+
let result = ChannelDetailsViewModel.pendingOrders(
19+
orders: orders,
20+
paidOrderIds: paidOrderIds
21+
)
22+
23+
let ids = Set(result.map(\.id))
24+
XCTAssertEqual(ids, ["createdPaid", "paidPaid"])
25+
}
26+
27+
private func makeOrder(id: String, state2: BtOrderState2) -> IBtOrder {
28+
IBtOrder(
29+
id: id,
30+
state: .created,
31+
state2: state2,
32+
feeSat: 1000,
33+
networkFeeSat: 2483,
34+
serviceFeeSat: 1520,
35+
lspBalanceSat: 50000,
36+
clientBalanceSat: 85967,
37+
zeroConf: false,
38+
zeroReserve: false,
39+
clientNodeId: "node123",
40+
channelExpiryWeeks: 52,
41+
channelExpiresAt: "2025-03-14T10:30:00Z",
42+
orderExpiresAt: "2024-03-21T15:45:00Z",
43+
channel: nil,
44+
lspNode: .init(alias: "", pubkey: "", connectionStrings: [], readonly: nil),
45+
lnurl: nil,
46+
payment: IBtPayment(
47+
state: .created,
48+
state2: .created,
49+
paidSat: 0,
50+
bolt11Invoice: IBtBolt11Invoice(
51+
request: "lnbc...",
52+
state: .pending,
53+
expiresAt: "2024-03-21T15:45:00Z",
54+
updatedAt: "2024-03-14T08:20:00Z"
55+
),
56+
onchain: IBtOnchainTransactions(
57+
address: "bc1q...",
58+
confirmedSat: 0,
59+
requiredConfirmations: 3,
60+
transactions: []
61+
),
62+
isManuallyPaid: nil,
63+
manualRefunds: nil
64+
),
65+
couponCode: nil,
66+
source: nil,
67+
discount: nil,
68+
updatedAt: "2024-03-14T08:20:00Z",
69+
createdAt: "2024-03-14T08:15:00Z"
70+
)
71+
}
72+
}

0 commit comments

Comments
 (0)