TF-2517 Fix rename/create a folder with special characters do not show error message
This commit is contained in:
@@ -38,6 +38,7 @@ import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree.d
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree_builder.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/duplicate_name_validator.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/empty_name_validator.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/special_character_validator.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_creator/domain/state/verify_name_view_state.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_creator/domain/usecases/verify_name_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_creator/presentation/extensions/validator_failure_extension.dart';
|
||||
@@ -291,6 +292,7 @@ abstract class BaseMailboxController extends BaseController {
|
||||
return verifyNameInteractor.execute(newName, [
|
||||
EmptyNameValidator(),
|
||||
DuplicateNameValidator(listMailboxName),
|
||||
SpecialCharacterValidator()
|
||||
]).fold((failure) {
|
||||
if (failure is VerifyNameFailure) {
|
||||
return failure.getMessage(context, actions: mailboxActions);
|
||||
|
||||
@@ -30,6 +30,7 @@ import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.d
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree_builder.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/duplicate_name_validator.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/empty_name_validator.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/special_character_validator.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_creator/domain/state/verify_name_view_state.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_creator/domain/usecases/verify_name_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_creator/presentation/extensions/validator_failure_extension.dart';
|
||||
@@ -205,6 +206,7 @@ class DestinationPickerController extends BaseMailboxController {
|
||||
[
|
||||
EmptyNameValidator(),
|
||||
DuplicateNameValidator(listMailboxNameAsStringExist),
|
||||
SpecialCharacterValidator()
|
||||
]
|
||||
).fold(
|
||||
(failure) {
|
||||
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
|
||||
extension MailboxNameSpecialCharacterValidatorExtension on String {
|
||||
bool get isValid {
|
||||
if (startsWith('#')) {
|
||||
return false;
|
||||
}
|
||||
|
||||
final forbiddenChars = RegExp(r'[%*\r\n]');
|
||||
if (forbiddenChars.hasMatch(this)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
|
||||
extension NameValidatorStringExtension on String {
|
||||
bool hasSpecialCharactersInName() {
|
||||
return RegExp(r'(?=.*?[#?!@$%^&*)(=+}{:;?/|\\><.,`~])').hasMatch(this);
|
||||
}
|
||||
}
|
||||
+4
-4
@@ -1,8 +1,8 @@
|
||||
|
||||
import 'package:core/core.dart';
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_creator/domain/exceptions/verify_name_exception.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_creator/domain/extensions/name_validator_string_extension.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_creator/domain/extensions/mailbox_name_special_character_validator_extension.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/new_name_request.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/validator.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_creator/domain/state/verify_name_view_state.dart';
|
||||
@@ -11,7 +11,7 @@ class SpecialCharacterValidator extends Validator<NewNameRequest> {
|
||||
|
||||
@override
|
||||
Either<Failure, Success> validate(NewNameRequest value) {
|
||||
if (value.value != null && value.value!.hasSpecialCharactersInName()) {
|
||||
if (value.value != null && !value.value!.isValid) {
|
||||
return Left<Failure, Success>(VerifyNameFailure(const SpecialCharacterException()));
|
||||
} else {
|
||||
return Right<Failure, Success>(VerifyNameViewState());
|
||||
|
||||
@@ -13,6 +13,7 @@ import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.d
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/duplicate_name_validator.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/empty_name_validator.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/special_character_validator.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_creator/domain/state/verify_name_view_state.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_creator/domain/usecases/verify_name_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_creator/presentation/extensions/validator_failure_extension.dart';
|
||||
@@ -122,6 +123,7 @@ class MailboxCreatorController extends BaseController {
|
||||
if (canCheckNameString)
|
||||
EmptyNameValidator(),
|
||||
DuplicateNameValidator(listMailboxNameAsStringExist),
|
||||
SpecialCharacterValidator()
|
||||
]
|
||||
).fold(
|
||||
(failure) {
|
||||
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_creator/domain/extensions/mailbox_name_special_character_validator_extension.dart';
|
||||
|
||||
void main() {
|
||||
group('isValid::test', () {
|
||||
|
||||
test('should return true for a valid string', () {
|
||||
expect('hello'.isValid, isTrue);
|
||||
});
|
||||
|
||||
test('should return false for a string starting with #', () {
|
||||
expect('#hello'.isValid, isFalse);
|
||||
});
|
||||
|
||||
test('should return false for a string containing %', () {
|
||||
expect('hello%world'.isValid, isFalse);
|
||||
});
|
||||
|
||||
test('should return false for a string containing *', () {
|
||||
expect('hello*world'.isValid, isFalse);
|
||||
});
|
||||
|
||||
test('should return false for a string containing \\n', () {
|
||||
expect('hello\nworld'.isValid, isFalse);
|
||||
});
|
||||
|
||||
test('should return false for a string containing \\r', () {
|
||||
expect('hello\rworld'.isValid, isFalse);
|
||||
});
|
||||
|
||||
test('should return true for an empty string', () {
|
||||
expect(''.isValid, isTrue);
|
||||
});
|
||||
|
||||
test('should return true for a string with no forbidden characters and not starting with #', () {
|
||||
expect('validString123'.isValid, isTrue);
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user