import 'package:flutter_test/flutter_test.dart';
import 'package:mocktail/mocktail.dart';
import 'package:comwell_key_app/overview/models/booking.dart';
import 'package:comwell_key_app/overview/models/bookings.dart';
import 'package:comwell_key_app/overview/repository/overview_repository.dart';
class MockOverviewRepository extends Mock implements OverviewRepository {}
void main() {
late OverviewRepository overviewRepository;
setUp(() {
overviewRepository = MockOverviewRepository();
});
group('OverviewRepository', () {
test('fetchAllBookingsForUser returns Bookings', () async {
const userId = '1';
final bookings = Bookings(
current: [
Booking(
id: '1',
firstName: 'John',
lastName: 'Doe',
reservationStatus: ReservationStatus.newreservation,
roomNumber: '101',
startDate: DateTime.now(),
endDate: DateTime.now().add(const Duration(days: 1)),
confirmationNumber: "confirmationNumber",
image: 'image_url',
hotelName: 'Hotel Name',
roomType: 'Deluxe',
children: 2,
adults: 2,
hotelCode: 'H001',
bookerFirstName: "John",
bookerLastName: "Doe",
isPrimaryGuest: true,
bookingDate: DateTime.now(),
digitalCard: true,
balance: 100,
maskedCardNumber: "1234567890",
addOnItems: const []
),
],
past: const [],
cancelled: const [],
);
when(() => overviewRepository.fetchAllBookingsForUser())
.thenAnswer((_) async => bookings);
final result = await overviewRepository.fetchAllBookingsForUser();
expect(result, bookings);
verify(() => overviewRepository.fetchAllBookingsForUser())
.called(1);
});
test('findBooking returns Booking', () async {
const bookingReference = '1';
const lastName = 'Doe';
final booking = Booking(
id: '1',
roomNumber: '101',
startDate: DateTime.now(),
endDate: DateTime.now().add(const Duration(days: 1)),
image: 'image_url',
hotelName: 'Hotel Name',
roomType: 'Deluxe',
confirmationNumber: "confirmationNumber",
children: 2,
adults: 2,
hotelCode: 'H001',
firstName: "John",
lastName: "Doe",
bookerFirstName: "John",
bookerLastName: "Doe",
isPrimaryGuest: true,
bookingDate: DateTime.now(),
digitalCard: true,
balance: 100,
reservationStatus: ReservationStatus.newreservation,
maskedCardNumber: "1234567890",
addOnItems: const []
);
when(() => overviewRepository.findBooking(bookingReference, lastName))
.thenAnswer((_) async => booking);
final result =
await overviewRepository.findBooking(bookingReference, lastName);
expect(result, booking);
verify(() => overviewRepository.findBooking(bookingReference, lastName))
.called(1);
});
test('findBooking returns null when booking is not found', () async {
const bookingReference = '1';
const lastName = 'Doe';
when(() => overviewRepository.findBooking(bookingReference, lastName))
.thenAnswer((_) async => null);
final result =
await overviewRepository.findBooking(bookingReference, lastName);
expect(result, isNull);
verify(() => overviewRepository.findBooking(bookingReference, lastName))
.called(1);
});
});
}