Files
jiu/client/test/date_picker_field_test.dart
T
wangjia 182adca282
Deploy Client / build-client-web (push) Successful in 41s
Deploy Client / build-windows (push) Successful in 2m34s
Deploy Client / build-macos (push) Successful in 2m20s
Deploy Client / build-android (push) Successful in 1m5s
Deploy Client / build-ios (push) Successful in 2m44s
Deploy Client / release-deploy-client (push) Successful in 1m26s
feat(client): 列表日期列改名入库/出库时间删审核时间列 + 日期控件改可键入框带日历
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YZ4DskSRKsSiheQonFtQvx
2026-06-21 16:39:32 +08:00

78 lines
2.6 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:jiu_client/core/utils/date_util.dart';
import 'package:jiu_client/widgets/date_picker_field.dart';
void main() {
group('date_util', () {
test('formatYmd 补零', () {
expect(formatYmd(DateTime(2026, 6, 9)), '2026-06-09');
expect(formatYmd(DateTime(2026, 12, 31)), '2026-12-31');
});
test('parseYmd 解析/容错', () {
expect(parseYmd('2026-06-19'), DateTime(2026, 6, 19));
expect(parseYmd('2026-06-19T08:00:00'), DateTime(2026, 6, 19));
expect(parseYmd(null), isNull);
expect(parseYmd(''), isNull);
});
test('composeYmd 正常组合', () {
expect(composeYmd(2026, 6, 15), '2026-06-15');
});
test('composeYmd 把超界的日 clamp 回当月最大值', () {
expect(composeYmd(2026, 2, 31), '2026-02-28'); // 平年 2 月
expect(composeYmd(2024, 2, 31), '2024-02-29'); // 闰年 2 月
expect(composeYmd(2026, 4, 31), '2026-04-30'); // 4 月 30 天
});
test('composeYmd 任一为空返回 null', () {
expect(composeYmd(null, 6, 15), isNull);
expect(composeYmd(2026, null, 15), isNull);
expect(composeYmd(2026, 6, null), isNull);
});
});
group('DatePickerField', () {
testWidgets('渲染可键入框 + 日历图标', (tester) async {
await tester.pumpWidget(MaterialApp(
home: Scaffold(
body: DatePickerField(value: '2026-06-19', onChanged: (_) {}),
),
));
await tester.pumpAndSettle();
expect(find.byType(TextField), findsOneWidget);
expect(find.byIcon(Icons.calendar_today), findsOneWidget);
});
testWidgets('初始值回显到输入框', (tester) async {
await tester.pumpWidget(MaterialApp(
home: Scaffold(
body: DatePickerField(value: '2026-06-19', onChanged: (_) {}),
),
));
await tester.pumpAndSettle();
expect(find.text('2026-06-19'), findsOneWidget);
});
testWidgets('只输年份归一为 yyyy-01-01', (tester) async {
String? out;
await tester.pumpWidget(MaterialApp(
home: Scaffold(
body: DatePickerField(onChanged: (v) => out = v),
),
));
await tester.enterText(find.byType(TextField), '2024');
expect(out, '2024-01-01');
});
testWidgets('年月归一为 yyyy-MM-01', (tester) async {
String? out;
await tester.pumpWidget(MaterialApp(
home: Scaffold(
body: DatePickerField(onChanged: (v) => out = v),
),
));
await tester.enterText(find.byType(TextField), '2024-5');
expect(out, '2024-05-01');
});
});
}