fix: seed partial overlap timeline tasks
This commit is contained in:
parent
4f19860054
commit
acee1da264
2 changed files with 84 additions and 1 deletions
|
|
@ -229,6 +229,48 @@ class DemoSchedulerComposition {
|
||||||
completedAt: _instant(date, 16, 20),
|
completedAt: _instant(date, 16, 20),
|
||||||
createdAt: createdAt,
|
createdAt: createdAt,
|
||||||
),
|
),
|
||||||
|
_task(
|
||||||
|
id: 'sort-mail',
|
||||||
|
title: 'Sort mail',
|
||||||
|
type: TaskType.flexible,
|
||||||
|
status: TaskStatus.planned,
|
||||||
|
date: date,
|
||||||
|
startHour: 14,
|
||||||
|
startMinute: 40,
|
||||||
|
endHour: 15,
|
||||||
|
endMinute: 20,
|
||||||
|
reward: RewardLevel.low,
|
||||||
|
difficulty: DifficultyLevel.easy,
|
||||||
|
createdAt: createdAt,
|
||||||
|
),
|
||||||
|
_task(
|
||||||
|
id: 'start-laundry',
|
||||||
|
title: 'Start laundry',
|
||||||
|
type: TaskType.flexible,
|
||||||
|
status: TaskStatus.planned,
|
||||||
|
date: date,
|
||||||
|
startHour: 15,
|
||||||
|
startMinute: 0,
|
||||||
|
endHour: 15,
|
||||||
|
endMinute: 40,
|
||||||
|
reward: RewardLevel.medium,
|
||||||
|
difficulty: DifficultyLevel.medium,
|
||||||
|
createdAt: createdAt,
|
||||||
|
),
|
||||||
|
_task(
|
||||||
|
id: 'water-plants',
|
||||||
|
title: 'Water plants',
|
||||||
|
type: TaskType.flexible,
|
||||||
|
status: TaskStatus.planned,
|
||||||
|
date: date,
|
||||||
|
startHour: 15,
|
||||||
|
startMinute: 20,
|
||||||
|
endHour: 16,
|
||||||
|
endMinute: 0,
|
||||||
|
reward: RewardLevel.medium,
|
||||||
|
difficulty: DifficultyLevel.medium,
|
||||||
|
createdAt: createdAt,
|
||||||
|
),
|
||||||
_task(
|
_task(
|
||||||
id: 'pay-bill',
|
id: 'pay-bill',
|
||||||
title: 'Pay bill',
|
title: 'Pay bill',
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,9 @@ void main() {
|
||||||
);
|
);
|
||||||
expect(find.text('Clean coffee maker'), findsOneWidget);
|
expect(find.text('Clean coffee maker'), findsOneWidget);
|
||||||
expect(find.text('Cleaned kitchen counter'), findsNWidgets(2));
|
expect(find.text('Cleaned kitchen counter'), findsNWidgets(2));
|
||||||
|
expect(find.text('Sort mail'), findsOneWidget);
|
||||||
|
expect(find.text('Start laundry'), findsOneWidget);
|
||||||
|
expect(find.text('Water plants'), findsOneWidget);
|
||||||
expect(find.text('Pay bill'), findsOneWidget);
|
expect(find.text('Pay bill'), findsOneWidget);
|
||||||
expect(find.text('Doctor appointment'), findsOneWidget);
|
expect(find.text('Doctor appointment'), findsOneWidget);
|
||||||
expect(find.text('Free Slot'), findsOneWidget);
|
expect(find.text('Free Slot'), findsOneWidget);
|
||||||
|
|
@ -57,6 +60,9 @@ void main() {
|
||||||
final data = TodayScreenData.fromTodayState(state);
|
final data = TodayScreenData.fromTodayState(state);
|
||||||
|
|
||||||
expect(_kindFor(data, 'clean-coffee-maker'), TaskVisualKind.flexible);
|
expect(_kindFor(data, 'clean-coffee-maker'), TaskVisualKind.flexible);
|
||||||
|
expect(_kindFor(data, 'sort-mail'), TaskVisualKind.flexible);
|
||||||
|
expect(_kindFor(data, 'start-laundry'), TaskVisualKind.flexible);
|
||||||
|
expect(_kindFor(data, 'water-plants'), TaskVisualKind.flexible);
|
||||||
expect(_kindFor(data, 'pay-bill'), TaskVisualKind.required);
|
expect(_kindFor(data, 'pay-bill'), TaskVisualKind.required);
|
||||||
expect(_kindFor(data, 'doctor-appointment'), TaskVisualKind.appointment);
|
expect(_kindFor(data, 'doctor-appointment'), TaskVisualKind.appointment);
|
||||||
expect(_kindFor(data, 'free-slot'), TaskVisualKind.freeSlot);
|
expect(_kindFor(data, 'free-slot'), TaskVisualKind.freeSlot);
|
||||||
|
|
@ -159,7 +165,7 @@ void main() {
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
testWidgets('timeline reuses empty overlap lanes for chained tasks', (
|
testWidgets('timeline splits partial overlaps and reuses empty lanes', (
|
||||||
tester,
|
tester,
|
||||||
) async {
|
) async {
|
||||||
await _pumpConstrainedWidget(
|
await _pumpConstrainedWidget(
|
||||||
|
|
@ -210,6 +216,41 @@ void main() {
|
||||||
expect(leftReused.right, lessThan(rightMiddle.left));
|
expect(leftReused.right, lessThan(rightMiddle.left));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
testWidgets('seeded demo partial overlaps pack into two lanes', (
|
||||||
|
tester,
|
||||||
|
) async {
|
||||||
|
final state = await _readSeededToday();
|
||||||
|
final data = TodayScreenData.fromTodayState(state);
|
||||||
|
|
||||||
|
await _pumpConstrainedWidget(
|
||||||
|
tester,
|
||||||
|
size: const Size(900, 620),
|
||||||
|
child: TimelineView(
|
||||||
|
cards: data.cards,
|
||||||
|
range: data.timelineRange,
|
||||||
|
now: () => DateTime(2025, 5, 20, 15, 20),
|
||||||
|
onCardSelected: (_) {},
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(tester.takeException(), isNull);
|
||||||
|
|
||||||
|
final sortMail = tester.getRect(find.byKey(const ValueKey('sort-mail')));
|
||||||
|
final startLaundry = tester.getRect(
|
||||||
|
find.byKey(const ValueKey('start-laundry')),
|
||||||
|
);
|
||||||
|
final waterPlants = tester.getRect(
|
||||||
|
find.byKey(const ValueKey('water-plants')),
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(startLaundry.left, greaterThan(sortMail.left));
|
||||||
|
expect(waterPlants.left, closeTo(sortMail.left, 1));
|
||||||
|
expect(sortMail.width, closeTo(startLaundry.width, 1));
|
||||||
|
expect(waterPlants.width, closeTo(sortMail.width, 1));
|
||||||
|
expect(sortMail.right, lessThan(startLaundry.left));
|
||||||
|
expect(waterPlants.right, lessThan(startLaundry.left));
|
||||||
|
});
|
||||||
|
|
||||||
testWidgets('top bar controls scale inside a compact header width', (
|
testWidgets('top bar controls scale inside a compact header width', (
|
||||||
tester,
|
tester,
|
||||||
) async {
|
) async {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue