add
This commit is contained in:
@@ -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);
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user