122 lines
3.4 KiB
Dart
122 lines
3.4 KiB
Dart
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:yx_tracking_flutter/yx_tracking_flutter.dart';
|
|
|
|
void main() {
|
|
group('Event.fromJson 分支覆盖', () {
|
|
test('clientType/clientTimestamp 支持 num 与 string', () {
|
|
final event = Event.fromJson(
|
|
<String, dynamic>{
|
|
'system_code': 'SYS',
|
|
'eventType': 'E_NUM',
|
|
'clientType': 3.9,
|
|
'clientTimestamp': '123',
|
|
'timestamp': '2026-01-01T00:00:00.000Z',
|
|
'deviceInfo': <String, dynamic>{
|
|
'os': 'o',
|
|
'model': 'm',
|
|
'screenResolution': '1x1',
|
|
},
|
|
},
|
|
createTime: DateTime.fromMillisecondsSinceEpoch(0),
|
|
retryCount: 0,
|
|
);
|
|
|
|
expect(event.clientType, 3);
|
|
expect(event.clientTimestamp, 123);
|
|
});
|
|
|
|
test('eventParams/customTags 支持非 string key 的 Map', () {
|
|
final event = Event.fromJson(
|
|
<String, dynamic>{
|
|
'system_code': 'SYS',
|
|
'eventType': 'E_MAP',
|
|
'clientType': 3,
|
|
'clientTimestamp': 1,
|
|
'timestamp': '2026-01-01T00:00:00.000Z',
|
|
'deviceInfo': <String, dynamic>{
|
|
'os': 'o',
|
|
'model': 'm',
|
|
'screenResolution': '1x1',
|
|
},
|
|
'eventParams': <Object?, Object?>{1: 'v'},
|
|
'customTags': <Object?, Object?>{'k': 1},
|
|
},
|
|
createTime: DateTime.fromMillisecondsSinceEpoch(0),
|
|
retryCount: 0,
|
|
);
|
|
|
|
expect(event.eventParams?['1'], 'v');
|
|
expect(event.customTags?['k'], 1);
|
|
});
|
|
});
|
|
|
|
test('Event.fromPayload 非 Map JSON 会抛 FormatException', () {
|
|
expect(
|
|
() => Event.fromPayload(
|
|
'[]',
|
|
createTime: DateTime.fromMillisecondsSinceEpoch(0),
|
|
retryCount: 0,
|
|
),
|
|
throwsFormatException,
|
|
);
|
|
});
|
|
|
|
test('StoredEvent.copyWith 可覆盖所有字段', () {
|
|
final baseEvent = Event(
|
|
systemCode: 'SYS',
|
|
eventType: 'BASE',
|
|
userInfo: null,
|
|
clientType: 3,
|
|
clientTimestamp: 1,
|
|
timestamp: 't',
|
|
deviceInfo: const DeviceInfo(
|
|
os: 'o',
|
|
model: 'm',
|
|
screenResolution: '1x1',
|
|
),
|
|
eventParams: null,
|
|
customTags: null,
|
|
createTime: DateTime.fromMillisecondsSinceEpoch(1),
|
|
);
|
|
|
|
final stored = StoredEvent(
|
|
id: 1,
|
|
event: baseEvent,
|
|
retryCount: 2,
|
|
createTime: DateTime.fromMillisecondsSinceEpoch(2),
|
|
);
|
|
|
|
final newEvent = Event(
|
|
systemCode: baseEvent.systemCode,
|
|
eventType: 'NEW',
|
|
userInfo: baseEvent.userInfo,
|
|
clientType: baseEvent.clientType,
|
|
clientTimestamp: baseEvent.clientTimestamp,
|
|
timestamp: baseEvent.timestamp,
|
|
deviceInfo: baseEvent.deviceInfo,
|
|
eventParams: baseEvent.eventParams,
|
|
customTags: baseEvent.customTags,
|
|
createTime: baseEvent.createTime,
|
|
retryCount: baseEvent.retryCount,
|
|
);
|
|
|
|
final replaced = stored.copyWith(
|
|
id: 9,
|
|
event: newEvent,
|
|
retryCount: 7,
|
|
createTime: DateTime.fromMillisecondsSinceEpoch(9),
|
|
);
|
|
|
|
expect(replaced.id, 9);
|
|
expect(replaced.event.eventType, 'NEW');
|
|
expect(replaced.retryCount, 7);
|
|
expect(replaced.createTime.millisecondsSinceEpoch, 9);
|
|
|
|
final unchanged = stored.copyWith();
|
|
expect(unchanged.id, stored.id);
|
|
expect(unchanged.event, same(stored.event));
|
|
expect(unchanged.retryCount, stored.retryCount);
|
|
expect(unchanged.createTime, stored.createTime);
|
|
});
|
|
}
|