Files
photo-live/apps/mobile/test/features/album_format_test.dart
T

51 lines
1.8 KiB
Dart
Raw Normal View History

/// 相册时区格式化纯逻辑测试(P3 计划 Task 4)。
///
/// 覆盖:UTC 瞬间 → Asia/Shanghai 墙钟展示、无效时区回退 UTC、
/// 墙钟 → UTC 提交往返一致、IANA 时区名校验。
library;
import 'package:flutter_test/flutter_test.dart';
import 'package:intl/date_symbol_data_local.dart';
import 'package:photo_live/features/albums/album_format.dart';
void main() {
setUpAll(initializeDateFormatting);
test('UTC 瞬间按 Asia/Shanghai 展示(intl 格式化)', () {
final utc = DateTime.utc(2026, 9, 18, 6, 30);
expect(formatAlbumDateTime(utc, 'Asia/Shanghai', 'en'), '2026/9/18 14:30');
});
test('非 Asia/Shanghai 时区亦按各自墙钟展示(America/New_York)', () {
final utc = DateTime.utc(2026, 9, 18, 6, 30);
// 9 月为纽约夏令时 UTC-4 → 02:30。
expect(
formatAlbumDateTime(utc, 'America/New_York', 'en'),
'2026/9/18 02:30',
);
});
test('无效时区回退 UTC 展示', () {
final utc = DateTime.utc(2026, 9, 18, 6, 30);
expect(formatAlbumDateTime(utc, 'Mars/Olympus', 'en'), '2026/9/18 06:30');
});
test('墙钟 → UTC 往返一致(表单提交与回显)', () {
final naive = DateTime(2026, 9, 18, 14, 30);
final utc = albumWallClockToUtc(naive, 'Asia/Shanghai');
expect(utc.toUtc(), DateTime.utc(2026, 9, 18, 6, 30));
final zoned = tryToAlbumZone(utc, 'Asia/Shanghai');
expect(zoned, isNotNull);
expect(zoned!.hour, 14);
expect(zoned.minute, 30);
});
test('isValidTimezone:空/非法拒绝,合法通过', () {
expect(isValidTimezone(''), isFalse);
expect(isValidTimezone(' '), isFalse);
expect(isValidTimezone('Not/AZone'), isFalse);
expect(isValidTimezone('Asia/Shanghai'), isTrue);
expect(isValidTimezone('UTC'), isTrue);
});
}