This commit is contained in:
macbook_max
2026-10-15 20:36:59 +08:00
commit 6bf949949c
7923 changed files with 1369582 additions and 0 deletions
+137
View File
@@ -0,0 +1,137 @@
// Feed 组件 Widget 测试:InteractionBar 计数/回调、FreeQuotaBanner 显隐
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:video_app/core/storage/token_store.dart';
import 'package:video_app/models/user_model.dart';
import 'package:video_app/models/video_item.dart';
import 'package:video_app/providers/auth_provider.dart';
import 'package:video_app/screens/feed/widgets/feed_overlays.dart';
import 'package:video_app/screens/feed/widgets/interaction_bar.dart';
VideoItem _item({
int likeCount = 5,
int commentCount = 3,
int favoriteCount = 2,
}) =>
VideoItem(
videoId: 101,
author: VideoAuthor(userId: 1, nickname: '小明'),
likeCount: likeCount,
commentCount: commentCount,
favoriteCount: favoriteCount,
);
void main() {
group('InteractionBar', () {
testWidgets('渲染点赞/评论/收藏计数,≥10000 显示 x.xw', (tester) async {
await tester.pumpWidget(
ProviderScope(
child: MaterialApp(
home: Scaffold(
body: InteractionBar(
item: _item(likeCount: 12000),
onLike: (_) {},
),
),
),
),
);
expect(find.text('1.2w'), findsOneWidget); // 点赞
expect(find.text('3'), findsOneWidget); // 评论
expect(find.text('2'), findsOneWidget); // 收藏
expect(find.text('分享'), findsOneWidget);
});
testWidgets('已登录点击点赞触发回调', (tester) async {
final container = ProviderContainer();
addTearDown(container.dispose);
// 注入登录态(Token 内存缓存 + 用户模型)
TokenStore.accessToken = 'test-token';
addTearDown(() => TokenStore.accessToken = null);
await container
.read(authProvider.notifier)
.onLoginSuccess(UserModel(userId: 1, nickname: '测试'));
int? likedId;
await tester.pumpWidget(
UncontrolledProviderScope(
container: container,
child: MaterialApp(
home: Scaffold(
body: InteractionBar(
item: _item(),
onLike: (id) => likedId = id,
),
),
),
),
);
await tester.tap(find.byIcon(Icons.favorite_border));
expect(likedId, 101);
});
testWidgets('已登录点击收藏触发 onFavorite 回调', (tester) async {
final container = ProviderContainer();
addTearDown(container.dispose);
TokenStore.accessToken = 'test-token';
addTearDown(() => TokenStore.accessToken = null);
await container
.read(authProvider.notifier)
.onLoginSuccess(UserModel(userId: 1));
int? favId;
await tester.pumpWidget(
UncontrolledProviderScope(
container: container,
child: MaterialApp(
home: Scaffold(
body: InteractionBar(
item: _item(),
onLike: (_) {},
onFavorite: (id) => favId = id,
),
),
),
),
);
await tester.tap(find.byIcon(Icons.star_border));
expect(favId, 101);
});
});
group('FreeQuotaBanner', () {
Future<void> pump(WidgetTester tester, int? remaining) async {
await tester.pumpWidget(
MaterialApp(
home: Scaffold(body: FreeQuotaBanner(remaining: remaining)),
),
);
}
testWidgets('remaining=2 显示剩余次数提示', (tester) async {
await pump(tester, 2);
expect(find.text('今日免费观看剩余 2 次'), findsOneWidget);
});
testWidgets('remaining=0 显示已用完文案', (tester) async {
await pump(tester, 0);
expect(find.text('今日免费次数已用完,登录后继续观看'), findsOneWidget);
});
testWidgets('remaining=5 不显示', (tester) async {
await pump(tester, 5);
expect(find.byType(Container), findsNothing);
expect(find.textContaining('免费'), findsNothing);
});
testWidgets('remaining=null 不显示', (tester) async {
await pump(tester, null);
expect(find.textContaining('免费'), findsNothing);
});
});
}