168 lines
4.9 KiB
Dart
168 lines
4.9 KiB
Dart
import 'package:aslan/chatvibe_data/models/message/at_floating_message.dart';
|
|
import 'package:aslan/chatvibe_domain/models/res/at_room_rocket_reward_res.dart';
|
|
import 'package:aslan/chatvibe_ui/widgets/room/rocket/room_rocket_floating_popup.dart';
|
|
import 'package:aslan/chatvibe_ui/widgets/room/rocket/room_rocket_reward_page.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
|
|
void main() {
|
|
TestWidgetsFlutterBinding.ensureInitialized();
|
|
|
|
setUp(() {
|
|
TestWidgetsFlutterBinding
|
|
.instance
|
|
.platformDispatcher
|
|
.views
|
|
.first
|
|
.physicalSize = const Size(375, 812);
|
|
TestWidgetsFlutterBinding
|
|
.instance
|
|
.platformDispatcher
|
|
.views
|
|
.first
|
|
.devicePixelRatio = 1;
|
|
});
|
|
|
|
tearDown(() {
|
|
TestWidgetsFlutterBinding.instance.platformDispatcher.views.first
|
|
.resetPhysicalSize();
|
|
TestWidgetsFlutterBinding.instance.platformDispatcher.views.first
|
|
.resetDevicePixelRatio();
|
|
});
|
|
|
|
test('rocket reward parses the current backend API and IM fields', () {
|
|
final ATRoomRocketRewardRes apiReward =
|
|
ATRoomRocketRewardRes.fromJson(<String, dynamic>{
|
|
'rewardType': 'GOLD',
|
|
'rewardItemId': 12,
|
|
'rewardItemName': 'Gold',
|
|
'rewardAmount': 18800,
|
|
'cover': 'https://example.test/gold.png',
|
|
'rocketLevel': 2,
|
|
'message': 'Congratulations',
|
|
});
|
|
final ATRoomRocketRewardRes messageReward =
|
|
ATRoomRocketRewardRes.fromJson(<String, dynamic>{
|
|
'rewardType': 'PROP',
|
|
'cover': 'https://example.test/frame.png',
|
|
'rocketLevel': 3,
|
|
'userId': 10002,
|
|
'userNickname': 'Rocket Cat',
|
|
});
|
|
|
|
expect(apiReward.rewardItemId, '12');
|
|
expect(apiReward.displayLabel, '18800');
|
|
expect(messageReward.userId, '10002');
|
|
expect(messageReward.userNickname, 'Rocket Cat');
|
|
});
|
|
|
|
testWidgets(
|
|
'rocket floating window no longer opens the reward dialog on tap',
|
|
(tester) async {
|
|
await tester.pumpWidget(
|
|
ScreenUtilInit(
|
|
designSize: const Size(375, 812),
|
|
minTextAdapt: true,
|
|
builder:
|
|
(_, __) => MaterialApp(
|
|
home: Scaffold(
|
|
body: RoomRocketFloatingPopup(
|
|
message: ATFloatingMessage(
|
|
type: 3,
|
|
roomId: '',
|
|
userName: 'Igniter',
|
|
userId: '163526',
|
|
rocketLevel: 2,
|
|
),
|
|
onAnimationCompleted: () {},
|
|
),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
await tester.pump();
|
|
await tester.pump(const Duration(milliseconds: 1500));
|
|
|
|
expect(find.text('Igniter'), findsOneWidget);
|
|
await tester.tap(find.byType(RoomRocketFloatingPopup));
|
|
await tester.pump(const Duration(milliseconds: 400));
|
|
expect(find.byType(RoomRocketRewardPage), findsNothing);
|
|
|
|
await tester.pumpWidget(const SizedBox());
|
|
await tester.pump(const Duration(seconds: 4));
|
|
},
|
|
);
|
|
|
|
testWidgets(
|
|
'rocket reward panel binds winner count and current user rewards',
|
|
(tester) async {
|
|
await tester.pumpWidget(
|
|
_testApp(
|
|
RoomRocketRewardPage(
|
|
rewards: _sampleRewards(),
|
|
currentUserId: '10002',
|
|
igniterUserId: '10003',
|
|
),
|
|
),
|
|
);
|
|
|
|
expect(find.text('10000'), findsNWidgets(2));
|
|
expect(find.text('2 users received rewards'), findsOneWidget);
|
|
expect(find.text('Rocket Cat'), findsOneWidget);
|
|
expect(find.text('Igniter'), findsOneWidget);
|
|
},
|
|
);
|
|
|
|
testWidgets('same reward panel switches to not-won state for another user', (
|
|
tester,
|
|
) async {
|
|
await tester.pumpWidget(
|
|
_testApp(
|
|
RoomRocketRewardPage(
|
|
rewards: _sampleRewards(),
|
|
currentUserId: '99999',
|
|
igniterUserId: '10003',
|
|
),
|
|
),
|
|
);
|
|
|
|
expect(
|
|
find.text("You didn't win a prize. Better luck next time!"),
|
|
findsOneWidget,
|
|
);
|
|
expect(find.text('2 users received rewards'), findsOneWidget);
|
|
});
|
|
}
|
|
|
|
Widget _testApp(Widget child) {
|
|
return ScreenUtilInit(
|
|
designSize: const Size(375, 812),
|
|
minTextAdapt: true,
|
|
builder:
|
|
(_, __) => MaterialApp(
|
|
home: Scaffold(
|
|
backgroundColor: Colors.black,
|
|
body: Center(child: child),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
|
|
List<ATRoomRocketRewardRes> _sampleRewards() {
|
|
return <ATRoomRocketRewardRes>[
|
|
ATRoomRocketRewardRes.fromJson(<String, dynamic>{
|
|
'userId': 10002,
|
|
'userNickname': 'Rocket Cat',
|
|
'rewardType': 'GOLD',
|
|
'rewardAmount': 10000,
|
|
}),
|
|
ATRoomRocketRewardRes.fromJson(<String, dynamic>{
|
|
'userId': 10003,
|
|
'userNickname': 'Igniter',
|
|
'rewardType': 'PROP',
|
|
'rewardItemName': '7 days',
|
|
}),
|
|
];
|
|
}
|