import 'package:flutter_test/flutter_test.dart'; import 'package:hl_lieferservice/domain/entity/address.dart'; import 'package:hl_lieferservice/domain/entity/contact_source.dart'; import 'package:hl_lieferservice/domain/entity/customer.dart'; import 'package:hl_lieferservice/domain/entity/delivery.dart'; import 'package:hl_lieferservice/domain/entity/tour.dart'; import 'package:hl_lieferservice/domain/entity/tour_details.dart'; const _ordererAddress = Address( street: 'Neukirchener Str.', houseNumber: '73', postalCode: '41470', city: 'Neuss', country: 'DE', ); const _otherAddress = Address( street: 'Marienstr.', houseNumber: '3', postalCode: '41564', city: 'Kaarst', country: 'DE', ); ContactSource _source(ContactRole role, String name1, {String? name2}) => ContactSource( id: 'src-${role.name}', deliveryId: 'd1', role: role, anrede: 'Frau', name1: name1, name2: name2, ); TourDetails _details({ required Address deliveryAddress, List sources = const [], }) => TourDetails( tour: Tour( id: 't1', accountId: 414, date: DateTime(2026, 9, 25), syncedAt: DateTime(2026), ), deliveries: [ Delivery( id: 'd1', tourId: 't1', customerId: 'c1', contactPersonIds: const [], deliveryAddressSnapshot: deliveryAddress, erpBelegartId: 24, erpBelegnummer: 'V-1', state: DeliveryState.active, sortOrder: 1, prepaidAmount: 0, paymentMethodId: 'm-cash', items: const [], ), ], customers: const { 'c1': Customer( id: 'c1', name: 'Kraus Heike', erpCustomerId: 4711, address: _ordererAddress, ), }, contacts: const {}, articles: const {}, warehouses: const {}, notesByDeliveryId: const {}, creditsByDeliveryId: const {}, paymentsByDeliveryId: const {}, services: const [], serviceValuesByDeliveryId: const {}, contactSourcesByDeliveryId: {'d1': sources}, contactChannelsBySourceId: const {}, ); void main() { test('ohne eigene Lieferadresse ist der Besteller der Empfänger', () { final details = _details( deliveryAddress: _ordererAddress, sources: [_source(ContactRole.header, 'Kraus Heike')], ); final r = details.recipientOf(details.deliveries.single); expect(r.name, 'Kraus Heike'); expect(r.differsFromOrderer, isFalse); }); test('andere Person an anderer Adresse weicht ab', () { final details = _details( deliveryAddress: _otherAddress, sources: [ _source(ContactRole.header, 'Kraus Heike'), _source(ContactRole.delivery, 'Stülp', name2: 'Hans-Dieter'), ], ); final r = details.recipientOf(details.deliveries.single); // Name ohne Anrede, wie der Kundenname in den Listen. expect(r.name, 'Stülp Hans-Dieter'); expect(r.address, _otherAddress); expect(r.contact?.role, ContactRole.delivery); expect(r.differsFromOrderer, isTrue); }); test('andere Person an derselben Adresse weicht ab', () { final details = _details( deliveryAddress: _ordererAddress, sources: [ _source(ContactRole.header, 'Kraus Heike'), _source(ContactRole.delivery, 'Kraus Peter'), ], ); expect( details.recipientOf(details.deliveries.single).differsFromOrderer, isTrue, ); }); test('gleiche Person, nur andere Schreibweise, weicht nicht ab', () { final details = _details( deliveryAddress: const Address( street: 'neukirchener str.', houseNumber: '73', postalCode: '41470', city: 'NEUSS', country: 'DE', ), sources: [ _source(ContactRole.header, 'Kraus Heike'), _source(ContactRole.delivery, 'Kraus heike'), ], ); expect( details.recipientOf(details.deliveries.single).differsFromOrderer, isFalse, ); }); test('abweichende Adresse ohne eigenen Namen: Besteller-Name, Hinweis an', () { final details = _details(deliveryAddress: _otherAddress); final r = details.recipientOf(details.deliveries.single); expect(r.name, 'Kraus Heike'); expect(r.differsFromOrderer, isTrue); }); group('Adressanzeige', () { const base = Address( street: 'Am Sandberg', houseNumber: '15', postalCode: '41472', city: 'Neuss', country: 'Deutschland', addition: 'Holzheim', ); test('Deutschland erscheint nicht, Zusatz nur in der Listenzeile', () { expect(base.oneLine, 'Am Sandberg 15, 41472 Neuss'); expect(base.oneLineWithAddition, 'Am Sandberg 15, 41472 Neuss (Holzheim)'); }); test('Ausland wird angehängt', () { final belgien = base.copyWith(country: 'Belgien'); expect(belgien.foreignCountry, 'Belgien'); expect(belgien.oneLine, 'Am Sandberg 15, 41472 Neuss, Belgien'); }); test('Zusatz zählt nicht als abweichende Adresse', () { final details = _details( deliveryAddress: _ordererAddress.copyWith(addition: '3 Etage'), sources: [_source(ContactRole.header, 'Kraus Heike')], ); expect( details.recipientOf(details.deliveries.single).differsFromOrderer, isFalse, ); }); }); }