etm-powersync-app/test/heure_lisible_test.dart
Patrick Schurig 0df80b5b9b fix(écran): un instant d'un autre jour porte son jour, et le motif ne rapetisse plus la grandeur
Deux défauts vus sur appareil après installation, tous deux d'affichage.

1. « mesuré depuis 16:37 » à 06:15, pour un `measuredSince` de la VEILLE. Le
   lecteur comprend 16:37 aujourd'hui — une heure qui n'est pas encore arrivée —
   et « 2,5 kWh achetés » juste à côté devient incompréhensible avec elle.
   Même défaut que l'heure UTC, d'un cran plus haut : là on perdait le fuseau,
   ici le jour. `heureLisible` rend « HH:MM » dans la journée du lecteur,
   « hier HH:MM » la veille, « le JJ/MM à HH:MM » au-delà — et la comparaison
   porte sur le jour civil, pas sur 24 h : à 00:05, un instant de 23:50 est hier
   même s'il a quinze minutes.

2. « Autoconsommation · sans production » rendu à la moitié de la taille
   d'« Autonomie » à côté. Cause : un FittedBox reçoit des contraintes de
   largeur infinies, donc son enfant tient sur une ligne aussi large qu'il veut
   et c'est tout le bloc qui rétrécit — `maxLines: 2` n'y sert à rien.
   Rallonger le texte d'un suffixe rapetissait donc le NOM de la grandeur, qui
   est ce qu'on lit en premier. Le motif passe sur sa propre ligne.

Les tests qui figeaient « HH:MM » dérivent maintenant de `heureLisible`, la
fonction même de l'écran — un attendu recomposé à la main aurait gelé la forme
d'avant, exactement comme les « 03:42 » en dur de vendredi.

Captures : docs/captures/2026-09-08_taux-sans-production.png
           docs/captures/2026-09-08_instant-hier.png

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GKM8FDNHZWogAsjjfB8pSw
2026-09-08 06:31:52 +02:00

33 lines
1.2 KiB
Dart

/// **`heureLisible` — une heure nue n'est honnête que dans la journée du lecteur.**
library;
import 'package:etm_powersync_app/services/telemetry_text.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
final n = DateTime(2026, 9, 8, 6, 15);
test('aujourd\'hui : l\'heure seule suffit', () {
expect(heureLisible(DateTime(2026, 9, 8, 4, 33), maintenant: n), '04:33');
});
test('hier : le jour est dit', () {
expect(heureLisible(DateTime(2026, 9, 7, 16, 37), maintenant: n), 'hier 16:37');
});
test('plus ancien : la date est dite', () {
expect(heureLisible(DateTime(2026, 9, 4, 9, 5), maintenant: n), 'le 04/09 à 09:05');
});
test('la comparaison porte sur le JOUR, pas sur 24 h', () {
// À 00:05, un instant de 23:50 a quinze minutes — et c'est quand même hier. Comparer
// des durées au lieu de dates calendaires l'aurait rendu « aujourd'hui ».
final minuitPasse = DateTime(2026, 9, 8, 0, 5);
expect(heureLisible(DateTime(2026, 9, 7, 23, 50), maintenant: minuitPasse),
'hier 23:50');
// Et l'inverse : 23 h d'écart mais le même jour civil reste une heure nue.
expect(heureLisible(DateTime(2026, 9, 8, 0, 1), maintenant: DateTime(2026, 9, 8, 23, 30)),
'00:01');
});
}