Deux défauts trouvés en vérifiant la correction précédente à l'écran.
1. « -1.3 kW · Solaire » dans « Production — détail ». La correction du
2026-09-05 n'avait redressé QUE le nœud de la vue d'ensemble : la même
grandeur est rendue à deux endroits, et le grep qui avait servi cherchait
`pvPower.abs` — donc il montrait la ligne déjà corrigée et cachait l'autre.
Un test couvre désormais le détail, en éprouvant l'ABSENCE du signe.
2. PAC et « Eau chaude » affichaient « non publié » alors que la box publie
`{powerW: 0, source: "meter"}` pour les deux. `LoadConfigProvider.load()`
n'était appelé que par l'écran des rôles : sur le tableau de bord la
configuration est vide, aucun `domain` ne se rattache, et la carte reste sans
valeur. Une absence CÔTÉ APP présentée comme une absence côté box — le défaut
qu'on venait de corriger, reproduit un cran plus loin, et trompeur de la même
façon : on en conclurait que la box ne publie rien.
Vérifié à l'écran entre les deux : « non publié » est lisible dans les cercles,
« Autres » a disparu, et le détail production ne montre plus d'onduleurs
fabriqués mais « Détail par source non publié par cette box ».
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GKM8FDNHZWogAsjjfB8pSw
67 lines
3.3 KiB
Dart
67 lines
3.3 KiB
Dart
/// **Une production ne s'affiche pas en négatif.**
|
|
///
|
|
/// Vu sur appareil le 2026-09-05 à 16:52 : « **-8.9 kW · Solaire** » sous un soleil de
|
|
/// 9 kW. `Energy.GetPowerBalance` publiait `currentPowerProduction: -8980.4` — nymea donne
|
|
/// la production en négatif, et `NymeaService` garde les signes bruts par politique (§7.1).
|
|
/// La carte imprimait donc la valeur telle quelle.
|
|
///
|
|
/// Ce qui rend le défaut net plutôt qu'opinable : **la même carte normalisait déjà** le
|
|
/// réseau et la batterie par `.abs()`. La branche solaire était la seule oubliée — donc ce
|
|
/// n'était pas une convention d'affichage assumée, c'était un oubli.
|
|
///
|
|
/// Ce test existe parce que l'écran ne pouvait plus le montrer : à 17:03 la production du
|
|
/// banc était retombée à 0 W, et `abs(0) == 0`. Une correction qu'on ne peut pas voir
|
|
/// demande une garde qui, elle, se voit.
|
|
library;
|
|
|
|
import 'package:etm_powersync_app/features/dashboard/widgets/energy_flow_card.dart';
|
|
import 'package:etm_powersync_app/models/energy_data.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
|
|
Future<void> _poser(WidgetTester tester, EnergyData d) async {
|
|
await tester.binding.setSurfaceSize(const Size(1000, 1600));
|
|
addTearDown(() => tester.binding.setSurfaceSize(null));
|
|
await tester.pumpWidget(
|
|
MaterialApp(home: Scaffold(body: EnergyFlowCard(data: d))));
|
|
await tester.pump(const Duration(seconds: 2));
|
|
}
|
|
|
|
void main() {
|
|
testWidgets('la production publiée NÉGATIVE s\'affiche positive', (tester) async {
|
|
// La charge utile réelle du 2026-09-05 16:52.
|
|
await _poser(tester, const EnergyData(pvPower: -8980.4, homePower: 3249.4));
|
|
|
|
// -8 980,4 W -> 8,98 kW -> « 9.0 kW » à une décimale. (Sur appareil la valeur de
|
|
// l'instant donnait « -8.9 kW » ; c'est le SIGNE qui est en cause, pas l'arrondi.)
|
|
expect(find.text('9.0 kW'), findsOneWidget);
|
|
expect(find.text('-9.0 kW'), findsNothing,
|
|
reason: 'un client lirait « mes panneaux consomment 9 kW »');
|
|
});
|
|
|
|
testWidgets('le DÉTAIL production ne montre pas non plus un signe négatif',
|
|
(tester) async {
|
|
// La correction du 2026-09-05 n'avait redressé que la vue d'ensemble. Le hub du
|
|
// détail affichait toujours « -1.3 kW », vu sur appareil le lendemain : une même
|
|
// grandeur rendue à deux endroits, corrigée à un seul.
|
|
await _poser(tester, const EnergyData(pvPower: -1349.0, homePower: 3252));
|
|
await tester.tap(find.text('Solaire'));
|
|
await tester.pump(const Duration(seconds: 2));
|
|
|
|
// Deux nœuds portent la valeur pendant la transition (vue d'ensemble et hub du
|
|
// détail) : c'est l'ABSENCE du signe qui est éprouvée ici, pas le compte.
|
|
expect(find.text('1.3 kW'), findsWidgets);
|
|
expect(find.text('-1.3 kW'), findsNothing);
|
|
// Et surtout : plus d'onduleurs fabriqués.
|
|
expect(find.textContaining('Onduleur'), findsNothing);
|
|
expect(find.textContaining('non publié par cette box'), findsOneWidget);
|
|
});
|
|
|
|
testWidgets('zéro reste zéro — et ne prouve rien', (tester) async {
|
|
// L'état du banc à 17:03, celui qui a rendu la correction invisible à l'écran.
|
|
await _poser(tester,
|
|
const EnergyData(pvPower: 0, homePower: 3250, gridPower: 3250));
|
|
expect(find.text('0.0 kW'), findsOneWidget);
|
|
});
|
|
}
|