pk_data_mapper_test.dart
2.89 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
87
88
import 'package:doublefeel_flutter/app/modules/pk/models/pk_data.dart';
import 'package:doublefeel_flutter/app/modules/pk/models/pk_data_mapper.dart';
import 'package:doublefeel_flutter/data/models/health/health_models.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
const partner = PkPlayer(name: '好友', steps: 12);
const self = PkPlayer(name: '我', steps: 34);
final now = DateTime(2026, 9, 11);
PkData map(PkCurrentMonthData data) =>
mapPartnerPkData(data, partner: partner, self: self, now: now);
test(
'API partner is left, user is right; today and month can have different winners',
() {
final result = map(
const PkCurrentMonthData(
userWinAmount: 8,
partnerWinAmount: 2,
todayRecord: PkRecord(
date: 20260911,
partnerScore: 800,
userScore: 200,
partnerSteps: 100,
userSteps: 50,
partnerMove: 80,
userMove: 40,
partnerStand: 5,
userStand: 3,
),
),
);
expect(result.result, PkResult.win);
expect(result.monthlyResult, PkResult.loss);
expect(result.left.steps, 100);
expect(result.right.calories, 40);
expect(result.left.standingHours, 5);
expect(result.days[11]?.leftFraction, .8);
},
);
test('missing scores stay missing while valid zeroes produce a draw', () {
expect(map(const PkCurrentMonthData()).result, isNull);
final result = map(
const PkCurrentMonthData(
todayRecord: PkRecord(partnerScore: 0, userScore: 0),
),
);
expect(result.result, PkResult.draw);
expect(result.left.steps, 12);
expect(result.days[11]?.leftFraction, .5);
});
test(
'calendar rejects previous months, future dates and incomplete scores',
() {
final result = map(
const PkCurrentMonthData(
monthRecordList: [
PkRecord(date: 20260810, partnerScore: 1, userScore: 2),
PkRecord(date: 20260912, partnerScore: 1, userScore: 2),
PkRecord(date: 20260909, partnerScore: 1),
PkRecord(date: 20260910, partnerScore: 1, userScore: 2),
],
),
);
expect(result.days.keys, [10]);
},
);
test('stale today record cannot become todays score', () {
final result = map(
const PkCurrentMonthData(
todayRecord: PkRecord(
date: 20260910,
partnerScore: 800,
userScore: 200,
),
),
);
expect(result.result, isNull);
expect(result.days, isEmpty);
});
test('parses seconds, milliseconds and yyyyMMdd; rejects invalid dates', () {
expect(pkRecordDate(now.millisecondsSinceEpoch ~/ 1000), now);
expect(pkRecordDate(now.millisecondsSinceEpoch), now);
expect(pkRecordDate(20260911), now);
expect(pkRecordDate(20260230), isNull);
expect(pkRecordDate(0), isNull);
});
}