yumi-flutter/test/sc_user_badge_res_test.dart

115 lines
3.3 KiB
Dart

import 'package:flutter_test/flutter_test.dart';
import 'package:yumi/shared/business_logic/models/res/sc_user_badge_res.dart';
void main() {
group('SCUserBadgeRes honor wall badges', () {
test('uses short badges only and sorts newest first', () {
final result = SCUserBadgeRes.fromJson({
'longBadges': [
{
'id': 'vip',
'type': 'LONG',
'sourceType': 'VIP',
'selectUrl': 'https://example.com/vip.png',
'updateTime': 3000,
},
],
'shortBadges': [
{
'id': 'old',
'type': 'SHORT',
'sourceType': 'ACTIVITY',
'selectUrl': 'https://example.com/old.png',
'updateTime': 1000,
},
{
'id': 'new',
'type': 'SHORT',
'sourceType': 'ACHIEVEMENT',
'selectUrl': 'https://example.com/new.png',
'updateTime': 2000,
},
],
});
expect(result.allBadges.map((badge) => badge.id), ['vip', 'old', 'new']);
expect(result.longDisplayBadges.map((badge) => badge.id), ['vip']);
expect(result.displayBadges.map((badge) => badge.id), ['old', 'new']);
expect(result.honorWallBadges.map((badge) => badge.id), ['new', 'old']);
});
test('filters long and vip badges from legacy mixed badges', () {
final result = SCUserBadgeRes.fromJson({
'badges': [
{
'id': 'long',
'type': 'LONG',
'selectUrl': 'https://example.com/long.png',
'updateTime': 3000,
},
{
'id': 'vip',
'type': 'VIP',
'sourceType': 'VIP',
'selectUrl': 'https://example.com/vip.png',
'updateTime': 2500,
},
{
'id': 'activity',
'type': 'ACTIVITY',
'sourceType': 'ACTIVITY',
'selectUrl': 'https://example.com/activity.png',
'updateTime': 1000,
},
{
'id': 'achievement',
'type': 'ACHIEVEMENT',
'sourceType': 'ACHIEVEMENT',
'selectUrl': 'https://example.com/achievement.png',
'updateTime': 2000,
},
],
});
expect(result.longDisplayBadges.map((badge) => badge.id), [
'long',
'vip',
]);
expect(result.displayBadges.map((badge) => badge.id), [
'activity',
'achievement',
]);
expect(result.honorWallBadges.map((badge) => badge.id), [
'achievement',
'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);
});
});
}