feat(flutter): 接入互动评论点赞举报
This commit is contained in:
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();
|
||||
});
|
||||
}
|
||||
Reference in new issue
Block a user