yumi-flutter/test/room_rocket_reward_dialog_loader_test.dart
2026-05-23 19:12:58 +08:00

108 lines
3.3 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:yumi/services/audio/rtm_manager.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 popup audience', () {
test('winner ids do not block empty reward users', () {
final shouldShow = roomRocketRewardPopupTargetsCurrentUser(
payload: {
'winnerUserIds': ['user-a', 'user-b'],
},
currentUserKeys: {'user-c'},
);
expect(shouldShow, isTrue);
});
test('explicit popup ids still target popup recipients', () {
final shouldShow = roomRocketRewardPopupTargetsCurrentUser(
payload: {
'popupUserIds': ['user-a', 'user-b'],
},
currentUserKeys: {'user-c'},
);
expect(shouldShow, isFalse);
});
});
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',
});
}