Files
kuaishai2/test/models_test.dart
Developer 819889684f feat(device): 实现下位机 JSON 协议(data model 对齐)
按 docs/下位机交互数据模型.md 重构串口协议层:

协议层
- 新增 DeviceMessage 模型,对应 message_id/type/ack/need_ack/data
- 新增 JsonProtocolService,4 字节大端长度前缀 + UTF-8 JSON 帧
- 删除原二进制协议(serial_protocol.dart)

服务层
- 新增 DeviceMessageService,集中收发并按 type 分发
- 重写 SerialRunner 为 JsonSerialRunner,使用 create_task/control 消息

数据模型
- DeviceState 增加 doorStatus/lightStatus/taskStatus/lastInfoAt
- 新增 DeviceInfoNotifier 订阅 device_info 上行
- 灯光按钮接通 light_control 消息

测试
- 新增 device_protocol_test.dart(14 用例)
- 修复 models_test.dart 残留的 Step mixSpeed/blowSpeed 错误
2026-06-04 13:00:21 +08:00

90 lines
2.5 KiB
Dart

import 'package:flutter_test/flutter_test.dart';
import 'package:kuaishai2/features/programs/models/program.dart';
import 'package:kuaishai2/features/programs/models/step.dart';
void main() {
group('Program Model', () {
test('toMap and fromMap should work correctly', () {
final program = Program(
id: 1,
code: 'P001',
name: 'Test Program',
createdAt: '2026-05-20',
status: 1,
);
final map = program.toMap();
final fromMap = Program.fromMap(map);
expect(fromMap.id, equals(program.id));
expect(fromMap.code, equals(program.code));
expect(fromMap.name, equals(program.name));
expect(fromMap.createdAt, equals(program.createdAt));
expect(fromMap.status, equals(program.status));
});
test('copyWith should create modified copy', () {
final program = Program(
id: 1,
code: 'P001',
name: 'Test Program',
createdAt: '2026-05-20',
status: 1,
);
final copy = program.copyWith(name: 'Updated Name', status: 0);
expect(copy.id, equals(program.id));
expect(copy.code, equals(program.code));
expect(copy.name, equals('Updated Name'));
expect(copy.status, equals(0));
});
});
group('Step Model', () {
test('toMap and fromMap should work correctly', () {
final step = Step(
id: 1,
programId: 1,
stepNo: 1,
position: 'A1',
name: 'Mix',
mixTime: 60,
magnetTime: 30,
volume: 100,
blowTime: 10,
speed: 5,
);
final map = step.toMap();
final fromMap = Step.fromMap(map);
expect(fromMap.id, equals(step.id));
expect(fromMap.programId, equals(step.programId));
expect(fromMap.stepNo, equals(step.stepNo));
expect(fromMap.position, equals(step.position));
expect(fromMap.name, equals(step.name));
expect(fromMap.mixTime, equals(step.mixTime));
expect(fromMap.magnetTime, equals(step.magnetTime));
expect(fromMap.volume, equals(step.volume));
expect(fromMap.speed, equals(step.speed));
});
test('copyWith should create modified copy', () {
final step = Step(
id: 1,
programId: 1,
stepNo: 1,
position: 'A1',
name: 'Mix',
mixTime: 60,
);
final copy = step.copyWith(stepNo: 2, mixTime: 120);
expect(copy.id, equals(step.id));
expect(copy.stepNo, equals(2));
expect(copy.mixTime, equals(120));
});
});
}