import 'package:flutter_test/flutter_test.dart'; import 'package:patbond_flutter/features/pets/money.dart'; void main() { group('formatCentsAsYuan', () { test('整元不带小数', () { expect(formatCentsAsYuan(0), '0'); expect(formatCentsAsYuan(100), '1'); expect(formatCentsAsYuan(12800), '128'); }); test('非整元固定两位小数', () { expect(formatCentsAsYuan(12850), '128.50'); expect(formatCentsAsYuan(12805), '128.05'); expect(formatCentsAsYuan(5), '0.05'); expect(formatCentsAsYuan(50), '0.50'); }); test('负数入参抛 ArgumentError(契约金额非负)', () { expect(() => formatCentsAsYuan(-1), throwsArgumentError); }); }); group('parseYuanToCents', () { test('整数与一/两位小数', () { expect(parseYuanToCents('128'), 12800); expect(parseYuanToCents('128.5'), 12850); expect(parseYuanToCents('128.50'), 12850); expect(parseYuanToCents('0.05'), 5); expect(parseYuanToCents('0'), 0); expect(parseYuanToCents(' 12.30 '), 1230); }); test('非法输入返回 null', () { expect(parseYuanToCents(''), isNull); expect(parseYuanToCents('abc'), isNull); expect(parseYuanToCents('12.345'), isNull); expect(parseYuanToCents('-5'), isNull); expect(parseYuanToCents('12.'), isNull); expect(parseYuanToCents('.5'), isNull); expect(parseYuanToCents('1,200'), isNull); }); test('往返一致:format(parse(x)) 保持数值', () { for (final input in ['128', '128.50', '0.05', '99.90']) { final cents = parseYuanToCents(input)!; expect(parseYuanToCents(formatCentsAsYuan(cents)), cents); } }); }); }