Files
kryz-go-flutter/test/time_formatter_test.dart

107 lines
3.0 KiB
Dart

import 'package:flutter_test/flutter_test.dart';
import 'package:intl/intl.dart';
import 'package:kryz_go_flutter/time_formatter.dart';
import 'package:timezone/data/latest.dart' as tz;
import 'package:timezone/timezone.dart' as tz;
void main() {
setUpAll(() {
tz.initializeTimeZones();
});
group('formatStartingTime', () {
test('returns local display from source timezone naive server time', () {
const String sourceTime = '2026-05-14 20:00:00';
const String sourceZone = 'America/Los_Angeles';
final tz.TZDateTime source = tz.TZDateTime(
tz.getLocation(sourceZone),
2026,
5,
14,
20,
);
final String expected = DateFormat('jm').format(
DateTime.fromMillisecondsSinceEpoch(
source.millisecondsSinceEpoch,
isUtc: true,
).toLocal(),
);
expect(
formatStartingTime(sourceTime, sourceTimezone: sourceZone),
expected,
);
});
test('falls back to parsed local time when timezone is invalid', () {
final DateTime parsed = DateTime.parse('2026-05-14 20:00:00');
final String expected = DateFormat('jm').format(parsed);
expect(
formatStartingTime(
'2026-05-14 20:00:00',
sourceTimezone: 'Invalid/Timezone',
),
expected,
);
});
test('returns placeholder for invalid input', () {
expect(formatStartingTime('not-a-time'), '--:--');
expect(formatStartingTime(null), '--:--');
});
test('does not double-convert timestamps with explicit UTC designator', () {
const String utcStamp = '2026-05-15T03:00:00Z';
final String expected = DateFormat('jm').format(DateTime.parse(utcStamp).toLocal());
expect(
formatStartingTime(
utcStamp,
sourceTimezone: 'America/Los_Angeles',
),
expected,
);
});
test('keeps wall-clock time when local matches source zone for naive input', () {
const String sourceTime = '2026-05-14 20:00:00';
const String sourceZone = 'America/Los_Angeles';
final tz.TZDateTime source = tz.TZDateTime(
tz.getLocation(sourceZone),
2026,
5,
14,
20,
);
final String expected = DateFormat('jm').format(
DateTime.fromMillisecondsSinceEpoch(
source.millisecondsSinceEpoch,
isUtc: true,
).toLocal(),
);
expect(
formatStartingTime(sourceTime, sourceTimezone: sourceZone),
expected,
);
});
});
group('formatTimeWindow', () {
test('returns mm:ss style duration from server times', () {
expect(
formatTimeWindow('2026-05-15 05:18:46.000000', '2026-05-15 05:23:21.000000'),
'04:35',
);
});
test('returns placeholder for invalid windows', () {
expect(formatTimeWindow('nope', '2026-05-15 05:23:21.000000'), '--:--');
expect(formatTimeWindow(null, '2026-05-15 05:23:21.000000'), '--:--');
});
});
}