yx_tracking_flutter/test/event_extra_test.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);
});
}