import 'package:flutter_test/flutter_test.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/ui_kit/widgets/room/rocket/room_rocket_asset_preloader.dart'; void main() { group('room rocket asset preloader', () { test('collects current and next level disk preload resources', () { final resources = debugRoomRocketAssetPreloadResources(_status()); expect(resources, [ 'https://cdn.example.com/rocket-l2.png', 'https://cdn.example.com/rocket-l2.pag', 'https://cdn.example.com/rocket-l3.png', 'https://cdn.example.com/rocket-l3.pag', 'https://cdn.example.com/reward-top1.png', 'https://cdn.example.com/reward-in-room.png', ]); }); test('force mode only collects current launch pag and reward covers', () { final resources = debugRoomRocketAssetPreloadResources( _status(), includeNextLevel: false, onlyCurrentLaunchAssets: true, ); expect(resources, [ 'https://cdn.example.com/rocket-l2.pag', 'https://cdn.example.com/reward-top1.png', 'https://cdn.example.com/reward-in-room.png', ]); }); test('uses shake threshold to decide force preload', () { expect( debugShouldForceRoomRocketAssetPreload(_status(percent: 94)), false, ); expect( debugShouldForceRoomRocketAssetPreload(_status(percent: 95)), true, ); }); }); } SCRoomRocketStatusRes _status({num percent = 95}) { return SCRoomRocketStatusRes( roomId: 'room-1', currentLevel: 2, displayPercent: percent, levels: [ _level( level: 2, icon: 'https://cdn.example.com/rocket-l2.png', animation: 'https://cdn.example.com/rocket-l2.pag', rewardPreview: SCRoomRocketRewardPreviewRes( top1: [ _reward('https://cdn.example.com/reward-top1.png'), _reward('https://cdn.example.com/reward-top1.png'), ], ignite: const [], inRoom: [_reward('https://cdn.example.com/reward-in-room.png')], ), ), _level( level: 3, icon: 'https://cdn.example.com/rocket-l3.png', animation: 'https://cdn.example.com/rocket-l3.pag', ), ], ); } SCRoomRocketLevelRes _level({ required int level, required String icon, required String animation, SCRoomRocketRewardPreviewRes? rewardPreview, }) { return SCRoomRocketLevelRes( id: level.toString(), level: level, needEnergy: level * 100, rocketIconUrl: icon, rocketPreviewUrl: '', rocketAnimationUrl: animation, progressBarUrl: '', shakeThresholdPercent: 95, enabled: true, sort: level, rewardPreview: rewardPreview, ); } SCRoomRocketRewardRes _reward(String cover) { return SCRoomRocketRewardRes( rewardScene: 'TOP1', rewardType: 'GOLD', rewardItemId: '', rewardName: 'Yumi', rewardCover: cover, rocketIconUrl: '', rewardAmount: 1000, expireDays: 0, ); }