feat: Implement trip invitation functionality and notification handling

- Added TripInvitationRepository for managing trip invitations.
- Created TripInvitation model with serialization methods.
- Implemented notification payload parser for handling FCM notifications.
- Enhanced NotificationService to manage trip invitations and related actions.
- Updated UserRepository to include user search functionality.
- Modified AuthRepository to store multiple FCM tokens.
- Added tests for trip invitation logic and notification payload parsing.
- Updated pubspec.yaml and pubspec.lock for dependency management.
This commit is contained in:
Van Leemput Dayron
2026-03-13 13:54:47 +01:00
parent e665dea82a
commit 3215a990d1
27 changed files with 1961 additions and 321 deletions

View File

@@ -0,0 +1,49 @@
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:travel_mate/models/trip_invitation.dart';
void main() {
group('TripInvitation', () {
test('toMap serializes required fields', () {
final invitation = TripInvitation(
id: 'id_1',
tripId: 'trip_1',
tripTitle: 'Weekend Rome',
inviterId: 'user_a',
inviterName: 'Alice',
inviteeId: 'user_b',
inviteeEmail: 'bob@example.com',
createdAt: DateTime(2026, 3, 3),
);
final map = invitation.toMap();
expect(map['tripId'], 'trip_1');
expect(map['status'], 'pending');
expect(map['respondedAt'], isNull);
expect(map['createdAt'], isA<Timestamp>());
});
test('copyWith updates selected values', () {
final invitation = TripInvitation(
id: 'id_1',
tripId: 'trip_1',
tripTitle: 'Trip',
inviterId: 'user_a',
inviterName: 'Alice',
inviteeId: 'user_b',
inviteeEmail: 'bob@example.com',
createdAt: DateTime(2026, 3, 3),
);
final updated = invitation.copyWith(
status: 'accepted',
respondedAt: DateTime(2026, 3, 4),
);
expect(updated.status, 'accepted');
expect(updated.respondedAt, DateTime(2026, 3, 4));
expect(updated.tripId, invitation.tripId);
});
});
}