Extract message list into dedicated MessageListView (#1080)

* Extract message list into dedicated MessageListView

* Fix broken smoke test

Mounts two distinct fixtures to cover separate render branches: a truncatable message (>2000 chars, no payment tokens) and a payment message (lightning + cashu, private, partial delivery). Expectations guard that each fixture actually reaches its intended branch.

---------

Co-authored-by: jack <212554440+jackjackbits@users.noreply.github.com>
This commit is contained in:
Islam
2026-04-05 19:01:57 -05:00
committed by GitHub
co-authored by jack
parent d265cfc765
commit 951e056a55
5 changed files with 504 additions and 478 deletions
+14 -14
View File
@@ -358,10 +358,17 @@ struct ViewSmokeTests {
secondaryTextColor: .gray,
onTapPerson: {}
)
var expandedMessageIDs: Set<String> = []
let longMessage = BitchatMessage(
let truncatableMessage = BitchatMessage(
sender: viewModel.nickname,
content: String(repeating: "verylongtoken", count: 12) + " lightning:lnbc1test cashuA_test-token",
content: String(repeating: "verylongtoken ", count: 160),
timestamp: Date(),
isRelay: false,
isPrivate: false,
deliveryStatus: .sent
)
let paymentMessage = BitchatMessage(
sender: viewModel.nickname,
content: "lightning:lnbc1test cashuA_test-token",
timestamp: Date(),
isRelay: false,
isPrivate: true,
@@ -371,18 +378,11 @@ struct ViewSmokeTests {
_ = geohashPeopleList.body
_ = mount(geohashPeopleList)
_ = mount(
TextMessageView(
message: longMessage,
expandedMessageIDs: Binding(
get: { expandedMessageIDs },
set: { expandedMessageIDs = $0 }
)
)
.environmentObject(viewModel)
)
_ = mount(TextMessageView(message: truncatableMessage).environmentObject(viewModel))
_ = mount(TextMessageView(message: paymentMessage).environmentObject(viewModel))
#expect(expandedMessageIDs.isEmpty)
#expect(truncatableMessage.content.count > TransportConfig.uiLongMessageLengthThreshold)
#expect(paymentMessage.content.contains("lightning:") && paymentMessage.content.contains("cashu"))
}
@Test