feat: add table_calendar package and CalendarEvent model with tests
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import 'package:fabled_app/data/models/calendar_event.dart';
|
||||
import 'package:fabled_app/data/api/voice_api.dart';
|
||||
import 'package:fabled_app/providers/voice_provider.dart';
|
||||
import 'package:fabled_app/data/models/knowledge_item.dart';
|
||||
@@ -190,6 +191,65 @@ void main() {
|
||||
});
|
||||
});
|
||||
|
||||
group('CalendarEvent.fromJson', () {
|
||||
test('parses all fields', () {
|
||||
final json = {
|
||||
'id': 10,
|
||||
'title': 'Team meeting',
|
||||
'start_dt': '2026-04-07T09:00:00+00:00',
|
||||
'end_dt': '2026-04-07T10:00:00+00:00',
|
||||
'all_day': false,
|
||||
'description': 'Weekly sync',
|
||||
'location': 'Room 4',
|
||||
'color': '#6366F1',
|
||||
'recurrence': 'FREQ=WEEKLY',
|
||||
'project_id': 3,
|
||||
'reminder_minutes': 15,
|
||||
};
|
||||
final event = CalendarEvent.fromJson(json);
|
||||
expect(event.id, equals(10));
|
||||
expect(event.title, equals('Team meeting'));
|
||||
expect(event.startDt, equals(DateTime.parse('2026-04-07T09:00:00+00:00')));
|
||||
expect(event.endDt, equals(DateTime.parse('2026-04-07T10:00:00+00:00')));
|
||||
expect(event.allDay, isFalse);
|
||||
expect(event.description, equals('Weekly sync'));
|
||||
expect(event.location, equals('Room 4'));
|
||||
expect(event.color, equals('#6366F1'));
|
||||
expect(event.recurrence, equals('FREQ=WEEKLY'));
|
||||
expect(event.projectId, equals(3));
|
||||
expect(event.reminderMinutes, equals(15));
|
||||
});
|
||||
|
||||
test('handles null optional fields', () {
|
||||
final json = {
|
||||
'id': 11,
|
||||
'title': 'Birthday',
|
||||
'start_dt': '2026-05-01T00:00:00+00:00',
|
||||
'end_dt': null,
|
||||
'all_day': true,
|
||||
'description': '',
|
||||
'location': '',
|
||||
'color': '',
|
||||
'recurrence': null,
|
||||
'project_id': null,
|
||||
'reminder_minutes': null,
|
||||
};
|
||||
final event = CalendarEvent.fromJson(json);
|
||||
expect(event.endDt, isNull);
|
||||
expect(event.allDay, isTrue);
|
||||
expect(event.recurrence, isNull);
|
||||
expect(event.projectId, isNull);
|
||||
expect(event.reminderMinutes, isNull);
|
||||
});
|
||||
});
|
||||
|
||||
group('dateOnly', () {
|
||||
test('strips time from datetime', () {
|
||||
final dt = DateTime(2026, 4, 7, 14, 30, 45);
|
||||
expect(dateOnly(dt), equals(DateTime(2026, 4, 7)));
|
||||
});
|
||||
});
|
||||
|
||||
group('BriefingFeed.fromJson', () {
|
||||
test('parses all fields', () {
|
||||
final json = {
|
||||
|
||||
Reference in New Issue
Block a user