feat(mobile): album management pages with qr share
Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
/// 相册时区格式化纯逻辑测试(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);
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user