fix: keep empty scoped badge lists authoritative

This commit is contained in:
zhx 2026-05-18 12:10:07 +08:00
parent c2b5ef9e16
commit 5a44ec0c6d
2 changed files with 30 additions and 3 deletions

View File

@ -108,9 +108,10 @@ class _SCUserBadgeStripState extends State<SCUserBadgeStrip> {
return FutureBuilder<SCUserBadgeRes>(
future: future,
builder: (context, snapshot) {
final remoteBadges = _remoteBadges(snapshot.data);
final badges = remoteBadges.isNotEmpty ? remoteBadges : _fallbackBadges;
return _buildBadges(badges, stripHeight);
if (snapshot.hasData) {
return _buildBadges(_remoteBadges(snapshot.data), stripHeight);
}
return _buildBadges(_fallbackBadges, stripHeight);
},
);
}

View File

@ -84,5 +84,31 @@ void main() {
'activity',
]);
});
test('does not expose long badges as short display badges', () {
final result = SCUserBadgeRes.fromJson({
'longBadges': [
{
'id': 'long-one',
'type': 'LONG',
'selectUrl': 'https://example.com/long-one.png',
},
{
'id': 'vip-one',
'sourceType': 'VIP',
'selectUrl': 'https://example.com/vip-one.png',
},
],
'shortBadges': [],
});
expect(result.longDisplayBadges.map((badge) => badge.id), [
'long-one',
'vip-one',
]);
expect(result.shortDisplayBadges, isEmpty);
expect(result.displayBadges, isEmpty);
expect(result.honorWallBadges, isEmpty);
});
});
}