Passage sur le Redmi contre `.75`. Aucun des trois n'était visible en test. 1. LA PRODUCTION S'AFFICHAIT NÉGATIVE — « -8.9 kW · Solaire » sous 9 kW de soleil. `currentPowerProduction` est publié négatif par nymea et le service garde les signes bruts par politique ; la carte imprimait 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 un oubli et non une convention. 2. LE LIBELLÉ SE COUPAIT AU MILIEU DU MOT — « Autoconsommat / ion », alors que le commentaire du code disait vouloir l'éviter. La cause n'est pas la longueur mais l'ÉCHELLE du texte : police système au-dessus de 100 %, et `maxLines: 2` ne protège de rien puisque Flutter coupe un mot long sans espace, sans même afficher l'ellipse. `FittedBox(scaleDown)` garde le mot entier et ne fait rien quand la place suffit. 3. MA LIGNE DES RATIOS RÉPÉTAIT LES TUILES — « Instantané depuis 09:23 — autoconsommation 52 %, autonomie 54 % » sous des tuiles affichant 52 % et 54 %. Les deux chemins étaient corrects et les valeurs coïncidaient vraiment (bilan 51,8/54,1 sur 00:00→16:45, box 51,9/53,7 depuis 09:23). Rien de faux, et illisible quand même : je déclenchais sur l'ORIGINE, alors qu'un lecteur compare des NOMBRES. La ligne sort désormais quand l'origine diffère ET que l'écart dépasse 2 points ; le relevé du jour est devenu un test. Vérifié à l'écran après correction : le libellé tient sur une ligne, la ligne des ratios se tait. Le signe, lui, N'A PAS pu être revu — la production du banc était retombée à 0 W à 17:03, et `abs(0) == 0`. Une correction qu'on ne peut pas voir demande une garde qui se voit : `flux_signe_test.dart` la pose. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GKM8FDNHZWogAsjjfB8pSw
49 lines
2.3 KiB
Dart
49 lines
2.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('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);
|
|
});
|
|
}
|