TF-2934 Fix mailbox name with space only
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/name_with_space_only_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/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';
|
||||||
@@ -291,6 +292,7 @@ abstract class BaseMailboxController extends BaseController {
|
|||||||
) {
|
) {
|
||||||
return verifyNameInteractor.execute(newName, [
|
return verifyNameInteractor.execute(newName, [
|
||||||
EmptyNameValidator(),
|
EmptyNameValidator(),
|
||||||
|
NameWithSpaceOnlyValidator(),
|
||||||
DuplicateNameValidator(listMailboxName),
|
DuplicateNameValidator(listMailboxName),
|
||||||
SpecialCharacterValidator()
|
SpecialCharacterValidator()
|
||||||
]).fold((failure) {
|
]).fold((failure) {
|
||||||
|
|||||||
@@ -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/name_with_space_only_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/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';
|
||||||
@@ -205,6 +206,7 @@ class DestinationPickerController extends BaseMailboxController {
|
|||||||
nameMailbox,
|
nameMailbox,
|
||||||
[
|
[
|
||||||
EmptyNameValidator(),
|
EmptyNameValidator(),
|
||||||
|
NameWithSpaceOnlyValidator(),
|
||||||
DuplicateNameValidator(listMailboxNameAsStringExist),
|
DuplicateNameValidator(listMailboxNameAsStringExist),
|
||||||
SpecialCharacterValidator()
|
SpecialCharacterValidator()
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -6,36 +6,32 @@ abstract class VerifyNameException extends Equatable implements Exception {
|
|||||||
static const duplicatedName = 'The name already exists!';
|
static const duplicatedName = 'The name already exists!';
|
||||||
static const nameContainSpecialCharacter = 'The name cannot contain special characters';
|
static const nameContainSpecialCharacter = 'The name cannot contain special characters';
|
||||||
static const emailAddressInvalid = 'The email address invalid';
|
static const emailAddressInvalid = 'The email address invalid';
|
||||||
|
static const spaceOnlyWithinName = 'The name cannot contain only spaces';
|
||||||
|
|
||||||
final String? message;
|
final String? message;
|
||||||
|
|
||||||
const VerifyNameException(this.message);
|
const VerifyNameException(this.message);
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object?> get props => [message];
|
||||||
}
|
}
|
||||||
|
|
||||||
class EmptyNameException extends VerifyNameException {
|
class EmptyNameException extends VerifyNameException {
|
||||||
const EmptyNameException() : super(VerifyNameException.emptyName);
|
const EmptyNameException() : super(VerifyNameException.emptyName);
|
||||||
|
|
||||||
@override
|
|
||||||
List<Object> get props => [];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class DuplicatedNameException extends VerifyNameException {
|
class DuplicatedNameException extends VerifyNameException {
|
||||||
const DuplicatedNameException() : super(VerifyNameException.duplicatedName);
|
const DuplicatedNameException() : super(VerifyNameException.duplicatedName);
|
||||||
|
|
||||||
@override
|
|
||||||
List<Object> get props => [];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class SpecialCharacterException extends VerifyNameException {
|
class SpecialCharacterException extends VerifyNameException {
|
||||||
const SpecialCharacterException() : super(VerifyNameException.nameContainSpecialCharacter);
|
const SpecialCharacterException() : super(VerifyNameException.nameContainSpecialCharacter);
|
||||||
|
|
||||||
@override
|
|
||||||
List<Object> get props => [];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class EmailAddressInvalidException extends VerifyNameException {
|
class EmailAddressInvalidException extends VerifyNameException {
|
||||||
const EmailAddressInvalidException() : super(VerifyNameException.emailAddressInvalid);
|
const EmailAddressInvalidException() : super(VerifyNameException.emailAddressInvalid);
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
class NameWithSpaceOnlyException extends VerifyNameException {
|
||||||
List<Object> get props => [];
|
const NameWithSpaceOnlyException() : super(VerifyNameException.spaceOnlyWithinName);
|
||||||
}
|
}
|
||||||
+20
@@ -0,0 +1,20 @@
|
|||||||
|
|
||||||
|
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/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';
|
||||||
|
|
||||||
|
class NameWithSpaceOnlyValidator extends Validator<NewNameRequest> {
|
||||||
|
|
||||||
|
@override
|
||||||
|
Either<Failure, Success> validate(NewNameRequest value) {
|
||||||
|
if (value.value != null && value.value!.isNotEmpty && value.value!.trim().isEmpty) {
|
||||||
|
return Left<Failure, Success>(VerifyNameFailure(const NameWithSpaceOnlyException()));
|
||||||
|
} else {
|
||||||
|
return Right<Failure, Success>(VerifyNameViewState());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -20,6 +20,8 @@ extension ValicatorFailureExtension on VerifyNameFailure {
|
|||||||
return AppLocalizations.of(context).this_folder_name_is_already_taken;
|
return AppLocalizations.of(context).this_folder_name_is_already_taken;
|
||||||
} else if (exception is SpecialCharacterException) {
|
} else if (exception is SpecialCharacterException) {
|
||||||
return AppLocalizations.of(context).folderNameCannotContainSpecialCharacters;
|
return AppLocalizations.of(context).folderNameCannotContainSpecialCharacters;
|
||||||
|
} else if (exception is NameWithSpaceOnlyException) {
|
||||||
|
return AppLocalizations.of(context).this_field_cannot_be_blank;
|
||||||
} else {
|
} else {
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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/name_with_space_only_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/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';
|
||||||
@@ -122,6 +123,7 @@ class MailboxCreatorController extends BaseController {
|
|||||||
[
|
[
|
||||||
if (canCheckNameString)
|
if (canCheckNameString)
|
||||||
EmptyNameValidator(),
|
EmptyNameValidator(),
|
||||||
|
NameWithSpaceOnlyValidator(),
|
||||||
DuplicateNameValidator(listMailboxNameAsStringExist),
|
DuplicateNameValidator(listMailboxNameAsStringExist),
|
||||||
SpecialCharacterValidator()
|
SpecialCharacterValidator()
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -0,0 +1,46 @@
|
|||||||
|
import 'package:flutter_test/flutter_test.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/name_with_space_only_validator.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/state/verify_name_view_state.dart';
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
group('NameWithSpaceOnlyValidator::validate::test', () {
|
||||||
|
final validator = NameWithSpaceOnlyValidator();
|
||||||
|
|
||||||
|
test('should return failure when name is spaces only', () {
|
||||||
|
final result = validator.validate(NewNameRequest(' '));
|
||||||
|
expect(result.isLeft(), isTrue);
|
||||||
|
result.fold(
|
||||||
|
(failure) => expect(failure, isA<VerifyNameFailure>()),
|
||||||
|
(_) => fail('Expected a failure, but got a success.'),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should return success when name is null', () {
|
||||||
|
final result = validator.validate(NewNameRequest(null));
|
||||||
|
expect(result.isRight(), isTrue);
|
||||||
|
result.fold(
|
||||||
|
(_) => fail('Expected a success, but got a failure.'),
|
||||||
|
(success) => expect(success, isA<VerifyNameViewState>()),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should return success when name is empty', () {
|
||||||
|
final result = validator.validate(NewNameRequest(''));
|
||||||
|
expect(result.isRight(), isTrue);
|
||||||
|
result.fold(
|
||||||
|
(_) => fail('Expected a success, but got a failure.'),
|
||||||
|
(success) => expect(success, isA<VerifyNameViewState>()),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should return success when name is valid', () {
|
||||||
|
final result = validator.validate(NewNameRequest('validName'));
|
||||||
|
expect(result.isRight(), isTrue);
|
||||||
|
result.fold(
|
||||||
|
(_) => fail('Expected a success, but got a failure.'),
|
||||||
|
(success) => expect(success, isA<VerifyNameViewState>()),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user