Skip to content

Commit 95b48a7

Browse files
committed
test(ledger): cover hidden credit void pagination
1 parent 4140486 commit 95b48a7

1 file changed

Lines changed: 44 additions & 0 deletions

File tree

openmeter/ledger/customerbalance/ledger_loader_test.go

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,50 @@ func TestLedgerCreditTransactionLoaderDoesNotRetainHasMoreAfterHiddenFinalPage(t
5858
require.NotNil(t, fakeLedger.inputs[1].Cursor)
5959
}
6060

61+
func TestLedgerCreditTransactionLoaderScansPastHiddenRowsUntilLimit(t *testing.T) {
62+
now := time.Date(2026, 7, 9, 12, 0, 0, 0, time.UTC)
63+
hidden := ledgerLoaderTestTransaction(t, "tx-hidden", now.Add(-time.Minute), models.Annotations{
64+
creditvoid.AnnotationCreditVoidRecordID: "void-record-1",
65+
}, ledger.AccountTypeCustomerReceivable)
66+
visibleA := ledgerLoaderTestTransaction(t, "tx-visible-a", now.Add(-2*time.Minute), nil, ledger.AccountTypeCustomerAccrued)
67+
visibleB := ledgerLoaderTestTransaction(t, "tx-visible-b", now.Add(-3*time.Minute), nil, ledger.AccountTypeCustomerAccrued)
68+
69+
next := hidden.Cursor()
70+
fakeLedger := &ledgerLoaderFakeLedger{
71+
pages: []ledger.ListTransactionsResult{
72+
{
73+
Items: []ledger.Transaction{hidden},
74+
NextCursor: &next,
75+
},
76+
{
77+
Items: []ledger.Transaction{visibleA, visibleB},
78+
},
79+
},
80+
}
81+
82+
loader := newLedgerCreditTransactionLoader(
83+
&service{Ledger: fakeLedger},
84+
ledger.ListTransactionsCreditMovementNegative,
85+
)
86+
87+
currency := currencyx.Code("USD")
88+
got, err := loader.Load(t.Context(), creditTransactionLoaderInput{
89+
Limit: 2,
90+
CustomerID: customer.CustomerID{Namespace: "ns", ID: "customer-id"},
91+
AccountID: "fbo-account",
92+
Currency: &currency,
93+
AsOf: now,
94+
})
95+
require.NoError(t, err)
96+
require.False(t, got.HasMore)
97+
require.Len(t, got.Items, 2)
98+
require.Equal(t, "tx-visible-a", got.Items[0].ID.ID)
99+
require.Equal(t, "tx-visible-b", got.Items[1].ID.ID)
100+
require.Len(t, fakeLedger.inputs, 2)
101+
require.Equal(t, 3, fakeLedger.inputs[0].Limit)
102+
require.NotNil(t, fakeLedger.inputs[1].Cursor)
103+
}
104+
61105
type ledgerLoaderFakeLedger struct {
62106
pages []ledger.ListTransactionsResult
63107
inputs []ledger.ListTransactionsInput

0 commit comments

Comments
 (0)