-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[#8] Show no internet connection error dialog
- Loading branch information
Showing
8 changed files
with
103 additions
and
11 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,13 +1,21 @@ | ||
import 'package:flutter/material.dart'; | ||
import 'package:survey_flutter/utils/build_context_ext.dart'; | ||
|
||
enum AppError { unauthenticated } | ||
enum AppError { | ||
unauthorized, | ||
noInternetConnection, | ||
generic, | ||
} | ||
|
||
extension AppErrorExtension on AppError { | ||
String description(BuildContext context) { | ||
switch (this) { | ||
case AppError.unauthenticated: | ||
return context.localizations.unauthenticatedError; | ||
case AppError.unauthorized: | ||
return context.localizations.unauthorizedError; | ||
case AppError.noInternetConnection: | ||
return context.localizations.noInternetConnectionError; | ||
case AppError.generic: | ||
return context.localizations.genericError; | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
import 'package:internet_connection_checker/internet_connection_checker.dart'; | ||
import 'package:flutter_riverpod/flutter_riverpod.dart'; | ||
|
||
abstract class InternetConnectionManager { | ||
Future<bool> hasConnection(); | ||
} | ||
|
||
final internetConnectionManagerProvider = | ||
Provider<InternetConnectionManager>((_) { | ||
return InternetConnectionManagerImpl(); | ||
}); | ||
|
||
class InternetConnectionManagerImpl extends InternetConnectionManager { | ||
final InternetConnectionChecker _internetConnectionChecker = | ||
InternetConnectionChecker(); | ||
|
||
@override | ||
Future<bool> hasConnection() async { | ||
return await _internetConnectionChecker.hasConnection; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,16 +2,23 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; | |
import 'package:flutter_test/flutter_test.dart'; | ||
import 'package:mockito/mockito.dart'; | ||
import 'package:survey_flutter/screens/login/login_view_model.dart'; | ||
import 'package:survey_flutter/utils/internet_connection_manager.dart'; | ||
|
||
import '../../mocks/generate_mocks.mocks.dart'; | ||
|
||
void main() { | ||
group('LoginViewModel', () { | ||
late ProviderContainer container; | ||
late MockInternetConnectionManager mockInternetConnectionManager; | ||
late MockAsyncListener listener; | ||
|
||
setUp(() { | ||
container = ProviderContainer(); | ||
mockInternetConnectionManager = MockInternetConnectionManager(); | ||
container = ProviderContainer(overrides: [ | ||
internetConnectionManagerProvider | ||
.overrideWithValue(mockInternetConnectionManager), | ||
]); | ||
|
||
listener = MockAsyncListener(); | ||
container.listen( | ||
loginViewModelProvider, | ||
|
@@ -76,9 +83,30 @@ void main() { | |
}); | ||
}); | ||
|
||
// TODO: Update when integrating with API | ||
group('login', () { | ||
test('When logging in unsuccessfully, it emits error correspondingly', | ||
// test('When logging in unsuccessfully, it emits error correspondingly', | ||
// () async { | ||
// const data = AsyncData<void>(null); | ||
// // verify initial value from build method | ||
// verify(listener(null, data)); | ||
|
||
// final loginViewModel = container.read(loginViewModelProvider.notifier); | ||
// await loginViewModel.login( | ||
// email: '[email protected]', password: '12345678'); | ||
|
||
// verifyInOrder([ | ||
// listener(data, isA<AsyncLoading>()), | ||
// listener(isA<AsyncLoading<void>>(), isA<AsyncError<void>>()), | ||
// ]); | ||
// verifyNoMoreInteractions(listener); | ||
// }); | ||
|
||
test( | ||
'When logging in without Internet connection, it emits error correspondingly', | ||
() async { | ||
when(mockInternetConnectionManager.hasConnection()) | ||
.thenAnswer((_) async => false); | ||
const data = AsyncData<void>(null); | ||
// verify initial value from build method | ||
verify(listener(null, data)); | ||
|