From 0545a84229c8d6e17f10ca856a9a231a619ed340 Mon Sep 17 00:00:00 2001 From: akulikov Date: Mon, 10 Apr 2023 16:46:52 +0300 Subject: [PATCH] BankAccountServiceTest --- .../account/config/ValidationConfig.java | 70 ---------------- .../BankAccountValidationConfig.java | 37 +++++---- .../account/service/AccountService.java | 10 ++- .../account/service/BankAccountService.java | 80 ++++++++++--------- .../service/BankAccountServiceTest.java | 65 ++++++++++----- .../common/rules/FieldRequiredRule.java | 15 ++-- 6 files changed, 123 insertions(+), 154 deletions(-) delete mode 100644 clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/ValidationConfig.java diff --git a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/ValidationConfig.java b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/ValidationConfig.java deleted file mode 100644 index f6e0e1deb..000000000 --- a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/ValidationConfig.java +++ /dev/null @@ -1,70 +0,0 @@ -package ru.spcex.clearing.account.config; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import ru.clearing.classes.statics.data.account.Account; -import ru.clearing.classes.statics.data.account.AccountBalance; -import ru.clearing.classes.statics.data.company.Company; -import ru.clearing.classes.statics.data.company.CompanySymbols; -import ru.spcex.clearing.account.validation.AccountValidationRule; -import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.platform.messaging.domain.cud.account.BankAccountNewRequest; -import ru.spcex.platform.classes.base.SpcexObjectBase; -import ru.spcex.platform.imdg.api.Imdg; -import ru.spcex.platform.imdg.api.ImdgProvider; -import ru.spcex.platform.imdg.validation.ImdgValidationContext; -import ru.spcex.platform.utils.validation.IValidator; -import ru.spcex.platform.utils.validation.ValidatorImpl; - -import java.util.HashMap; -import java.util.Map; -import java.util.function.BiConsumer; -import java.util.function.Consumer; -import java.util.function.Function; - -@Configuration -public class ValidationConfig { - Logger log = LoggerFactory.getLogger(getClass()); - private final Map> imdgs; - - public ValidationConfig(ImdgProvider imdgProvider) { - log.debug("Init validator config"); - this.imdgs = new HashMap<>(); - BiConsumer> addImdg = (s, aClass) -> imdgs.put(s, imdgProvider.getImdg(s, aClass)); - addImdg.accept(IMDGDistributedNames.Map_Account, Account.class); - addImdg.accept(IMDGDistributedNames.Map_Company, Company.class); - addImdg.accept(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class); - addImdg.accept(IMDGDistributedNames.Map_AccountBalance, AccountBalance.class); - } - - /** - * чтобы во всех валидаторах был один экземпляр Imdg - */ - private Imdg getImdg(String key) { - return imdgs.get(key); - } - - @Bean("bankAccountNewRequestValidator") - public Function bankAccountNewRequestValidator() { - log.debug("Create validator bankAccountNewRequestValidator"); - return bankAccountNewRequest -> { - ImdgValidationContext context = new ImdgValidationContext<>(); - context.setValidatedObject(bankAccountNewRequest); - Consumer addImdg = (s) -> context.addImdg(s, getImdg(s)); - addImdg.accept(IMDGDistributedNames.Map_Account); - addImdg.accept(IMDGDistributedNames.Map_Company); - addImdg.accept(IMDGDistributedNames.Map_AccountBalance); - - return new ValidatorImpl<>(context, - AccountValidationRule.RequiredFields, - AccountValidationRule.RubRequiredFields, - AccountValidationRule.AccountIsNew, - AccountValidationRule.CompanyPresent - ); - }; - //todo после слияния ветки CLR_51_57 переписать на использование DictionaryPresentRule, FieldRequiredRule - } - -} diff --git a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/validation/BankAccountValidationConfig.java b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/validation/BankAccountValidationConfig.java index 9d0995c17..694ba7b33 100644 --- a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/validation/BankAccountValidationConfig.java +++ b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/validation/BankAccountValidationConfig.java @@ -5,13 +5,11 @@ import org.springframework.context.annotation.Configuration; import ru.clearing.classes.statics.data.account.Account; import ru.clearing.classes.statics.data.account.BankAccount; import ru.clearing.classes.statics.data.company.Company; -import ru.clearing.platform.dictionary.CurrencyCodeDictionary; import ru.spcex.clearing.account.errors.AccountError; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.cud.account.BankAccountNewRequest; import ru.spcex.clearing.platform.messaging.domain.cud.account.BankAccountUpdateRequest; import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; -import ru.spcex.clearing.validation.common.rules.DictionaryPresentRule; import ru.spcex.clearing.validation.common.rules.EnumPresentRule; import ru.spcex.clearing.validation.common.rules.FieldRequiredRule; import ru.spcex.clearing.validation.common.rules.IdPresentRule; @@ -74,12 +72,14 @@ public class BankAccountValidationConfig { CurrencyCode.values(), AccountError.WrongFieldValue, AccountError.RequiredFieldEmpty), - DictionaryPresentRule.instance("currency", - BankAccountNewRequest::getCurrency, - IMDGDistributedNames.Map_CurrencyCodeDictionary, - CurrencyCodeDictionary.class, - AccountError.RequiredFieldEmpty, - AccountError.WrongFieldValue), +// todo currency codes not present in currency_code_dictionary, uncomment when present +// +// DictionaryPresentRule.instance("currency", +// BankAccountNewRequest::getCurrency, +// IMDGDistributedNames.Map_CurrencyCodeDictionary, +// CurrencyCodeDictionary.class, +// AccountError.RequiredFieldEmpty, +// AccountError.WrongFieldValue), FieldRequiredRule.instance("bankIdentificationCode", BankAccountNewRequest::getBankIdentificationCode, AccountError.RequiredFieldEmpty), @@ -168,19 +168,21 @@ public class BankAccountValidationConfig { CurrencyCode.values(), false, AccountError.WrongFieldValue, - AccountError.RequiredFieldEmpty), - DictionaryPresentRule.instance("currency", - BankAccountUpdateRequest::getCurrency, - IMDGDistributedNames.Map_CurrencyCodeDictionary, - CurrencyCodeDictionary.class, - AccountError.RequiredFieldEmpty, - AccountError.WrongFieldValue, - false) + AccountError.RequiredFieldEmpty) +// todo currency codes not present in currency_code_dictionary, uncomment when present +// +// DictionaryPresentRule.instance("currency", +// BankAccountUpdateRequest::getCurrency, +// IMDGDistributedNames.Map_CurrencyCodeDictionary, +// CurrencyCodeDictionary.class, +// AccountError.RequiredFieldEmpty, +// AccountError.WrongFieldValue, +// false) ); }; } - @Bean("bankAccountUpdateRequestValidator") + @Bean("bankAccountDeleteRequestValidator") public Function bankAccountDeleteRequestValidator( Map> imdgForValidation ) { @@ -189,6 +191,7 @@ public class BankAccountValidationConfig { context.setValidatedObject(bankAccountDeleteRequest); Consumer addImdg = (s) -> context.addImdg(s, imdgForValidation.get(s)); addImdg.accept(IMDGDistributedNames.Map_BankAccount); + addImdg.accept(IMDGDistributedNames.Map_Account); return new ValidatorImpl<>(context, IdPresentRule.instance("id", CommonDeleteRequest::getId, diff --git a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/AccountService.java b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/AccountService.java index a3461b62b..b3885b9aa 100644 --- a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/AccountService.java +++ b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/AccountService.java @@ -15,6 +15,7 @@ import ru.spcex.clearing.platform.messaging.domain.cud.account.sdf01.AccountSdfR import ru.spcex.clearing.platform.messaging.domain.cud.balance.AccountSdfToStatementRequestPart; import ru.spcex.clearing.platform.messaging.domain.cud.balance.StatementRequest; import ru.spcex.clearing.platform.messaging.service.QueueConsumer; +import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; @@ -43,9 +44,12 @@ public class AccountService extends QueueConsumer implements InitializingBean { init(); } - public void accountNew(BaseRequest userRequest) { - AccountSdf01Request req = userRequest.getRequestPayload(); + public RequestInfoUpdate accountNew(BaseRequest userRequest) { log.debug("AccountSdf01Request received"); + + // todo add validation (create task for that?) + + AccountSdf01Request req = userRequest.getRequestPayload(); List accountToStatement = new ArrayList<>(); for (AccountSdfRequestPart accountReq : req.getAccounts()) { Account account = new Account(); @@ -58,6 +62,8 @@ public class AccountService extends QueueConsumer implements InitializingBean { } sendStatementRequestBack(req.getGroupingSdf01Id(), accountToStatement); log.debug("successfully processed, grouping id={}, processed number={}", req.getGroupingSdf01Id(), accountToStatement.size()); + + return null; } public void accountUpdateWithBrake(BaseRequest userRequest) { diff --git a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/BankAccountService.java b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/BankAccountService.java index 992297cf5..5132eece9 100644 --- a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/BankAccountService.java +++ b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/BankAccountService.java @@ -19,18 +19,17 @@ import ru.spcex.clearing.platform.messaging.domain.cud.account.BankAccountUpdate import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; import ru.spcex.clearing.platform.messaging.service.QueueConsumer; import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; -import ru.spcex.clearing.platform.messaging.service.Status; +import ru.spcex.clearing.util.security.UserRoleVerification; +import ru.spcex.clearing.validation.common.ValidationHelper; import ru.spcex.platform.enumeration.AccountStatus; import ru.spcex.platform.enumeration.AccountType; import ru.spcex.platform.enumeration.Allowed; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; -import ru.spcex.platform.utils.enumeration.EnumMessage; import ru.spcex.platform.utils.enumeration.IMessageResolver; import ru.spcex.platform.utils.validation.IValidator; import java.time.Instant; -import java.util.Optional; import java.util.function.Function; @Service @@ -41,27 +40,37 @@ public class BankAccountService extends QueueConsumer implements InitializingBea private final Imdg relationMap; private final IMessageResolver messageResolver; + private UserRoleVerification userRoleVerification; + private ValidationHelper validationHelper; // private final Imdg userImdg; // private final Imdg userRoleSessionImdg; private final Function bankAccountNewRequestValidator; + private final Function bankAccountUpdateRequestValidator; + private final Function bankAccountDeleteRequestValidator; @Autowired public BankAccountService(Consumer kafkaQueue, Producer kafkaProducer, ImdgProvider imdgProvider, IMessageResolver messageResolver, - + UserRoleVerification userRoleVerification, + ValidationHelper validationHelper, @Qualifier("bankAccountNewRequestValidator") - Function bankAccountNewRequestValidator) { + Function bankAccountNewRequestValidator, + @Qualifier("bankAccountUpdateRequestValidator") + Function bankAccountUpdateRequestValidator, + @Qualifier("bankAccountDeleteRequestValidator") + Function bankAccountDeleteRequestValidator) { super(kafkaQueue, kafkaProducer); this.bankAccountMap = imdgProvider.getImdg(IMDGDistributedNames.Map_BankAccount, BankAccount.class); this.accountMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Account, Account.class); this.relationMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Relation, Relation.class); this.messageResolver = messageResolver; - -// this.userImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_User, User.class); -// this.userRoleSessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_UserRoleSession, UserRoleSession.class); + this.userRoleVerification = userRoleVerification; + this.validationHelper = validationHelper; this.bankAccountNewRequestValidator = bankAccountNewRequestValidator; + this.bankAccountUpdateRequestValidator = bankAccountUpdateRequestValidator; + this.bankAccountDeleteRequestValidator = bankAccountDeleteRequestValidator; } @Override @@ -78,36 +87,17 @@ public class BankAccountService extends QueueConsumer implements InitializingBea init(); } -// protected Optional checkUserRole(Long userId) { -// User user = userImdg.getSingleObjectByID(userId); -// if (user == null) { -// return Optional.of(new EnumMessage(AccountError.userNotFound(5007))); -// } -// UserRoleSession role=userRoleSessionImdg.getSingleObjectBySql("userId="+userId+" and userRoleSessions.userRole='ADMN'"); -// if (role == null) { -// return Optional.of(new EnumMessage(AccountError.userNotFound(5001))); // Нет прав на проведение данной операции». -// } -// return Optional.empty(); -// } - - private RequestInfoUpdate bankAccountNew(BaseRequest userRequest) { - BankAccountNewRequest req = userRequest.getRequestPayload(); - -// // проверка прав -// checkUserRole(req.getUserId()); - // валидация - IValidator validator = bankAccountNewRequestValidator.apply(req); - Optional error = validator.tillFirstError(); - if (error.isPresent()) { - log.warn("BankAccountNewRequest[{}] validation error: {}", userRequest.getId(), error.get()); - String errorMsg = messageResolver.resolve(error.get()); - return new RequestInfoUpdate() - .setId(userRequest.getId()) - .setStatus(Status.Error) - .setMessage(errorMsg); - } + public RequestInfoUpdate bankAccountNew(BaseRequest userRequest) { log.debug("BankAccountNewRequest received"); + + RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest); + if (requestInfoUpdate != null) return requestInfoUpdate; + + requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, bankAccountNewRequestValidator); + if (requestInfoUpdate != null) return requestInfoUpdate; + + BankAccountNewRequest req = userRequest.getRequestPayload(); BankAccount bankAccount = new BankAccount(); bankAccount.setBankIdentificationCode(req.getBankIdentificationCode()); bankAccount.setBankName(req.getBankName()); @@ -141,14 +131,21 @@ public class BankAccountService extends QueueConsumer implements InitializingBea accountMap.insert(account); bankAccount.setAccountId(account.getId()); - bankAccountMap.insert(bankAccount); - log.debug("successfully processed, new id {}", bankAccount.getId()); + Long bankAccountId = bankAccountMap.insert(bankAccount); + log.debug("successfully processed, new id {}", bankAccountId); return null; } private RequestInfoUpdate bankAccountUpdate(BaseRequest userRequest) { BankAccountUpdateRequest req = userRequest.getRequestPayload(); log.debug("BankAccountUpdateRequest received id = {}", req.getId()); + + RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest); + if (requestInfoUpdate != null) return requestInfoUpdate; + + requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, bankAccountUpdateRequestValidator); + if (requestInfoUpdate != null) return requestInfoUpdate; + BankAccount bankAccount = bankAccountMap.getSingleObjectByID(req.getId()); bankAccount.setBankIdentificationCode(req.getBankIdentificationCode()); bankAccount.setBankName(req.getBankName()); @@ -172,6 +169,13 @@ public class BankAccountService extends QueueConsumer implements InitializingBea private RequestInfoUpdate bankAccountDelete(BaseRequest userRequest) { CommonDeleteRequest req = userRequest.getRequestPayload(); + + RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest); + if (requestInfoUpdate != null) return requestInfoUpdate; + + requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, bankAccountDeleteRequestValidator); + if (requestInfoUpdate != null) return requestInfoUpdate; + log.debug("CommonDeleteRequest received id = {}", req.getId()); BankAccount bankAccount = bankAccountMap.getSingleObjectByID(req.getId()); diff --git a/clearing-parent/account-service/src/test/java/ru/spcex/clearing/account/service/BankAccountServiceTest.java b/clearing-parent/account-service/src/test/java/ru/spcex/clearing/account/service/BankAccountServiceTest.java index 5bfb30923..5f12e42ed 100644 --- a/clearing-parent/account-service/src/test/java/ru/spcex/clearing/account/service/BankAccountServiceTest.java +++ b/clearing-parent/account-service/src/test/java/ru/spcex/clearing/account/service/BankAccountServiceTest.java @@ -16,10 +16,12 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; import ru.clearing.classes.statics.data.account.Account; import ru.clearing.classes.statics.data.account.BankAccount; import ru.clearing.classes.statics.data.company.Company; -import ru.spcex.clearing.account.config.ErrorResolverConfig; +import ru.spcex.clearing.account.config.BeanConfiguration; import ru.spcex.clearing.account.config.HazelcastServiceTestConfiguration; import ru.spcex.clearing.account.config.KafkaConfigTest; -import ru.spcex.clearing.account.config.ValidationConfig; +import ru.spcex.clearing.account.config.validation.BankAccountValidationConfig; +import ru.spcex.clearing.account.config.validation.ValidationConfig; +import ru.spcex.clearing.account.errors.AccountError; import ru.spcex.clearing.account.utils.MatcherFactory.Matcher; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.ActionType; @@ -32,8 +34,11 @@ import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; import ru.spcex.platform.enumeration.AccountType; import ru.spcex.platform.enumeration.Allowed; import ru.spcex.platform.enumeration.Status; +import ru.spcex.platform.enumeration.WorkflowStatus; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService; +import ru.spcex.platform.utils.enumeration.EnumMessage; +import ru.spcex.platform.utils.enumeration.IMessageResolver; import javax.annotation.PostConstruct; import java.util.concurrent.atomic.AtomicInteger; @@ -47,9 +52,10 @@ import static ru.spcex.clearing.platform.messaging.service.Status.Error; @ExtendWith(SpringExtension.class) @ContextConfiguration(classes = { - ErrorResolverConfig.class, BankAccountService.class, ValidationConfig.class, + BankAccountValidationConfig.class, + BeanConfiguration.class, HazelcastServiceTestConfiguration.class, KafkaConfigTest.class}) public class BankAccountServiceTest { @@ -78,6 +84,9 @@ public class BankAccountServiceTest { private Imdg bankAccountImdg; private Imdg accountImdg; + @Autowired + private IMessageResolver messageResolver; + @Autowired @Qualifier("hazelcastServiceTest") private HazelcastService hazelcastServiceTest; @@ -116,6 +125,7 @@ public class BankAccountServiceTest { public void bankAccountNew() { //ARRANGE BankAccount predictableBankAccount = getBankAccount(); + Company company = getTestCompany(); companyImdg.insert(company); Account predictableAccount = getTestAccount(accountId, acc); @@ -160,60 +170,77 @@ public class BankAccountServiceTest { companyImdg.insert(company); BankAccountNewRequest bankAccountNewRequest = getBankAccountNewRequest(predictableBankAccount); + String errMsg; //AccountValidationRule.RequiredFields //WrongFieldValue bankAccountNewRequest.setCurrency(null); - checkError("(5004) args [currency]", bankAccountNewRequest); + errMsg = messageResolver.resolve(new EnumMessage(AccountError.RequiredFieldEmpty, "currency")); + checkError(errMsg, bankAccountNewRequest); + + bankAccountNewRequest.setCurrency("TT0"); + errMsg = messageResolver.resolve(new EnumMessage(AccountError.WrongFieldValue, "currency")); + checkError(errMsg, bankAccountNewRequest); bankAccountNewRequest.setCurrency(currency); bankAccountNewRequest.setBankIdentificationCode(null); - checkError("(5004) args [bankIdentificationCode]", bankAccountNewRequest); + errMsg = messageResolver.resolve(new EnumMessage(AccountError.RequiredFieldEmpty, "bankIdentificationCode")); + checkError(errMsg, bankAccountNewRequest); bankAccountNewRequest.setBankIdentificationCode(bankIdentificationCode); bankAccountNewRequest.setBankName(null); - checkError("(5004) args [bankName]", bankAccountNewRequest); + errMsg = messageResolver.resolve(new EnumMessage(AccountError.RequiredFieldEmpty, "bankName")); + checkError(errMsg, bankAccountNewRequest); bankAccountNewRequest.setBankName(bankName); bankAccountNewRequest.setAccount(null); - checkError("(5004) args [account]", bankAccountNewRequest); + errMsg = messageResolver.resolve(new EnumMessage(AccountError.RequiredFieldEmpty, "account")); + checkError(errMsg, bankAccountNewRequest); bankAccountNewRequest.setAccount(acc); bankAccountNewRequest.setDestination(null); - checkError("(5004) args [destination]", bankAccountNewRequest); + errMsg = messageResolver.resolve(new EnumMessage(AccountError.RequiredFieldEmpty, "destination")); + checkError(errMsg, bankAccountNewRequest); bankAccountNewRequest.setDestination(destination); bankAccountNewRequest.setCompanyId(null); - checkError("(5004) args [companyId]", bankAccountNewRequest); + errMsg = messageResolver.resolve(new EnumMessage(AccountError.RequiredFieldEmpty, "companyId")); + checkError(errMsg, bankAccountNewRequest); bankAccountNewRequest.setCompanyId(addresseeIdNew); //AccountValidationRule.RubRequiredFields - //WrongFieldValue + //RequiredFieldEmpty bankAccountNewRequest.setCorrespondentAccount(null); - checkError("(5004) args [correspondentAccount]", bankAccountNewRequest); + errMsg = messageResolver.resolve(new EnumMessage(AccountError.RequiredFieldEmpty, "correspondentAccount")); + checkError(errMsg, bankAccountNewRequest); bankAccountNewRequest.setCorrespondentAccount(correspondentAccount); bankAccountNewRequest.setCorrespondentAccountName(null); - checkError("(5004) args [correspondentAccountName]", bankAccountNewRequest); + errMsg = messageResolver.resolve(new EnumMessage(AccountError.RequiredFieldEmpty, "correspondentAccountName")); + checkError(errMsg, bankAccountNewRequest); bankAccountNewRequest.setCorrespondentAccountName(correspondentAccountName); bankAccountNewRequest.setTaxpayerIdentificationNumber(null); - checkError("(5004) args [taxpayerIdentificationNumber]", bankAccountNewRequest); + errMsg = messageResolver.resolve(new EnumMessage(AccountError.RequiredFieldEmpty, "taxpayerIdentificationNumber")); + checkError(errMsg, bankAccountNewRequest); bankAccountNewRequest.setTaxpayerIdentificationNumber(taxpayerIdentificationNumber); bankAccountNewRequest.setTaxRegistrationReasonCode(null); - checkError("(5004) args [taxRegistrationReasonCode]", bankAccountNewRequest); + errMsg = messageResolver.resolve(new EnumMessage(AccountError.RequiredFieldEmpty, "taxRegistrationReasonCode")); + checkError(errMsg, bankAccountNewRequest); bankAccountNewRequest.setTaxRegistrationReasonCode(taxRegistrationReasonCode); //AccountValidationRule.CompanyPresent //CompanyNotFound bankAccountNewRequest.setCompanyId(999924535239L); - checkError("(5013) args []", bankAccountNewRequest); + errMsg = messageResolver.resolve(new EnumMessage(AccountError.CompanyNotFound, "companyId")); + checkError(errMsg, bankAccountNewRequest); //CompanyNotActive company.setWorkflowStatus(Status.Blocked.getKey()); companyImdg.insert(company); bankAccountNewRequest.setCompanyId(company.getId()); - checkError("(5014) args []", bankAccountNewRequest); + errMsg = messageResolver.resolve(new EnumMessage(AccountError.CompanyNotActive, "companyId")); + checkError(errMsg, bankAccountNewRequest); //AccountValidationRule.AccountIsNew //AccountAlreadyExist @@ -221,7 +248,8 @@ public class BankAccountServiceTest { companyImdg.insert(company); Account existAccount = getTestAccount(accountId, acc); accountImdg.insert(existAccount); - checkError("(5010) args []", bankAccountNewRequest); + errMsg = messageResolver.resolve(new EnumMessage(AccountError.AccountAlreadyExist, "account")); + checkError(errMsg, bankAccountNewRequest); accountImdg.delete(existAccount); } @@ -282,7 +310,7 @@ public class BankAccountServiceTest { predictableUpdateBankAccount.setBankIdentificationCode("88888"); predictableUpdateBankAccount.setCorrespondentAccount("894984646541316"); predictableUpdateBankAccount.setCorrespondentAccountName("BIK OF NEW BUNK"); - predictableUpdateBankAccount.setCurrency("EU"); + predictableUpdateBankAccount.setCurrency("RUB"); predictableUpdateBankAccount.setDestination("OOO NEW BUNK"); predictableUpdateBankAccount.setTaxpayerIdentificationNumber("65468461321"); predictableUpdateBankAccount.setTaxRegistrationReasonCode("532137"); @@ -332,6 +360,7 @@ public class BankAccountServiceTest { bankAccountImdg.insert(bankAccountExists); Account account = new Account(); account.setId(accountId); + account.setAccountStatus(WorkflowStatus.Active.getKey()); accountImdg.insert(account); CommonDeleteRequest commonDeleteRequest = new CommonDeleteRequest(); diff --git a/clearing-parent/clearing-validation/src/main/java/ru/spcex/clearing/validation/common/rules/FieldRequiredRule.java b/clearing-parent/clearing-validation/src/main/java/ru/spcex/clearing/validation/common/rules/FieldRequiredRule.java index ca46f4519..43c6e0e0a 100644 --- a/clearing-parent/clearing-validation/src/main/java/ru/spcex/clearing/validation/common/rules/FieldRequiredRule.java +++ b/clearing-parent/clearing-validation/src/main/java/ru/spcex/clearing/validation/common/rules/FieldRequiredRule.java @@ -15,7 +15,7 @@ import java.util.function.Function; * @param fieldName Название поля * @param getter Метод получения значения * @param errorEmptyRequiredValue Ошибка, которая будет возвращена, если поле пустое - * @param additionalChecks Дополнительные проверки, связанные с этим полем. Выполняются при required == true + * @param additionalChecks Дополнительные проверки, связанные с этим полем * @param required Флаг обязательности поля * @param Класс проверяемого объекта * @param Класс проверяемого значения @@ -32,7 +32,7 @@ public record FieldRequiredRule( * @param fieldName Название поля * @param getter Метод получения значения * @param errorEmptyRequiredValue Ошибка, которая будет возвращена, если поле пустое - * @param additionalChecks Дополнительные проверки, связанные с этим полем. Выполняются при required == true + * @param additionalChecks Дополнительные проверки, связанные с этим полем * @param required Флаг обязательности поля * @param Класс проверяемого объекта * @param Класс проверяемого значения @@ -68,13 +68,10 @@ public record FieldRequiredRule( public Optional validate(ImdgValidationContext context) { R validatedObject = context.getValidatedObject(); V value = getter.apply(validatedObject); - if (required) { - if (value == null) return of(errorEmptyRequiredValue, fieldName); - for (Function additionalCheck : additionalChecks) { - IErrorEnumId validationError = additionalCheck.apply(value); - if (validationError != null) - return of(validationError, fieldName); - } + if (required && value == null) return of(errorEmptyRequiredValue, fieldName); + for (Function additionalCheck : additionalChecks) { + IErrorEnumId validationError = additionalCheck.apply(value); + if (validationError != null) return of(validationError, fieldName); } return empty(); }