Network status indicator should only respect the latest / current request. Others finish in background. Replace stupid bools with an enum to track state. Be smarter about split requests.

This commit is contained in:
stopflock
2026-01-31 17:21:31 -06:00
parent d095736078
commit 83d7814fb6
14 changed files with 371 additions and 284 deletions
+59
View File
@@ -0,0 +1,59 @@
import 'package:flutter_test/flutter_test.dart';
import '../../lib/services/network_status.dart';
void main() {
group('NetworkStatus', () {
late NetworkStatus networkStatus;
setUp(() {
networkStatus = NetworkStatus.instance;
networkStatus.clear(); // Start clean for each test
});
test('starts with idle status', () {
expect(networkStatus.status, NetworkRequestStatus.idle);
});
test('transitions through loading states correctly', () {
networkStatus.setLoading();
expect(networkStatus.status, NetworkRequestStatus.loading);
networkStatus.setSplitting();
expect(networkStatus.status, NetworkRequestStatus.splitting);
networkStatus.setSuccess();
expect(networkStatus.status, NetworkRequestStatus.success);
});
test('handles error states correctly', () {
networkStatus.setTimeout();
expect(networkStatus.status, NetworkRequestStatus.timeout);
networkStatus.setRateLimited();
expect(networkStatus.status, NetworkRequestStatus.rateLimited);
networkStatus.setError();
expect(networkStatus.status, NetworkRequestStatus.error);
networkStatus.setNoData();
expect(networkStatus.status, NetworkRequestStatus.noData);
});
test('clear() resets to idle', () {
networkStatus.setError();
expect(networkStatus.status, NetworkRequestStatus.error);
networkStatus.clear();
expect(networkStatus.status, NetworkRequestStatus.idle);
});
test('auto-reset timers work (success)', () async {
networkStatus.setSuccess();
expect(networkStatus.status, NetworkRequestStatus.success);
// Wait for auto-reset (2 seconds + buffer)
await Future.delayed(const Duration(milliseconds: 2100));
expect(networkStatus.status, NetworkRequestStatus.idle);
});
});
}