- Address.addition aus dem Backend (ERP-Freitext, praktisch Ortsteil, Etage oder Hinweis); API-Client neu generiert. - Listen (Sortieren, Beladen, Liefer-Übersicht): Adresse mit Zusatz in Klammern, z. B. „… 41472 Neuss (Holzheim)". - Lieferdetails: „Zusatz: …" unter der Anschrift von Empfänger und Besteller; Land nur außerhalb Deutschlands. - Maps-Suche weiter ohne Zusatz (sonst stört „3 Etage" die Suche). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
189 lines
5.1 KiB
Dart
189 lines
5.1 KiB
Dart
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<ContactSource> 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,
|
|
);
|
|
});
|
|
});
|
|
}
|