112 lines
3.6 KiB
Dart
112 lines
3.6 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:provider/provider.dart';
|
|
import 'package:yumi/services/audio/rtc_manager.dart';
|
|
import 'package:yumi/services/audio/rtm_manager.dart';
|
|
import 'package:yumi/services/general/sc_app_general_manager.dart';
|
|
import 'package:yumi/services/music/room_music_manager.dart';
|
|
import 'package:yumi/shared/business_logic/models/res/sc_room_rocket_api_res.dart';
|
|
import 'package:yumi/shared/business_logic/models/res/sc_room_rocket_status_res.dart';
|
|
import 'package:yumi/shared/business_logic/models/res/sc_index_banner_res.dart';
|
|
import 'package:yumi/ui_kit/widgets/room/rocket/room_rocket_floating_entry.dart';
|
|
import 'package:yumi/ui_kit/widgets/room/room_play_widget.dart';
|
|
|
|
void main() {
|
|
testWidgets('room rocket entry follows in-room progress updates', (
|
|
tester,
|
|
) async {
|
|
await tester.binding.setSurfaceSize(const Size(720, 1600));
|
|
addTearDown(() async {
|
|
await tester.binding.setSurfaceSize(null);
|
|
});
|
|
|
|
final rtcProvider = _TestRtcProvider()..setRocketPercent(30);
|
|
|
|
await tester.pumpWidget(
|
|
ScreenUtilInit(
|
|
designSize: const Size(375, 812),
|
|
builder:
|
|
(_, __) => MultiProvider(
|
|
providers: [
|
|
ChangeNotifierProvider<RtcProvider>.value(value: rtcProvider),
|
|
ChangeNotifierProvider<RtmProvider>.value(
|
|
value: RealTimeMessagingManager(),
|
|
),
|
|
ChangeNotifierProvider<RoomMusicManager>.value(
|
|
value: RoomMusicManager(),
|
|
),
|
|
ChangeNotifierProvider<SCAppGeneralManager>.value(
|
|
value: _TestAppGeneralManager(),
|
|
),
|
|
],
|
|
child: const MaterialApp(home: Scaffold(body: RoomPlayWidget())),
|
|
),
|
|
),
|
|
);
|
|
await tester.pump();
|
|
|
|
expect(_rocketProgressWidthFactor(), closeTo(0.3, 0.001));
|
|
|
|
rtcProvider.setRocketPercent(80);
|
|
await tester.pump();
|
|
|
|
expect(_rocketProgressWidthFactor(), closeTo(0.8, 0.001));
|
|
});
|
|
}
|
|
|
|
class _TestAppGeneralManager extends ChangeNotifier
|
|
implements SCAppGeneralManager {
|
|
@override
|
|
final List<SCIndexBannerRes> roomBanners = <SCIndexBannerRes>[];
|
|
|
|
@override
|
|
dynamic noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
|
|
}
|
|
|
|
class _TestRtcProvider extends RealTimeCommunicationManager {
|
|
void setRocketPercent(num percent) {
|
|
roomRocketStatus = SCRoomRocketStatusRes(
|
|
roomId: 'room-1',
|
|
currentLevel: 1,
|
|
level: 1,
|
|
currentEnergy: percent.toInt(),
|
|
maxEnergy: 100,
|
|
displayPercent: percent,
|
|
configured: true,
|
|
enabled: true,
|
|
levels: [
|
|
SCRoomRocketLevelRes(
|
|
id: 'level-1',
|
|
level: 1,
|
|
needEnergy: 100,
|
|
rocketIconUrl: 'sc_images/index/sc_icon_task_gift.png',
|
|
rocketPreviewUrl: '',
|
|
rocketAnimationUrl: '',
|
|
progressBarUrl: '',
|
|
shakeThresholdPercent: 95,
|
|
enabled: true,
|
|
sort: 1,
|
|
),
|
|
],
|
|
);
|
|
notifyListeners();
|
|
}
|
|
}
|
|
|
|
double _rocketProgressWidthFactor() {
|
|
final progressFinder = find.descendant(
|
|
of: find.byType(RoomRocketFloatingEntry),
|
|
matching: find.byWidgetPredicate(
|
|
(widget) => widget is FractionallySizedBox && widget.heightFactor == 1,
|
|
),
|
|
);
|
|
final progress = testerWidget<FractionallySizedBox>(progressFinder);
|
|
return progress.widthFactor!;
|
|
}
|
|
|
|
T testerWidget<T extends Widget>(Finder finder) {
|
|
expect(finder, findsOneWidget);
|
|
return finder.evaluate().single.widget as T;
|
|
}
|