yumi-flutter/test/room_rocket_reward_dialog_loader_test.dart
2026-05-16 04:08:51 +08:00

83 lines
2.6 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:yumi/shared/business_logic/models/res/sc_room_rocket_api_res.dart';
import 'package:yumi/ui_kit/widgets/room/rocket/room_rocket_dialog.dart';
import 'package:yumi/ui_kit/widgets/room/rocket/room_rocket_reward_dialog.dart';
import 'package:yumi/ui_kit/widgets/room/rocket/room_rocket_reward_dialog_loader.dart';
void main() {
group('room rocket reward dialog loader', () {
test('deduplicates reward records by id', () {
final records = debugUniqueRoomRocketRewardRecords([
_rewardRecord(id: 'record-1', rewardAmount: 5000),
_rewardRecord(id: 'record-1', rewardAmount: 5200),
_rewardRecord(id: 'record-2', rewardAmount: 5200),
]);
expect(records, hasLength(2));
expect(records.map((item) => item.id), ['record-1', 'record-2']);
expect(records.first.rewardAmount, 5000);
});
test('deduplicates id-less reward records by reward identity', () {
final records = debugUniqueRoomRocketRewardRecords([
_rewardRecord(id: '', rewardAmount: 5000),
_rewardRecord(id: '', rewardAmount: 5000),
_rewardRecord(id: '', rewardAmount: 5200),
]);
expect(records, hasLength(2));
expect(records.map((item) => item.rewardAmount), [5000, 5200]);
});
});
group('room rocket reward dialog', () {
testWidgets('shows reward empty state when room winners exist', (
tester,
) async {
await tester.pumpWidget(
const MaterialApp(
home: Scaffold(
body: RoomRocketRewardDialog(
rewards: <RoomRocketRewardItem>[],
winners: <RoomRocketRewardWinner>[
RoomRocketRewardWinner(nickname: 'test man'),
],
loadingText: '',
useMockFallback: false,
),
),
),
);
expect(find.text('No reward'), findsOneWidget);
expect(find.text('test man'), findsOneWidget);
});
});
}
SCRoomRocketRewardRecordRes _rewardRecord({
required String id,
required int rewardAmount,
}) {
return SCRoomRocketRewardRecordRes.fromJson({
'id': id,
'launchNo': 'launch-1',
'roomId': 'room-1',
'dayKey': '2026-05-15',
'roundNo': 1,
'level': 2,
'userId': 'user-1',
'userNickname': 'User 1',
'rewardScene': 'TOP1',
'rewardType': 'GOLD',
'rewardItemId': 'gold',
'rewardName': 'Yumi',
'rewardCover': '',
'rewardAmount': rewardAmount,
'expireDays': 0,
'grantStatus': 'SUCCESS',
'popupStatus': 'UNREAD',
});
}