Тема и общие виджеты (AssetIcon, ServiceMark, HelpTip, глоссарий), верхняя панель TopNav и вкладки Аналитики вместо NavSidebar, иконки PWA. Экраны: портфели, создание брокерского счёта, ручное событие, правка инструмента, Обзор карточками по скоупам и таблица активов, пересчёт метрик с опросом /metrics/status. design-system.md обновлён.
62 lines
1.6 KiB
Dart
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);
|
|
});
|
|
}
|