/// **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 _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('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); }); }