import 'package:flutter_test/flutter_test.dart';
import 'package:meinweimar_city_guide/data/mock_data.dart';
import 'package:meinweimar_city_guide/models/ad_campaign.dart';
import 'package:meinweimar_city_guide/services/ad_service.dart';
import 'package:meinweimar_city_guide/services/tour_planner_service.dart';
import 'package:meinweimar_city_guide/services/partner_recommendation_service.dart';
import 'package:meinweimar_city_guide/models/partner.dart';
import 'package:meinweimar_city_guide/models/transport_mode.dart';
void main() {
test('ad service returns an active home campaign', () {
final campaign = AdService(MockData.adCampaigns).campaignFor(
AdPlacement.homeBanner,
now: DateTime(2026, 8, 20),
);
expect(campaign, isNotNull);
expect(campaign!.supports(AdPlacement.homeBanner), isTrue);
});
test('planner creates a non-empty route inside stop limits', () {
final tour = const TourPlannerService().buildTour(
availableMinutes: 90,
interests: {'Highlights'},
familyFriendly: false,
pois: MockData.pois,
transportMode: TransportMode.walking,
);
expect(tour.stops, isNotEmpty);
expect(tour.stops.length, lessThanOrEqualTo(8));
expect(tour.durationMinutes, 90);
});
test('family planner returns family-friendly tour result', () {
final tour = const TourPlannerService().buildTour(
availableMinutes: 90,
interests: {'Highlights'},
familyFriendly: true,
pois: MockData.pois,
transportMode: TransportMode.walking,
);
expect(tour.familyFriendly, isTrue);
expect(tour.stops, isNotEmpty);
});
test('partner recommendation prefers a nearby route partner', () {
final tour = MockData.tours.first;
final poi = MockData.poiById(tour.stops.first.poiId);
final recommendations = const PartnerRecommendationService().recommend(
partners: [
Partner(
id: 'test-partner',
title: 'Test Partner',
latitude: 50.9795,
longitude: 11.3295,
sponsored: true,
priority: 50,
goodForShortBreak: true,
),
],
tour: tour,
targetPoi: poi,
isTourEnd: false,
now: DateTime(2026, 8, 21, 12),
);
expect(recommendations, isNotEmpty);
expect(recommendations.first.partner.id, 'test-partner');
});
}

