mirror of
https://github.com/priyanshujain/sanderling.git
synced 2026-10-02 19:17:10 +00:00
feat(folio): testTag identity for AccountName and ledger row cells
Replaces string-heuristic identity in the spec extractors with stable testTags. AccountCard exposes AccountName; LedgerRow exposes TxnNote and TxnDate. Spec extractors read those directly instead of filtering visible text by "starts with $" / "matches digit".
This commit is contained in:
1 parent
a967e261e5
commit
23bb2a75cc
3 files changed
+13
-13
No files matched your search
@@ -151,6 +151,7 @@ private fun AccountCard(
|
|||||||
color = t.text,
|
color = t.text,
|
||||||
maxLines = 1,
|
maxLines = 1,
|
||||||
overflow = TextOverflow.Ellipsis,
|
overflow = TextOverflow.Ellipsis,
|
||||||
|
modifier = Modifier.testTag("AccountName"),
|
||||||
)
|
)
|
||||||
Text(txnLabel, style = Type.caption, color = t.textMuted)
|
Text(txnLabel, style = Type.caption, color = t.textMuted)
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -163,8 +163,9 @@ private fun TxnRow(type: TxnType, amount: Long, note: String, date: String) {
|
|||||||
color = t.text,
|
color = t.text,
|
||||||
maxLines = 1,
|
maxLines = 1,
|
||||||
overflow = TextOverflow.Ellipsis,
|
overflow = TextOverflow.Ellipsis,
|
||||||
|
modifier = Modifier.testTag("TxnNote"),
|
||||||
)
|
)
|
||||||
Text(date, style = Type.caption, color = t.textFaint)
|
Text(date, style = Type.caption, color = t.textFaint, modifier = Modifier.testTag("TxnDate"))
|
||||||
}
|
}
|
||||||
Text(
|
Text(
|
||||||
formatCents(signed, signed = true),
|
formatCents(signed, signed = true),
|
||||||
|
|||||||
@@ -39,27 +39,25 @@ const route = extract<string | null>(s => {
|
|||||||
return null;
|
return null;
|
||||||
});
|
});
|
||||||
|
|
||||||
// Account cards on Home: identified by visible name (the first Text node inside).
|
// Account cards on Home: identity is the AccountName text; balance comes from AccountBalance.
|
||||||
// Each card carries an AccountBalance Text with the formatted dollar value.
|
|
||||||
const accounts = extract<Account[]>(s => {
|
const accounts = extract<Account[]>(s => {
|
||||||
const home = s.ax.find({ testTag: "HomeScreen" });
|
const home = s.ax.find({ testTag: "HomeScreen" });
|
||||||
if (!home) return [];
|
if (!home) return [];
|
||||||
return home.findAll({ testTag: "AccountCard" }).map(card => {
|
return home.findAll({ testTag: "AccountCard" }).map(card => ({
|
||||||
const texts = card.findAll({}).map(c => c.text).filter((t): t is string => !!t);
|
name: card.find({ testTag: "AccountName" })?.text ?? "",
|
||||||
const balance = parseDollarCents(card.find({ testTag: "AccountBalance" })?.text);
|
balance: parseDollarCents(card.find({ testTag: "AccountBalance" })?.text),
|
||||||
const name = texts.find(t => !t.startsWith("$") && !/^\d/.test(t) && t !== "transaction" && t !== "transactions") ?? "";
|
}));
|
||||||
return { name, balance };
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// Ledger rows: identified by the row's text contents joined together.
|
// Ledger rows: identity composed from the row's stable testTag'd cells.
|
||||||
const ledgerRows = extract<LedgerRow[]>(s => {
|
const ledgerRows = extract<LedgerRow[]>(s => {
|
||||||
const ledger = s.ax.find({ testTag: "LedgerScreen" });
|
const ledger = s.ax.find({ testTag: "LedgerScreen" });
|
||||||
if (!ledger) return [];
|
if (!ledger) return [];
|
||||||
return ledger.findAll({ testTag: "LedgerRow" }).map(row => {
|
return ledger.findAll({ testTag: "LedgerRow" }).map(row => {
|
||||||
const texts = row.findAll({}).map(c => c.text).filter((t): t is string => !!t);
|
const note = row.find({ testTag: "TxnNote" })?.text ?? "";
|
||||||
const signed = parseDollarCents(row.find({ testTag: "TxnAmount" })?.text);
|
const date = row.find({ testTag: "TxnDate" })?.text ?? "";
|
||||||
return { key: texts.join("|"), signed };
|
const amount = row.find({ testTag: "TxnAmount" })?.text ?? "";
|
||||||
|
return { key: `${date}|${note}|${amount}`, signed: parseDollarCents(amount) };
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user