accountImdg;
+
+ @PostConstruct
+ void init() {
+ companyImdg = hazelcast.getImdg(IMDGDistributedNames.Map_Company, Company.class);
+ accountImdg = hazelcast.getImdg(IMDGDistributedNames.Map_Account, Account.class);
+ }
+
+ @Test
+ void createAccountBalance() {
+ hazelcast.waitAvailable();
+ Company company = new Company();
+ company.setId(addresseeIdNew);
+ company.setTradingCode("code");
+ company.setShortName("ShortName");
+ company.setFullName("FullName");
+ companyImdg.insert(company);
+ Account account = new Account();
+ account.setId(accountIdNew);
+ account.setAccount("123456789");
+ account.setAccountType(AccountType.Clrn.getKey());
+ account.setAccountStatus(Status.Active.getKey());
+ accountImdg.insert(account);
+
+ AccountBalance accountBalanceNew = new AccountBalance();
+ accountBalanceNew.setId(id);
+ accountBalanceNew.setCompanyId(addresseeIdNew);
+ accountBalanceNew.setAccountId(accountIdNew);
+ accountBalanceNew.setAccountType(account.getAccountType());
+ accountBalanceNew.setAccount(account.getAccount());
+ accountBalanceNew.setOpenBalanceAmount(amountNew);
+ accountBalanceNew.setFreeBalanceAmount(amountNew);
+ accountBalanceNew.setBalanceAmount(amountNew);
+ accountBalanceNew.setBalanceAccountType(BalanceAccountType.Active.getKey());
+ accountBalanceNew.setCurrencyCode(cashMovementCurrencyCodeNew);
+ accountBalanceNew.setTradingCode(company.getTradingCode());
+ accountBalanceNew.setShortName(company.getShortName());
+ accountBalanceNew.setFullName(company.getFullName());
+ AccountResult predictableNewResult = new AccountResult(accountBalanceNew);
+ AccountResult resultNew = accountBalanceService.createAccountBalance(addresseeIdNew, accountIdNew, amountNew, cashMovementCurrencyCodeNew);
+ resultNew.getAccount().setId(id);
+
+ AccountBalance accountBalanceUpdate = new AccountBalance();
+ accountBalanceUpdate.setId(id);
+ accountBalanceUpdate.setCompanyId(addresseeIdUpdate);
+ accountBalanceUpdate.setAccountId(accountIdUpdate);
+ accountBalanceUpdate.setAccountType(account.getAccountType());
+ accountBalanceUpdate.setAccount(account.getAccount());
+ accountBalanceUpdate.setOpenBalanceAmount(amountUpdate);
+ accountBalanceUpdate.setFreeBalanceAmount(amountUpdate);
+ accountBalanceUpdate.setBalanceAmount(amountUpdate);
+ accountBalanceUpdate.setBalanceAccountType(BalanceAccountType.Active.getKey());
+ accountBalanceUpdate.setCurrencyCode(cashMovementCurrencyCodeUpdate);
+ accountBalanceUpdate.setTradingCode(company.getTradingCode());
+ accountBalanceUpdate.setShortName(company.getShortName());
+ accountBalanceUpdate.setFullName(company.getFullName());
+ AccountResult resultUpdate = accountBalanceService.createAccountBalance(addresseeIdUpdate, accountIdUpdate, amountUpdate, cashMovementCurrencyCodeUpdate);
+ resultUpdate.getAccount().setId(id);
+ AccountResult predictableUpdateResult = new AccountResult(accountBalanceUpdate);
+
+ ACCOUNT_BALANCE_MATCHER.assertMatch(resultNew, predictableNewResult);
+ ACCOUNT_BALANCE_MATCHER.assertMatch(resultUpdate, predictableUpdateResult);
+ }
+
+ @Test
+ void validatedCreateAccountBalance() {
+ AccountResult predictableResult;
+ hazelcast.waitAvailable();
+ predictableResult = new AccountResult(new EnumMessage(BalanceError.CompanyNotFound));
+
+ AccountResult result = accountBalanceService.createAccountBalance(addresseeIdNew, accountIdNew, amountNew, cashMovementCurrencyCodeNew);
+ ACCOUNT_BALANCE_MATCHER.assertMatch(result, predictableResult);
+
+ Company company = new Company();
+ company.setId(addresseeIdNew);
+ companyImdg.insert(company);
+
+ Account account = new Account();
+// account.setId(accountIdNew);
+ account.setAccountType(AccountType.Clrn.getKey());
+ account.setAccountStatus(Status.Active.getKey());
+ accountImdg.insert(account);
+ predictableResult = new AccountResult(new EnumMessage(BalanceError.AccountNotPresent));
+
+ result = accountBalanceService.createAccountBalance(addresseeIdNew, accountIdNew, amountNew, cashMovementCurrencyCodeNew);
+ ACCOUNT_BALANCE_MATCHER.assertMatch(result, predictableResult);
+
+ }
+}
\ No newline at end of file
diff --git a/clearing-parent/balance-service/src/test/java/ru/spcex/clearing/balance/utils/MatcherFactory.java b/clearing-parent/balance-service/src/test/java/ru/spcex/clearing/balance/utils/MatcherFactory.java
new file mode 100644
index 000000000..a18ccb4f0
--- /dev/null
+++ b/clearing-parent/balance-service/src/test/java/ru/spcex/clearing/balance/utils/MatcherFactory.java
@@ -0,0 +1,38 @@
+package ru.spcex.clearing.balance.utils;
+
+import java.util.Arrays;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Factory for creating test matchers.
+ *
+ * Comparing actual and expected objects via AssertJ
+ */
+public class MatcherFactory {
+
+ public static Matcher usingIgnoringFieldsComparator(String... fieldsToIgnore) {
+ return new Matcher<>(fieldsToIgnore);
+ }
+
+ public static class Matcher {
+ private final String[] fieldsToIgnore;
+
+ private Matcher(String... fieldsToIgnore) {
+ this.fieldsToIgnore = fieldsToIgnore;
+ }
+
+ public void assertMatch(T actual, T expected) {
+ assertThat(actual).usingRecursiveComparison().ignoringFields(fieldsToIgnore).isEqualTo(expected);
+ }
+
+ @SafeVarargs
+ public final void assertMatch(Iterable actual, T... expected) {
+ assertMatch(actual, Arrays.asList(expected));
+ }
+
+ public void assertMatch(Iterable actual, Iterable expected) {
+ assertThat(actual).usingRecursiveFieldByFieldElementComparatorIgnoringFields(fieldsToIgnore).isEqualTo(expected);
+ }
+ }
+}