Files
fin-tracker/app/test/metrics_refresh_test.dart
T
Dmitry 62d36aa3e8 feat(app): новый визуальный язык, верхняя навигация, портфели, создание счетов и ручные события
Тема и общие виджеты (AssetIcon, ServiceMark, HelpTip, глоссарий), верхняя панель TopNav и вкладки Аналитики вместо NavSidebar, иконки PWA. Экраны: портфели, создание брокерского счёта, ручное событие, правка инструмента, Обзор карточками по скоупам и таблица активов, пересчёт метрик с опросом /metrics/status. design-system.md обновлён.
2026-09-19 22:14:21 +03:00

62 lines
1.6 KiB
Dart

import 'package:fintracker_api/fintracker_api.dart';
import 'package:fintracker_app/features/home/providers.dart';
import 'package:flutter_test/flutter_test.dart';
MetricsStatusOut _status({required bool refreshing, bool consistent = true}) =>
MetricsStatusOut(
lastRefresh: null,
consistent: consistent,
refreshing: refreshing,
);
void main() {
const fast = Duration(milliseconds: 1);
test('polls until the server stops reporting a rebuild', () async {
final answers = [
_status(refreshing: true),
_status(refreshing: true),
_status(refreshing: false),
];
var calls = 0;
final done = await waitForMetricsRefresh(
() async => answers[calls++],
interval: fast,
);
expect(calls, 3);
expect(done?.refreshing, isFalse);
});
test('returns straight away when nothing is queued', () async {
var calls = 0;
final done = await waitForMetricsRefresh(() async {
calls++;
return _status(refreshing: false);
}, interval: fast);
expect(calls, 1);
expect(done, isNotNull);
});
test('a failed rebuild is handed back so the caller can say so', () async {
final done = await waitForMetricsRefresh(
() async => _status(refreshing: false, consistent: false),
interval: fast,
);
expect(done?.consistent, isFalse);
});
test('gives up with null when the rebuild never finishes', () async {
final done = await waitForMetricsRefresh(
() async => _status(refreshing: true),
interval: fast,
timeout: const Duration(milliseconds: 20),
);
expect(done, isNull);
});
}