Files
doormile_milderapp/test/home_gutter_test.dart
2026-08-28 11:13:15 +05:30

130 lines
4.6 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import 'package:flutter/material.dart';
import 'package:lucide_icons_flutter/lucide_icons.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:get/get.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:miler/data/service_profile.dart';
import 'package:miler/views/Dashboard/home/trip.dart';
import 'package:miler/views/Dashboard/home/trip_brief_strip.dart';
import 'package:miler/views/Dashboard/home/trip_card.dart';
/// ── Home stands on one column ──
///
/// The trip brief and the route are separate widgets with separate paddings,
/// and they drifted: the brief padded 12 while the route padded 16, so the
/// two header rows the rider reads first — "N stops left" and "TODAY'S RUN" —
/// sat four points apart, directly above a list of stop cards that were all on
/// the wider one. Four points is the worst distance for two edges to be apart:
/// far enough to see, near enough to read as a mistake rather than a margin.
///
/// A comment in the brief already asserted the two shared a column. It had
/// been wrong for as long as it had been there, which is the argument for
/// pinning it here instead: a number two files apart from the number it must
/// equal only stays equal if something checks.
void main() {
Map<String, dynamic> order(String id, String customer) => {
'orderid': id,
'tripid': 'T1',
'type': 'delivery',
'pickupcustomer': customer,
'pickupaddress': '12, SNS Colony, Peelamedu, Coimbatore 641004',
'dropaddress': '12, SNS Colony, Peelamedu, Coimbatore 641004',
'orderstatus': 'new',
'kitchenid': 'K1',
'kitchenname': 'Vidhya Kitchen',
'pickupcontactno': '9787698259',
'Quantity': 1,
'expected_pickup_time': DateTime.now()
.add(const Duration(minutes: 20))
.toIso8601String(),
'pickuplat': 11.0368,
'pickuplon': 76.9758,
'droplat': 11.0408,
'droplon': 76.9798,
};
Future<void> pump(WidgetTester tester) async {
ServiceProfile.setActive(ServiceProfile.milkMan);
SharedPreferences.setMockInitialValues({'userid': 1});
tester.view.physicalSize = const Size(390 * 3, 1400 * 3);
tester.view.devicePixelRatio = 3.0;
addTearDown(tester.view.reset);
addTearDown(Get.reset);
final trip = Trip.groupIntoTrips([
order('K1-1', 'Joe Mathew'),
order('K1-2', 'Arun Prakash'),
]).first;
await tester.pumpWidget(
ScreenUtilInit(
designSize: const Size(390, 1400),
builder: (_, _) => MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
body: SingleChildScrollView(
child: TripCard(
trip: trip,
riderLat: 11.0168,
riderLng: 76.9558,
acceptedIds: const {},
rejectedIds: const {},
selectedIds: const {},
collectedIds: const {},
onToggleSelect: (_) {},
onSelectAll: (_) {},
onStopTap: (_) {},
onCallStop: (_) {},
onNavigateStop: (_) {},
onAdvanceStop: (_) {},
onViewRoute: () {},
onPreviewGroup: (_) {},
onContinueStop: (_) {},
),
),
),
),
),
);
await tester.pump();
for (var i = 0; i < 25; i++) {
await tester.pump(const Duration(milliseconds: 80));
}
}
testWidgets('the trip brief and the route share one left edge', (
tester,
) async {
await pump(tester);
// ── Measured on the metrics, not on the headline ──
//
// The headline is centred now: the card is symmetrical — a title over a
// full-width bar — and a left-aligned headline over a centred bar reads as
// two elements that failed to line up. So the brief's left edge is the one
// its *left-aligned* content sits on, which is the metric grid under the
// bar. That is the column the route below has to agree with.
// The grid's first ink is the icon tile, not the word beside it.
final brief = tester.getRect(
find
.ancestor(
of: find.byIcon(LucideIcons.clock),
matching: find.byType(Container),
)
.first,
);
final route = tester.getRect(find.text('TODAY’S RUN'));
expect(
brief.left,
route.left,
reason:
'Home\'s two header rows must start on the same column. '
'brief=${brief.left} route=${route.left} — check the horizontal '
'padding in trip_brief_strip.dart against trip_card._timeline().',
);
});
}