Insert PantallaTutorialAyuda.mostrarSiProcede between the welcome screen and the recurring what's-new dialog in _mostrarFlujoPrimerLanzamiento, so the carousel shows once on every install -- fresh AND existing installs upgrading to this version -- via its own independent one-time flag, without racing either surface.
73 lines
2.8 KiB
Dart
73 lines
2.8 KiB
Dart
import 'dart:io';
|
|
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
|
|
/// S1 (Tier 1 visual fidelity): the prototype (`t4`) never draws a global
|
|
/// `AppBar` — every root owns its own 56px title row instead (see
|
|
/// `PluriRootHeader` and `root_header_wiring_test.dart`). `app.dart` used to
|
|
/// wrap every tab in `PluriWaveScaffold(appBar: AppBar(...))`; this is a
|
|
/// fast source-level regression guard for that removal, since the widget
|
|
/// under it (`_PaginaPrincipal`) is library-private and constructs real
|
|
/// platform-backed services, so it cannot be safely widget-tested here.
|
|
void main() {
|
|
test('app.dart no longer constructs a global Material AppBar', () {
|
|
final source = File('lib/app.dart').readAsStringSync();
|
|
expect(
|
|
source.contains('AppBar('),
|
|
isFalse,
|
|
reason:
|
|
'the prototype has no global app bar — each root draws its own '
|
|
'PluriRootHeader inside its content instead',
|
|
);
|
|
});
|
|
|
|
test('the first-launch sequence runs the welcome screen, then the tutorial '
|
|
'carousel, then the recurring what-is-new dialog, in that order', () {
|
|
// `_PaginaPrincipal` is library-private and its
|
|
// `_mostrarFlujoPrimerLanzamiento` constructs real platform-backed
|
|
// services, so it cannot be safely widget-tested here (same
|
|
// constraint as the AppBar guard above). This is a fast source-level
|
|
// ordering guard instead: PantallaBienvenida.mostrarSiProcede must
|
|
// run before PantallaTutorialAyuda.mostrarSiProcede, which must run
|
|
// before the unrelated, pre-existing _mostrarOnboardingInicial() call
|
|
// -- so the tutorial shows once on every launch sequence (fresh
|
|
// installs AND existing installs upgrading to this version) without
|
|
// ever racing the welcome screen or the what's-new dialog.
|
|
final source = File('lib/app.dart').readAsStringSync();
|
|
|
|
final indiceBienvenida = source.indexOf(
|
|
'PantallaBienvenida.mostrarSiProcede',
|
|
);
|
|
final indiceTutorial = source.indexOf(
|
|
'PantallaTutorialAyuda.mostrarSiProcede',
|
|
);
|
|
final indiceOnboarding = source.indexOf('_mostrarOnboardingInicial()');
|
|
|
|
expect(
|
|
indiceBienvenida,
|
|
greaterThanOrEqualTo(0),
|
|
reason: 'PantallaBienvenida.mostrarSiProcede must still be called',
|
|
);
|
|
expect(
|
|
indiceTutorial,
|
|
greaterThanOrEqualTo(0),
|
|
reason: 'PantallaTutorialAyuda.mostrarSiProcede must be wired in',
|
|
);
|
|
expect(
|
|
indiceOnboarding,
|
|
greaterThanOrEqualTo(0),
|
|
reason: '_mostrarOnboardingInicial() must still be called',
|
|
);
|
|
expect(
|
|
indiceBienvenida,
|
|
lessThan(indiceTutorial),
|
|
reason: 'the welcome screen must run before the tutorial carousel',
|
|
);
|
|
expect(
|
|
indiceTutorial,
|
|
lessThan(indiceOnboarding),
|
|
reason: 'the tutorial carousel must run before the what-is-new dialog',
|
|
);
|
|
});
|
|
}
|