Files
conti-retail-app/app/test/device_id_test.dart
T

41 lines
1.7 KiB
Dart
Raw Normal View History

2026-08-17 15:29:55 +08:00
// deviceId 是这个壳工程里唯一有合规约束的一段逻辑,所以它有测试:
// 它必须是**本端随机生成**的,不能是任何设备唯一标识(IMEI / IDFA / MAC /
// AndroidID)。这条断言防的不是今天的代码,是将来某个人为了"提高准确率"
// 把它换成 device_info_plus 的某个字段。
import 'package:app/src/device_id.dart';
import 'package:core_storage/core_storage.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:shared_preferences_platform_interface/in_memory_shared_preferences_async.dart';
import 'package:shared_preferences_platform_interface/shared_preferences_async_platform_interface.dart';
void main() {
setUp(() {
SharedPreferencesAsyncPlatform.instance = InMemorySharedPreferencesAsync.empty();
});
test('首次调用生成并落盘,之后一直复用同一个值', () async {
final Prefs prefs = Prefs();
final String first = await loadOrCreateDeviceId(prefs);
expect(first, isNotEmpty);
// 换一个 Prefs 实例读,模拟下次冷启动。
final String second = await loadOrCreateDeviceId(Prefs());
expect(second, first);
});
test('两台设备(两份存储)拿到的是不同的随机值', () async {
final String a = await loadOrCreateDeviceId(Prefs());
SharedPreferencesAsyncPlatform.instance = InMemorySharedPreferencesAsync.empty();
final String b = await loadOrCreateDeviceId(Prefs());
// 撞了就说明它不是随机的——大概率是有人换成了设备标识。
expect(b, isNot(a));
// 128 bit 的 base64url,去掉 padding 后 22 个字符。
expect(a.length, 22);
expect(a, isNot(contains('=')));
});
}