// Author: fruit.com.cn import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:fruitshorts/app.dart'; import 'package:fruitshorts/core/data/models/drama.dart'; import 'package:fruitshorts/core/data/models/home_feed.dart'; import 'package:fruitshorts/core/data/repositories/catalog_repository.dart'; import 'package:fruitshorts/core/data/repositories/favorite_repository.dart'; import 'package:fruitshorts/core/data/repositories/playback_repository.dart'; import 'package:fruitshorts/core/data/repositories/watch_history_repository.dart'; import 'package:fruitshorts/pages/discover/widgets/cover_carousel.dart'; import 'package:shared_preferences_platform_interface/in_memory_shared_preferences_async.dart'; import 'package:shared_preferences_platform_interface/shared_preferences_async_platform_interface.dart'; import '../support/fake_catalog.dart'; import '../support/fake_category.dart'; import '../support/fake_interaction_repositories.dart'; import '../support/fake_notice_repository.dart'; import '../support/widget_player.dart'; void main() { testWidgets( 'should_not_mount_carousel_on_discover_even_when_home_banners_exist', (tester) async { SharedPreferencesAsyncPlatform.instance = InMemorySharedPreferencesAsync.empty(); final catalog = _HomeBannerCatalogRepository(); await tester.pumpWidget( LumaDramaApp( playerFactory: createWidgetPlayer, catalogRepository: catalog, categoryRepository: FakeCategoryRepository(catalog: catalog), watchHistoryRepository: InMemoryWatchHistoryRepository(), favoriteRepository: InMemoryFavoriteRepository(), playbackRepository: FakePlaybackRepository(), commentRepository: FakeCommentRepository(), interactionRepository: FakeInteractionRepository(), noticeRepository: FakeNoticeRepository(), ), ); await tester.pumpAndSettle(); await tester.tap(find.byKey(const Key('tab-discover'))); await tester.pumpAndSettle(); expect(find.byType(CoverCarousel), findsNothing); expect(find.byKey(const Key('discover-search')), findsOneWidget); expect(find.byKey(const Key('home-all-dramas-grid')), findsOneWidget); expect(find.byKey(const Key('discover-quick-filter')), findsOneWidget); expect(find.text('The Signal'), findsWidgets); await tester.pumpWidget(const SizedBox.shrink()); }, ); } class _HomeBannerCatalogRepository implements CatalogRepository { final _delegate = FakeCatalogRepository(); @override Future fetchHomeFeed() async => HomeFeed( banners: const [ FeedBanner( id: 'banner-1', imageUrl: '/files/banner-1.png', linkType: 'DRAMA', linkValue: 'the-signal-demo', ), FeedBanner( id: 'banner-2', imageUrl: '/files/banner-2.png', linkType: 'DRAMA', linkValue: 'city-lights-demo', ), ], sections: [FeedSection(code: 'hot', title: 'Hot', dramas: demoDramas)], ); @override Future fetchDiscoverFeed() async => HomeFeed( sections: [FeedSection(code: 'hot', title: 'Hot', dramas: demoDramas)], ); @override Future fetchDrama(String dramaId) => _delegate.fetchDrama(dramaId); }