import 'package:flutter_test/flutter_test.dart'; import 'package:jamshalat_masjid_screen/core/enums.dart'; import 'package:jamshalat_masjid_screen/data/local/models.dart'; import 'package:jamshalat_masjid_screen/data/services/hijri_service.dart'; import 'package:jamshalat_masjid_screen/data/services/sync_service.dart'; void main() { group('PrayerName display labels', () { test('uses Jumat label for Friday dzuhur', () { expect( PrayerName.dzuhur.displayLabel(isFriday: true), 'JUMAT', ); expect( PrayerName.dzuhur.displayLabel(isFriday: false), 'Dzuhur', ); }); test('marks fardhu prayers correctly', () { expect(PrayerName.subuh.isFardhu, isTrue); expect(PrayerName.imsak.isFardhu, isFalse); }); }); group('AppSettings copyWith', () { test('preserves defaults and overrides selected fields', () { final settings = AppSettings(); final updated = settings.copyWith( masjidName: 'Masjid Raya', cityIdApi: '1301', iqomahDzuhur: 12, ); expect(updated.masjidName, 'Masjid Raya'); expect(updated.cityIdApi, '1301'); expect(updated.iqomahDzuhur, 12); expect(updated.masjidAddress, settings.masjidAddress); expect(updated.runningTexts, settings.runningTexts); }); }); group('HijriCalendarService parsing', () { test('extracts hijri label from MyQuran calendar response', () { final label = HijriCalendarService.parseHijriLabel({ 'status': true, 'data': { 'hijr': { 'today': 'Senin, 11 Syawal 1447 H', 'day': 11, 'monthName': 'Syawal', 'year': 1447, }, }, }); expect(label, '11 Syawal 1447 H'); }); }); group('ScheduleCacheStatus', () { test('derives cached date range and days left from stored schedules', () { final status = ScheduleCacheStatus.fromSchedules( [ DailyPrayerSchedule( date: '2026-03-01', imsak: '04:20', subuh: '04:30', terbit: '05:45', dhuha: '06:10', dzuhur: '11:55', ashar: '15:10', maghrib: '17:58', isya: '19:05', ), DailyPrayerSchedule( date: '2026-04-30', imsak: '04:19', subuh: '04:29', terbit: '05:44', dhuha: '06:09', dzuhur: '11:54', ashar: '15:09', maghrib: '17:57', isya: '19:04', ), ], DateTime(2026, 3, 30), ); expect(status.hasData, isTrue); expect(status.startDate, DateTime(2026, 3, 1)); expect(status.endDate, DateTime(2026, 4, 30)); expect(status.cachedDays, 2); expect(status.daysUntilRefresh, 31); }); }); }