87 lines
2.9 KiB
Dart
87 lines
2.9 KiB
Dart
// Author: fruit.com.cn
|
|
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:fruitshorts/core/data/models/category_ranking.dart';
|
|
import 'package:fruitshorts/core/data/models/content_category.dart';
|
|
import 'package:fruitshorts/core/data/models/drama.dart';
|
|
import 'package:fruitshorts/core/data/models/home_feed.dart';
|
|
import 'package:fruitshorts/core/data/repositories/category_repository.dart';
|
|
import 'package:fruitshorts/core/data/services/category_controller.dart';
|
|
import 'package:fruitshorts/core/theme/app_colors.dart';
|
|
import 'package:fruitshorts/core/theme/app_theme.dart';
|
|
import 'package:fruitshorts/l10n/app_localizations.dart';
|
|
import 'package:fruitshorts/pages/home/widgets/home_ranking_dramas.dart';
|
|
import 'package:provider/provider.dart';
|
|
|
|
void main() {
|
|
testWidgets('should_render_uniform_rows_in_server_rank_order', (
|
|
tester,
|
|
) async {
|
|
final controller = CategoryController(_EmptyCategoryRepository());
|
|
controller.rankingSlotOf('ranking').ranking = CategoryRanking(
|
|
id: 'ranking',
|
|
code: 'RECOMMEND_RANKING',
|
|
revision: '4',
|
|
entries: [
|
|
for (var rank = 1; rank <= 4; rank++)
|
|
CategoryRankingEntry(rank: rank, drama: _drama('$rank')),
|
|
],
|
|
);
|
|
Drama? opened;
|
|
|
|
await tester.pumpWidget(
|
|
ChangeNotifierProvider.value(
|
|
value: controller,
|
|
child: MaterialApp(
|
|
theme: AppTheme.dark(),
|
|
localizationsDelegates: AppLocalizations.localizationsDelegates,
|
|
supportedLocales: AppLocalizations.supportedLocales,
|
|
home: Scaffold(
|
|
body: HomeRankingDramas(
|
|
categoryId: 'ranking',
|
|
onOpenDrama: (drama) => opened = drama,
|
|
),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
await tester.pumpAndSettle();
|
|
|
|
for (var rank = 1; rank <= 4; rank++) {
|
|
expect(find.byKey(Key('ranking-top-$rank')), findsOneWidget);
|
|
expect(find.byKey(Key('ranking-row-${rank - 1}')), findsOneWidget);
|
|
}
|
|
expect(find.byKey(const Key('home-ranking-top-1')), findsNothing);
|
|
final surface = tester.widget<DecoratedBox>(
|
|
find.byKey(const Key('home-ranking-surface')),
|
|
);
|
|
final gradient =
|
|
(surface.decoration as BoxDecoration).gradient! as LinearGradient;
|
|
expect(gradient.colors.first, AppColors.followingGlow);
|
|
expect(
|
|
tester.getSize(find.byKey(const Key('ranking-row-cover-1'))),
|
|
const Size(96, 128),
|
|
);
|
|
|
|
await tester.tap(find.byKey(const Key('ranking-top-2')));
|
|
expect(opened?.id, '2');
|
|
});
|
|
}
|
|
|
|
Drama _drama(String id) => Drama(
|
|
id: id,
|
|
title: 'Rank $id',
|
|
synopsis: '',
|
|
posterUrl: '',
|
|
viewCount: int.parse(id) * 10,
|
|
);
|
|
|
|
class _EmptyCategoryRepository implements CategoryRepository {
|
|
@override
|
|
Future<List<ContentCategory>> fetchCategories() async => const [];
|
|
|
|
@override
|
|
Future<HomeFeed> fetchDiscoverFeed() async => const HomeFeed();
|
|
}
|