Added test for login page

This commit is contained in:
Anton Stubenbord
2022-12-05 19:15:00 +01:00
parent 0a63259693
commit d79682a011
20 changed files with 444 additions and 50 deletions

View File

@@ -7,28 +7,30 @@ import 'package:injectable/injectable.dart';
@singleton
class ConnectivityCubit extends Cubit<ConnectivityState> {
final ConnectivityStatusService connectivityStatusService;
late final StreamSubscription<bool> _sub;
StreamSubscription<bool>? _sub;
ConnectivityCubit(this.connectivityStatusService)
: super(ConnectivityState.undefined);
Future<void> initialize() async {
final bool isConnected =
await connectivityStatusService.isConnectedToInternet();
emit(isConnected
? ConnectivityState.connected
: ConnectivityState.notConnected);
_sub =
connectivityStatusService.connectivityChanges().listen((isConnected) {
if (_sub == null) {
final bool isConnected =
await connectivityStatusService.isConnectedToInternet();
emit(isConnected
? ConnectivityState.connected
: ConnectivityState.notConnected);
});
_sub =
connectivityStatusService.connectivityChanges().listen((isConnected) {
emit(isConnected
? ConnectivityState.connected
: ConnectivityState.notConnected);
});
}
}
@override
Future<void> close() {
_sub.cancel();
_sub?.cancel();
return super.close();
}
}

View File

@@ -7,6 +7,8 @@ import 'package:http_interceptor/http_interceptor.dart';
import 'package:injectable/injectable.dart';
@injectable
@dev
@prod
class AuthenticationInterceptor implements InterceptorContract {
final LocalVault _localVault;
AuthenticationInterceptor(this._localVault);

View File

@@ -5,6 +5,8 @@ import 'package:injectable/injectable.dart';
const interceptedRoutes = ['thumb/'];
@injectable
@dev
@prod
class ResponseConversionInterceptor implements InterceptorContract {
@override
Future<BaseRequest> interceptRequest({required BaseRequest request}) async =>

View File

@@ -13,6 +13,8 @@ import 'package:injectable/injectable.dart';
/// Convenience class which handles timeout errors.
///
@Injectable(as: BaseClient)
@dev
@prod
@Named("timeoutClient")
class TimeoutClient implements BaseClient {
final ConnectivityStatusService connectivityStatusService;

View File

@@ -9,7 +9,7 @@ abstract class ConnectivityStatusService {
Stream<bool> connectivityChanges();
}
@Injectable(as: ConnectivityStatusService)
@Injectable(as: ConnectivityStatusService, env: ['prod', 'dev'])
class ConnectivityStatusServiceImpl implements ConnectivityStatusService {
final Connectivity connectivity;

View File

@@ -8,15 +8,27 @@ import 'package:paperless_mobile/features/login/model/client_certificate.dart';
import 'package:paperless_mobile/features/settings/model/application_settings_state.dart';
import 'package:injectable/injectable.dart';
@singleton
class LocalVault {
abstract class LocalVault {
Future<void> storeAuthenticationInformation(AuthenticationInformation auth);
Future<AuthenticationInformation?> loadAuthenticationInformation();
Future<ClientCertificate?> loadCertificate();
Future<bool> storeApplicationSettings(ApplicationSettingsState settings);
Future<ApplicationSettingsState?> loadApplicationSettings();
Future<void> clear();
}
@Injectable(as: LocalVault)
@prod
@dev
class LocalVaultImpl implements LocalVault {
static const applicationSettingsKey = "applicationSettings";
static const authenticationKey = "authentication";
final EncryptedSharedPreferences sharedPreferences;
LocalVault(this.sharedPreferences);
LocalVaultImpl(this.sharedPreferences);
@override
Future<void> storeAuthenticationInformation(
AuthenticationInformation auth,
) async {
@@ -26,6 +38,7 @@ class LocalVault {
);
}
@override
Future<AuthenticationInformation?> loadAuthenticationInformation() async {
if ((await sharedPreferences.getString(authenticationKey)).isEmpty) {
return null;
@@ -35,11 +48,13 @@ class LocalVault {
);
}
@override
Future<ClientCertificate?> loadCertificate() async {
return loadAuthenticationInformation()
.then((value) => value?.clientCertificate);
}
@override
Future<bool> storeApplicationSettings(ApplicationSettingsState settings) {
return sharedPreferences.setString(
applicationSettingsKey,
@@ -47,6 +62,7 @@ class LocalVault {
);
}
@override
Future<ApplicationSettingsState?> loadApplicationSettings() async {
final settings = await sharedPreferences.getString(applicationSettingsKey);
if (settings.isEmpty) {
@@ -58,6 +74,7 @@ class LocalVault {
);
}
@override
Future<void> clear() {
return sharedPreferences.clear();
}