TF-2298 Write unit test to check token expired time

Signed-off-by: dab246 <tdvu@linagora.com>
(cherry picked from commit 3fc44a33c509e186a3bc5d2434169f44dcfe4169)
This commit is contained in:
dab246
2023-12-04 10:57:31 +07:00
committed by Dat H. Pham
parent 5061fcaced
commit d152056473
4 changed files with 143 additions and 42 deletions
@@ -1,12 +1,12 @@
import 'package:core/domain/extensions/datetime_extension.dart';
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:core/utils/app_logger.dart';
import 'package:core/utils/build_utils.dart';
import 'package:fcm/model/device_client_id.dart';
import 'package:fcm/model/firebase_registration_expired_time.dart';
import 'package:fcm/model/firebase_registration.dart';
import 'package:fcm/model/fcm_token.dart';
import 'package:fcm/model/firebase_registration.dart';
import 'package:fcm/model/firebase_registration_expired_time.dart';
import 'package:jmap_dart_client/jmap/core/id.dart';
import 'package:jmap_dart_client/jmap/core/utc_date.dart';
import 'package:tmail_ui_user/features/push_notification/domain/model/register_new_token_request.dart';
@@ -92,15 +92,20 @@ class FcmTokenController extends FcmBaseController {
}
}
bool _validateFirebaseRegistrationTokenExpired(FirebaseRegistration firebaseRegistration) {
log('FcmTokenController::_validateFirebaseRegistrationTokenExpired():firebaseRegistration: $firebaseRegistration');
bool _isFirebaseRegistrationTokenExpired(FirebaseRegistration firebaseRegistration) {
log('FcmTokenController::_isFirebaseRegistrationTokenExpired():firebaseRegistration: $firebaseRegistration');
if (firebaseRegistration.expires != null) {
final expireTimeLocal = firebaseRegistration.expires!.value.value.toLocal();
final currentTime = DateTime.now();
log('FcmTokenController::_validateFirebaseRegistrationTokenExpired():expireTimeLocal: $expireTimeLocal | currentTime: $currentTime');
final offsetTime = expireTimeLocal.minutesBetween(currentTime);
log('FcmTokenController::_validateFirebaseRegistrationTokenExpired():offsetTime: $offsetTime');
return currentTime.isBefore(expireTimeLocal) && offsetTime <= limitedTimeToExpire;
return FcmUtils.instance.checkExpirationTimeWithinGivenPeriod(
expiredTime: expireTimeLocal,
currentTime: currentTime,
limitOffsetTime: limitedTimeToExpire,
offsetTimeUnit: BuildUtils.isDebugMode
? OffsetTimeUnit.minute
: OffsetTimeUnit.day
);
} else {
return true;
}
@@ -161,7 +166,7 @@ class FcmTokenController extends FcmBaseController {
void handleSuccessViewState(Success success) {
log('FcmTokenController::_handleSuccessViewState(): $success');
if (success is GetFirebaseRegistrationByDeviceIdSuccess &&
_validateFirebaseRegistrationTokenExpired(success.firebaseRegistration)) {
_isFirebaseRegistrationTokenExpired(success.firebaseRegistration)) {
_updateNewExpiredTimeForFirebaseRegistration(success.firebaseRegistration);
} else if (success is GetStoredFirebaseRegistrationSuccess) {
_getFirebaseRegistrationFromServer(deviceClientId: success.firebaseRegistration.deviceClientId!);
@@ -1,6 +1,7 @@
import 'dart:io';
import 'package:core/domain/extensions/datetime_extension.dart';
import 'package:core/utils/app_logger.dart';
import 'package:core/utils/platform_info.dart';
import 'package:dartz/dartz.dart';
@@ -10,6 +11,15 @@ import 'package:jmap_dart_client/jmap/core/id.dart';
import 'package:jmap_dart_client/jmap/push/state_change.dart';
import 'package:jmap_dart_client/jmap/push/type_state.dart';
enum OffsetTimeUnit {
year,
month,
day,
hour,
minute,
second
}
class FcmUtils {
FcmUtils._internal();
@@ -115,4 +125,31 @@ class FcmUtils {
}
bool get isMobileAndroid => PlatformInfo.isMobile && Platform.isAndroid;
bool checkExpirationTimeWithinGivenPeriod({
required DateTime expiredTime,
required DateTime currentTime,
required int limitOffsetTime,
required OffsetTimeUnit offsetTimeUnit
}) {
if (currentTime.isBefore(expiredTime)) {
log('FcmUtils::checkExpiredTimeWithOffsetTime: currentTime BEFORE expiredTime');
int offsetTime = 0;
switch(offsetTimeUnit) {
case OffsetTimeUnit.minute:
offsetTime = expiredTime.minutesBetween(currentTime);
break;
case OffsetTimeUnit.day:
offsetTime = expiredTime.daysBetween(currentTime);
break;
default:
break;
}
log('FcmUtils::checkExpiredTimeWithOffsetTime:offsetTime: $offsetTime');
return offsetTime <= limitOffsetTime;
} else {
log('FcmUtils::checkExpiredTimeWithOffsetTime: currentTime AFTER expiredTime');
return true;
}
}
}