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/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/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/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/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/domain/usecases/verify_name_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_creator/presentation/extensions/validator_failure_extension.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, [
|
return verifyNameInteractor.execute(newName, [
|
||||||
EmptyNameValidator(),
|
EmptyNameValidator(),
|
||||||
DuplicateNameValidator(listMailboxName),
|
DuplicateNameValidator(listMailboxName),
|
||||||
|
SpecialCharacterValidator()
|
||||||
]).fold((failure) {
|
]).fold((failure) {
|
||||||
if (failure is VerifyNameFailure) {
|
if (failure is VerifyNameFailure) {
|
||||||
return failure.getMessage(context, actions: mailboxActions);
|
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/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/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/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/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/domain/usecases/verify_name_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_creator/presentation/extensions/validator_failure_extension.dart';
|
import 'package:tmail_ui_user/features/mailbox_creator/presentation/extensions/validator_failure_extension.dart';
|
||||||
@@ -205,6 +206,7 @@ class DestinationPickerController extends BaseMailboxController {
|
|||||||
[
|
[
|
||||||
EmptyNameValidator(),
|
EmptyNameValidator(),
|
||||||
DuplicateNameValidator(listMailboxNameAsStringExist),
|
DuplicateNameValidator(listMailboxNameAsStringExist),
|
||||||
|
SpecialCharacterValidator()
|
||||||
]
|
]
|
||||||
).fold(
|
).fold(
|
||||||
(failure) {
|
(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/presentation/state/failure.dart';
|
||||||
import 'package:core/core.dart';
|
import 'package:core/presentation/state/success.dart';
|
||||||
import 'package:dartz/dartz.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/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/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/model/verification/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/state/verify_name_view_state.dart';
|
||||||
@@ -11,7 +11,7 @@ class SpecialCharacterValidator extends Validator<NewNameRequest> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Either<Failure, Success> validate(NewNameRequest value) {
|
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()));
|
return Left<Failure, Success>(VerifyNameFailure(const SpecialCharacterException()));
|
||||||
} else {
|
} else {
|
||||||
return Right<Failure, Success>(VerifyNameViewState());
|
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/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/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/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/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/domain/usecases/verify_name_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_creator/presentation/extensions/validator_failure_extension.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)
|
if (canCheckNameString)
|
||||||
EmptyNameValidator(),
|
EmptyNameValidator(),
|
||||||
DuplicateNameValidator(listMailboxNameAsStringExist),
|
DuplicateNameValidator(listMailboxNameAsStringExist),
|
||||||
|
SpecialCharacterValidator()
|
||||||
]
|
]
|
||||||
).fold(
|
).fold(
|
||||||
(failure) {
|
(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