Skip to content

Commit

Permalink
fix(bootstrap): skip refresh page if no network
Browse files Browse the repository at this point in the history
  • Loading branch information
d-loose committed Apr 5, 2024
1 parent 113cbb4 commit 7f23980
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 5 deletions.
11 changes: 8 additions & 3 deletions packages/ubuntu_bootstrap/lib/pages/refresh/refresh_model.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,27 @@ import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:ubuntu_bootstrap/services.dart';
import 'package:ubuntu_provision/services.dart';

export 'package:subiquity_client/subiquity_client.dart' show RefreshCheckState;
export 'package:ubuntu_bootstrap/services.dart' show RefreshState;

final refreshModelProvider =
ChangeNotifierProvider((_) => RefreshModel(getService<RefreshService>()));
final refreshModelProvider = ChangeNotifierProvider((_) => RefreshModel(
getService<RefreshService>(),
getService<NetworkService>(),
));

class RefreshModel extends ChangeNotifier {
RefreshModel(this._service);
RefreshModel(this._service, this._network);

final RefreshService _service;
final NetworkService _network;
StreamSubscription<RefreshState>? _stateChanged;

RefreshState get state => _service.state;

Future<bool> init() async {
if (!_network.isConnected) return false;
_stateChanged = _service.stateChanged.listen((_) => notifyListeners());
return _service.check().then((state) => state.available);
}
Expand Down
21 changes: 19 additions & 2 deletions packages/ubuntu_bootstrap/test/refresh/refresh_model_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,10 @@ void main() async {
when(service.stateChanged).thenAnswer((_) => controller.stream);
when(service.check()).thenAnswer((_) async => checking);

final model = RefreshModel(service);
final network = MockNetworkService();
when(network.isConnected).thenReturn(true);

final model = RefreshModel(service, network);
expect(model.state, equals(checking));

await model.init();
Expand All @@ -36,8 +39,22 @@ void main() async {
test('refresh', () async {
final service = MockRefreshService();

final model = RefreshModel(service);
final network = MockNetworkService();
when(network.isConnected).thenReturn(true);

final model = RefreshModel(service, network);
await model.refresh();
verify(service.refresh()).called(1);
});

test('no network', () async {
final service = MockRefreshService();

final network = MockNetworkService();
when(network.isConnected).thenReturn(false);

final model = RefreshModel(service, network);
final available = await model.init();
expect(available, isFalse);
});
}

0 comments on commit 7f23980

Please sign in to comment.