friends_controller_test.dart
2.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import 'dart:async';
import 'package:doublefeel_flutter/app/modules/friends/controllers/friends_controller.dart';
import 'package:doublefeel_flutter/app/modules/friends/data/friends_repository.dart';
import 'package:doublefeel_flutter/app/modules/friends/data/self_health_repository.dart';
import 'package:doublefeel_flutter/app/modules/friends/models/friend_health_data.dart';
import 'package:doublefeel_flutter/data/models/health/health_v2_models.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
test('refresh loads friends and self health independently', () async {
final friendsRepository = _FakeFriendsRepository();
final selfHealthRepository = _FakeSelfHealthRepository();
final controller = FriendsController(
repository: friendsRepository,
selfHealthRepository: selfHealthRepository,
);
final refresh = controller.refreshData();
expect(friendsRepository.getFriendsCallCount, 1);
expect(selfHealthRepository.getHealthDataCallCount, 1);
expect(selfHealthRepository.getStressScoreCallCount, 1);
expect(controller.isLoading.value, isTrue);
expect(controller.isSelfHealthLoading.value, isTrue);
selfHealthRepository.healthDataCompleter.complete(
const V2HealthData(steps: 8424, sleepScore: 92),
);
await Future<void>.delayed(Duration.zero);
expect(controller.selfHealthData.value?.steps, 8424);
expect(controller.isSelfHealthLoading.value, isTrue);
expect(controller.isLoading.value, isTrue);
selfHealthRepository.stressScoreCompleter.complete(
const V2StressScore(state: 2, comprehensiveScore: 72),
);
friendsRepository.friendsCompleter.complete(const []);
await refresh;
expect(controller.selfStressScore.value?.comprehensiveScore, 72);
expect(controller.selfHealthUpdatedAt.value, isNotNull);
expect(controller.isLoading.value, isFalse);
expect(controller.isSelfHealthLoading.value, isFalse);
});
}
class _FakeFriendsRepository implements FriendsRepository {
final friendsCompleter = Completer<List<FriendHealthData>>();
int getFriendsCallCount = 0;
@override
Future<List<FriendHealthData>> getFriends() {
getFriendsCallCount++;
return friendsCompleter.future;
}
@override
Future<void> deleteFriend(int userId) async {}
@override
Future<void> selectWatchFaceFriend(int userId) async {}
@override
Future<void> updateRemark(int userId, String remark) async {}
}
class _FakeSelfHealthRepository implements SelfHealthRepository {
final healthDataCompleter = Completer<V2HealthData>();
final stressScoreCompleter = Completer<V2StressScore>();
int getHealthDataCallCount = 0;
int getStressScoreCallCount = 0;
@override
Future<V2HealthData> getHealthData(DateTime date) {
getHealthDataCallCount++;
return healthDataCompleter.future;
}
@override
Future<V2StressScore> getStressScore(DateTime date) {
getStressScoreCallCount++;
return stressScoreCompleter.future;
}
}