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); }); }