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_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/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/state/verify_name_view_state.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, [
|
||||
EmptyNameValidator(),
|
||||
NameWithSpaceOnlyValidator(),
|
||||
DuplicateNameValidator(listMailboxName),
|
||||
SpecialCharacterValidator()
|
||||
]).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_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/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/state/verify_name_view_state.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_creator/domain/usecases/verify_name_interactor.dart';
|
||||
@@ -205,6 +206,7 @@ class DestinationPickerController extends BaseMailboxController {
|
||||
nameMailbox,
|
||||
[
|
||||
EmptyNameValidator(),
|
||||
NameWithSpaceOnlyValidator(),
|
||||
DuplicateNameValidator(listMailboxNameAsStringExist),
|
||||
SpecialCharacterValidator()
|
||||
]
|
||||
|
||||
@@ -6,36 +6,32 @@ abstract class VerifyNameException extends Equatable implements Exception {
|
||||
static const duplicatedName = 'The name already exists!';
|
||||
static const nameContainSpecialCharacter = 'The name cannot contain special characters';
|
||||
static const emailAddressInvalid = 'The email address invalid';
|
||||
static const spaceOnlyWithinName = 'The name cannot contain only spaces';
|
||||
|
||||
final String? message;
|
||||
|
||||
const VerifyNameException(this.message);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [message];
|
||||
}
|
||||
|
||||
class EmptyNameException extends VerifyNameException {
|
||||
const EmptyNameException() : super(VerifyNameException.emptyName);
|
||||
|
||||
@override
|
||||
List<Object> get props => [];
|
||||
}
|
||||
|
||||
class DuplicatedNameException extends VerifyNameException {
|
||||
const DuplicatedNameException() : super(VerifyNameException.duplicatedName);
|
||||
|
||||
@override
|
||||
List<Object> get props => [];
|
||||
}
|
||||
|
||||
class SpecialCharacterException extends VerifyNameException {
|
||||
const SpecialCharacterException() : super(VerifyNameException.nameContainSpecialCharacter);
|
||||
|
||||
@override
|
||||
List<Object> get props => [];
|
||||
}
|
||||
|
||||
class EmailAddressInvalidException extends VerifyNameException {
|
||||
const EmailAddressInvalidException() : super(VerifyNameException.emailAddressInvalid);
|
||||
}
|
||||
|
||||
@override
|
||||
List<Object> get props => [];
|
||||
class NameWithSpaceOnlyException extends VerifyNameException {
|
||||
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;
|
||||
} else if (exception is SpecialCharacterException) {
|
||||
return AppLocalizations.of(context).folderNameCannotContainSpecialCharacters;
|
||||
} else if (exception is NameWithSpaceOnlyException) {
|
||||
return AppLocalizations.of(context).this_field_cannot_be_blank;
|
||||
} else {
|
||||
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_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/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/state/verify_name_view_state.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)
|
||||
EmptyNameValidator(),
|
||||
NameWithSpaceOnlyValidator(),
|
||||
DuplicateNameValidator(listMailboxNameAsStringExist),
|
||||
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