feat(flutter): 接入互动评论点赞举报

This commit is contained in:
Zhou Weidong committed 2026-10-17 15:26:42 +08:00
1 parent 45f5f25640
commit d361034226
39 files changed
+3298 -462

No files matched your search

@@ -0,0 +1,60 @@
// Author: fruit.com.cn
import 'dart:async';
import 'package:flutter_test/flutter_test.dart';
import 'package:fruitshorts/core/data/models/interaction.dart';
import 'package:fruitshorts/core/data/remote/api_client.dart';
import 'package:fruitshorts/core/data/services/interaction_controller.dart';
import '../support/fake_interaction_repositories.dart';
void main() {
test('should_update_drama_like_optimistically_and_use_server_state_when_toggle_succeeds', () async {
final repository = FakeInteractionRepository();
final gate = Completer<void>();
repository.likeGate = gate;
final controller = InteractionController(repository);
final future = controller.toggleDramaLike('5');
expect(controller.isLiked('5'), isTrue);
expect(repository.likeTargets, ['DRAMA:5']);
repository.nextLikeResult = const LikeToggleResult(liked: false, count: 0);
gate.complete();
final result = await future;
expect(result.isSuccess, isTrue);
expect(controller.isLiked('5'), isFalse);
controller.dispose();
});
test('should_rollback_drama_like_when_toggle_fails', () async {
final repository = FakeInteractionRepository(
nextLikeResult: const LikeToggleResult(liked: true, count: 3),
);
final controller = InteractionController(repository);
await controller.toggleDramaLike('5');
repository.likeError = const ApiException(500, '点赞失败');
final result = await controller.toggleDramaLike('5');
expect(result.isSuccess, isFalse);
expect(result.errorMessage, '点赞失败');
expect(controller.isLiked('5'), isTrue);
controller.dispose();
});
test('should_clear_account_scoped_drama_likes_when_session_changes', () async {
final repository = FakeInteractionRepository(
nextLikeResult: const LikeToggleResult(liked: true, count: 1),
);
final controller = InteractionController(repository);
await controller.toggleDramaLike('5');
controller.clear();
expect(controller.isLiked('5'), isFalse);
controller.dispose();
});
}