merge: incorporate main's safearea/auto-order/vacaciones fixes
This commit is contained in:
@@ -614,4 +614,144 @@ void main() {
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
group('fix vacaciones-delete: el editor ofrece una accion de eliminar solo '
|
||||
'al editar un rango existente, reusando _confirmarEliminarRango y '
|
||||
'eliminarRangoVacaciones exactamente como el swipe', () {
|
||||
testWidgets(
|
||||
'creando un rango NUEVO (CTA "Anadir rango"), el editor NO muestra '
|
||||
'una accion de eliminar -- no hay nada que borrar todavia',
|
||||
(tester) async {
|
||||
final estado = await _crearEstado();
|
||||
addTearDown(estado.dispose);
|
||||
|
||||
await tester.pumpWidget(_buildScreen(estado));
|
||||
await _pumpEstable(tester);
|
||||
final l10n = AppLocalizations.of(
|
||||
tester.element(find.byType(PantallaVacaciones)),
|
||||
);
|
||||
|
||||
await tester.tap(find.text(l10n.addVacationRangeCta));
|
||||
await _pumpEstable(tester);
|
||||
|
||||
expect(find.text(l10n.newVacationRangeTitle), findsOneWidget);
|
||||
expect(
|
||||
find.byKey(const ValueKey('vacation-delete-button')),
|
||||
findsNothing,
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
testWidgets('editando un rango EXISTENTE (tap en su tarjeta), el editor SI '
|
||||
'muestra una accion de eliminar junto al boton de guardar', (
|
||||
tester,
|
||||
) async {
|
||||
final estado = await _crearEstado(
|
||||
vacaciones: [
|
||||
RangoVacaciones(
|
||||
id: 'f2',
|
||||
nombre: 'Verano',
|
||||
inicio: _hoyDia.add(const Duration(days: 20)),
|
||||
fin: _hoyDia.add(const Duration(days: 25)),
|
||||
),
|
||||
],
|
||||
);
|
||||
addTearDown(estado.dispose);
|
||||
|
||||
await tester.pumpWidget(_buildScreen(estado));
|
||||
await _pumpEstable(tester);
|
||||
|
||||
await tester.tap(find.byKey(const ValueKey('vacaciones-tarjeta-f2')));
|
||||
await _pumpEstable(tester);
|
||||
|
||||
final l10n = AppLocalizations.of(
|
||||
tester.element(find.byType(PantallaVacaciones)),
|
||||
);
|
||||
expect(find.text(l10n.editVacationRangeTitle), findsOneWidget);
|
||||
expect(
|
||||
find.byKey(const ValueKey('vacation-delete-button')),
|
||||
findsOneWidget,
|
||||
);
|
||||
});
|
||||
|
||||
testWidgets(
|
||||
'tocar eliminar en el editor pide confirmacion (misma que el swipe); '
|
||||
'cancelar conserva el rango y el editor sigue abierto',
|
||||
(tester) async {
|
||||
final estado = await _crearEstado(
|
||||
vacaciones: [
|
||||
RangoVacaciones(
|
||||
id: 'f2',
|
||||
nombre: 'Verano',
|
||||
inicio: _hoyDia.add(const Duration(days: 20)),
|
||||
fin: _hoyDia.add(const Duration(days: 25)),
|
||||
),
|
||||
],
|
||||
);
|
||||
addTearDown(estado.dispose);
|
||||
|
||||
await tester.pumpWidget(_buildScreen(estado));
|
||||
await _pumpEstable(tester);
|
||||
final l10n = AppLocalizations.of(
|
||||
tester.element(find.byType(PantallaVacaciones)),
|
||||
);
|
||||
|
||||
await tester.tap(find.byKey(const ValueKey('vacaciones-tarjeta-f2')));
|
||||
await _pumpEstable(tester);
|
||||
|
||||
await tester.tap(find.byKey(const ValueKey('vacation-delete-button')));
|
||||
await _pumpEstable(tester);
|
||||
expect(find.text(l10n.vacationDeleteConfirmTitle), findsOneWidget);
|
||||
|
||||
await tester.tap(find.text(l10n.cancelAction));
|
||||
await _pumpEstable(tester);
|
||||
|
||||
expect(estado.vacaciones, hasLength(1));
|
||||
expect(find.text(l10n.editVacationRangeTitle), findsOneWidget);
|
||||
},
|
||||
);
|
||||
|
||||
testWidgets('tocar eliminar en el editor y confirmar llama a '
|
||||
'eliminarRangoVacaciones y cierra el editor (mismo efecto que el '
|
||||
'swipe, sin pasar por _guardar)', (tester) async {
|
||||
final estado = await _crearEstado(
|
||||
vacaciones: [
|
||||
RangoVacaciones(
|
||||
id: 'f2',
|
||||
nombre: 'Verano',
|
||||
inicio: _hoyDia.add(const Duration(days: 20)),
|
||||
fin: _hoyDia.add(const Duration(days: 25)),
|
||||
),
|
||||
],
|
||||
);
|
||||
addTearDown(estado.dispose);
|
||||
|
||||
await tester.pumpWidget(_buildScreen(estado));
|
||||
await _pumpEstable(tester);
|
||||
final l10n = AppLocalizations.of(
|
||||
tester.element(find.byType(PantallaVacaciones)),
|
||||
);
|
||||
|
||||
await tester.tap(find.byKey(const ValueKey('vacaciones-tarjeta-f2')));
|
||||
await _pumpEstable(tester);
|
||||
|
||||
await tester.tap(find.byKey(const ValueKey('vacation-delete-button')));
|
||||
await _pumpEstable(tester);
|
||||
expect(find.text(l10n.vacationDeleteConfirmTitle), findsOneWidget);
|
||||
|
||||
// `find.widgetWithText(FilledButton, ...)`, not a bare
|
||||
// `find.text(...)`: the sheet's own OutlinedButton delete action
|
||||
// (same "Eliminar" label) is still in the tree behind the dialog,
|
||||
// so a bare text finder would ambiguously match both.
|
||||
await tester.tap(find.widgetWithText(FilledButton, l10n.deleteAction));
|
||||
await _pumpEstable(tester);
|
||||
|
||||
expect(estado.vacaciones, isEmpty);
|
||||
expect(
|
||||
find.text(l10n.editVacationRangeTitle),
|
||||
findsNothing,
|
||||
reason: 'the sheet must pop, exactly like a successful _guardar',
|
||||
);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user