feat(tokens): add design tokens, type scale, push scaffold, and root nav state
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:pluriwave/estado/estado_navegacion.dart';
|
||||
|
||||
/// Design ADR-8: EstadoNavegacionRaiz is the single source of truth for
|
||||
/// which of the 5 root tabs is active. Switching roots never pushes a
|
||||
/// route — this is a plain ChangeNotifier update.
|
||||
void main() {
|
||||
group('RaizPluriWave', () {
|
||||
test('declaration order is the tab order (0-indexed)', () {
|
||||
expect(RaizPluriWave.escuchar.index, 0);
|
||||
expect(RaizPluriWave.buscar.index, 1);
|
||||
expect(RaizPluriWave.favoritos.index, 2);
|
||||
expect(RaizPluriWave.alarmas.index, 3);
|
||||
expect(RaizPluriWave.ajustes.index, 4);
|
||||
expect(RaizPluriWave.values.length, 5);
|
||||
});
|
||||
});
|
||||
|
||||
group('EstadoNavegacionRaiz', () {
|
||||
test('starts on escuchar', () {
|
||||
final estado = EstadoNavegacionRaiz();
|
||||
expect(estado.actual, RaizPluriWave.escuchar);
|
||||
expect(estado.indice, 0);
|
||||
});
|
||||
|
||||
test('irA transitions to the requested root', () {
|
||||
final estado = EstadoNavegacionRaiz();
|
||||
|
||||
estado.irA(RaizPluriWave.favoritos);
|
||||
|
||||
expect(estado.actual, RaizPluriWave.favoritos);
|
||||
});
|
||||
|
||||
test('indice mirrors the enum declaration order after a transition', () {
|
||||
final estado = EstadoNavegacionRaiz();
|
||||
|
||||
estado.irA(RaizPluriWave.alarmas);
|
||||
|
||||
expect(estado.indice, RaizPluriWave.alarmas.index);
|
||||
expect(estado.indice, 3);
|
||||
});
|
||||
|
||||
test('irA notifies listeners on a real transition', () {
|
||||
final estado = EstadoNavegacionRaiz();
|
||||
var notifyCount = 0;
|
||||
estado.addListener(() => notifyCount++);
|
||||
|
||||
estado.irA(RaizPluriWave.buscar);
|
||||
|
||||
expect(notifyCount, 1);
|
||||
});
|
||||
|
||||
test('irA no-ops and does not notify when already on that root', () {
|
||||
final estado = EstadoNavegacionRaiz();
|
||||
var notifyCount = 0;
|
||||
estado.addListener(() => notifyCount++);
|
||||
|
||||
estado.irA(RaizPluriWave.escuchar); // already the starting root
|
||||
|
||||
expect(notifyCount, 0);
|
||||
expect(estado.actual, RaizPluriWave.escuchar);
|
||||
});
|
||||
|
||||
test('a repeated irA to the same non-initial root only notifies once', () {
|
||||
final estado = EstadoNavegacionRaiz();
|
||||
estado.irA(RaizPluriWave.ajustes);
|
||||
var notifyCount = 0;
|
||||
estado.addListener(() => notifyCount++);
|
||||
|
||||
estado.irA(RaizPluriWave.ajustes);
|
||||
|
||||
expect(notifyCount, 0);
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user