From 673fc05e43af40233079be26ec42627c1471fda2 Mon Sep 17 00:00:00 2001 From: psemenkov Date: Tue, 6 Dec 2022 12:31:39 +0300 Subject: [PATCH] added new test payment, scheduler --- clearing-parent/backend-api/pom.xml | 32 ++-- .../Jackson2HttpConverterTestConfig.java | 15 +- .../controller/config/MessagesTestConfig.java | 28 +++ ...ig.java => StateLoaderImplTestConfig.java} | 4 +- .../config/WebSecurityTestConfigurer.java | 41 +++++ .../queue/AbstractControllerTest.java | 18 +- ...tClearingMemberCategoryControllerTest.java | 2 +- .../EditCompanySymbolControllerTest.java | 2 +- .../company/EditContactControllerTest.java | 2 +- .../ProfileDocumentControllerTest.java | 4 +- .../misc/NotificationControllerTest.java | 4 +- .../queue/misc/SessionControllerTest.java | 54 ++++++ .../PaymentInstructionControllerTest.java | 77 ++++++++ .../SchedulerAllTodayControllerTest.java | 61 +++++++ .../scheduler/SchedulerControllerTest.java | 59 ++++++ .../scheduler/TaskRunnerControllerTest.java | 169 ++++++++++++++++++ .../meta/GetResponseFactoryTest.java | 1 - 17 files changed, 539 insertions(+), 34 deletions(-) create mode 100644 clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/config/MessagesTestConfig.java rename clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/config/{StateLoaderImplConfig.java => StateLoaderImplTestConfig.java} (93%) create mode 100644 clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/config/WebSecurityTestConfigurer.java create mode 100644 clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/misc/SessionControllerTest.java create mode 100644 clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/payment/PaymentInstructionControllerTest.java create mode 100644 clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/scheduler/SchedulerAllTodayControllerTest.java create mode 100644 clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/scheduler/SchedulerControllerTest.java create mode 100644 clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/scheduler/TaskRunnerControllerTest.java diff --git a/clearing-parent/backend-api/pom.xml b/clearing-parent/backend-api/pom.xml index fe6637ee3..b65c78a6c 100644 --- a/clearing-parent/backend-api/pom.xml +++ b/clearing-parent/backend-api/pom.xml @@ -1,6 +1,6 @@ - 4.0.0 backend-api @@ -8,12 +8,12 @@ Clearing backend API module jar - - clearing-parent + + clearing-parent ru.spcex.clearing SPCEX-1.0.0.0 - + 17.0.1 @@ -25,9 +25,9 @@ spring-boot-starter-web - org.springframework.boot - spring-boot-starter-security - + org.springframework.boot + spring-boot-starter-security + org.keycloak keycloak-spring-boot-starter @@ -92,17 +92,21 @@ spring-boot-test-autoconfigure test + + org.mockito + mockito-core + - org.keycloak.bom - keycloak-adapter-bom - ${keycloak-spring-boot-starter.version} - pom - import - + org.keycloak.bom + keycloak-adapter-bom + ${keycloak-spring-boot-starter.version} + pom + import + diff --git a/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/config/Jackson2HttpConverterTestConfig.java b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/config/Jackson2HttpConverterTestConfig.java index d18cf9257..8abb52f95 100644 --- a/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/config/Jackson2HttpConverterTestConfig.java +++ b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/config/Jackson2HttpConverterTestConfig.java @@ -4,6 +4,8 @@ import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; @@ -21,16 +23,13 @@ public class Jackson2HttpConverterTestConfig { private JacksonObjectMapper() { //настройки Ильи configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true); - - //настройки какие были на курсе пока не нужны.. -// модуль для корректной сериализации LocalDateTime в поля JSON - JavaTimeModule модуль библиотеки jackson-datatype-jsr310 -// registerModule(new JavaTimeModule()); -// configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); - -// запрещаем доступ ко всем полям и методам класса и потом разрешаем доступ только к полям, нужны чтобы не было лишних полей из-за методов как: public ActionType getActionType() у BankAccountNewAction + //модуль для корректной сериализации LocalDateTime в поля JSON - JavaTimeModule модуль библиотеки jackson-datatype-jsr310 + registerModule(new JavaTimeModule()); + configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); + //запрещаем доступ ко всем полям и методам класса и потом разрешаем доступ только к полям, нужны чтобы не было лишних полей из-за методов как: public ActionType getActionType() у BankAccountNewAction setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.NONE); setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY); -// не сериализуем null-поля + //не сериализуем null-поля // setSerializationInclusion(JsonInclude.Include.NON_NULL); } diff --git a/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/config/MessagesTestConfig.java b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/config/MessagesTestConfig.java new file mode 100644 index 000000000..d8f51db0e --- /dev/null +++ b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/config/MessagesTestConfig.java @@ -0,0 +1,28 @@ +package ru.spcex.clearing.backendapi.controller.config; + +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.support.ResourceBundleMessageSource; +import ru.spcex.platform.utils.enumeration.IMessageResolver; +import ru.spcex.platform.utils.enumeration.SpringPropertiesMessageResolver; + +import java.util.Locale; + +@Configuration +public class MessagesTestConfig { + @Bean("validation-error-messages-test") + public ResourceBundleMessageSource messages() { + ResourceBundleMessageSource source = new ResourceBundleMessageSource(); + source.setBasenames("messages/error"); + source.setUseCodeAsDefaultMessage(true); + source.setDefaultEncoding("utf8"); + source.setDefaultLocale(Locale.ROOT); + return source; + } + + @Bean("errorTestResolver") + public IMessageResolver errorResolver(@Qualifier("validation-error-messages-test") ResourceBundleMessageSource messageBundle) { + return new SpringPropertiesMessageResolver(messageBundle); + } +} diff --git a/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/config/StateLoaderImplConfig.java b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/config/StateLoaderImplTestConfig.java similarity index 93% rename from clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/config/StateLoaderImplConfig.java rename to clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/config/StateLoaderImplTestConfig.java index 77afaa372..8e4828f3c 100644 --- a/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/config/StateLoaderImplConfig.java +++ b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/config/StateLoaderImplTestConfig.java @@ -13,7 +13,7 @@ import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService; @Configuration @Import({GetResponseFactoryTestConfiguration.class}) -public class StateLoaderImplConfig { +public class StateLoaderImplTestConfig { @Autowired @Qualifier("hazelcastServiceTest") @@ -25,7 +25,7 @@ public class StateLoaderImplConfig { return new GetResponseFactory(meta); } - @Bean(name = "stateLoaderImpl") + @Bean(name = "stateLoaderImplTest") public StateLoaderImpl createStateLoaderImpl(@Qualifier("responseFactoryTest") GetResponseFactory responseFactory) { return new StateLoaderImpl(hazelcastServiceTest, responseFactory); } diff --git a/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/config/WebSecurityTestConfigurer.java b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/config/WebSecurityTestConfigurer.java new file mode 100644 index 000000000..94d46c3f9 --- /dev/null +++ b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/config/WebSecurityTestConfigurer.java @@ -0,0 +1,41 @@ +package ru.spcex.clearing.backendapi.controller.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.core.userdetails.User; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.provisioning.InMemoryUserDetailsManager; +import org.springframework.security.web.SecurityFilterChain; + +@Configuration +public class WebSecurityTestConfigurer { + + @Bean + public InMemoryUserDetailsManager userDetailsService(PasswordEncoder passwordEncoder) { + UserDetails user = User.withUsername("spring") + .password(passwordEncoder.encode("secret")) + .roles("USER") + .build(); + return new InMemoryUserDetailsManager(user); + } + + @Bean + public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { + http.authorizeRequests() + .antMatchers("/task-runners/**") + .hasRole("USER") + .antMatchers("/**") + .permitAll() + .and() + .httpBasic(); + return http.build(); + } + + @Bean + public BCryptPasswordEncoder passwordEncoder() { + return new BCryptPasswordEncoder(); + } +} \ No newline at end of file diff --git a/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/AbstractControllerTest.java b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/AbstractControllerTest.java index bc40b6491..4ef207ea7 100644 --- a/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/AbstractControllerTest.java +++ b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/AbstractControllerTest.java @@ -18,6 +18,11 @@ import ru.spcex.clearing.backendapi.controller.queue.account.AccountController; import ru.spcex.clearing.backendapi.controller.queue.account.BankAccountController; import ru.spcex.clearing.backendapi.controller.queue.company.*; import ru.spcex.clearing.backendapi.controller.queue.misc.NotificationController; +import ru.spcex.clearing.backendapi.controller.queue.misc.SessionController; +import ru.spcex.clearing.backendapi.controller.queue.payment.PaymentInstructionController; +import ru.spcex.clearing.backendapi.controller.queue.scheduler.SchedulerAllTodayController; +import ru.spcex.clearing.backendapi.controller.queue.scheduler.SchedulerController; +import ru.spcex.clearing.backendapi.controller.queue.scheduler.TaskRunnerController; import ru.spcex.clearing.backendapi.meta.GetResponseFactory; import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService; @@ -38,12 +43,21 @@ import java.util.concurrent.atomic.AtomicLong; ProfileDocumentController.class, //misc NotificationController.class, - //***************************** + SessionController.class, + //payment + PaymentInstructionController.class, + //scheduler + SchedulerAllTodayController.class, + SchedulerController.class, + TaskRunnerController.class, + //******* common configs ******* WebTestConfig.class, IOperatorTest.class, KafkaTestConfig.class, HazelcastServiceTestConfiguration.class, - StateLoaderImplConfig.class, + StateLoaderImplTestConfig.class, + WebSecurityTestConfigurer.class, + MessagesTestConfig.class, Jackson2HttpConverterTestConfig.class}) @ExtendWith(SpringExtension.class) @WebMvcTest//(controllers = DeleteCompanyController.class) diff --git a/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/company/EditClearingMemberCategoryControllerTest.java b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/company/EditClearingMemberCategoryControllerTest.java index 35c9237fc..8b23a131d 100644 --- a/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/company/EditClearingMemberCategoryControllerTest.java +++ b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/company/EditClearingMemberCategoryControllerTest.java @@ -124,7 +124,7 @@ class EditClearingMemberCategoryControllerTest extends AbstractControllerTest { /** * {@link EditClearingMemberCategoryController#getAll()}
- * Тест проверяет получение запроса по REST API и отправку всех записей из таблицы hazelcast Map_BankAccount.
+ * Тест проверяет получение запроса по REST API и отправку всех записей из таблицы hazelcast Map_ClearingMemberCategory.
* Входной запрос /clearing-member-categories/
* Ответ CommonGetAllResponse
*/ diff --git a/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/company/EditCompanySymbolControllerTest.java b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/company/EditCompanySymbolControllerTest.java index 070d89804..157d217f5 100644 --- a/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/company/EditCompanySymbolControllerTest.java +++ b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/company/EditCompanySymbolControllerTest.java @@ -79,7 +79,7 @@ class EditCompanySymbolControllerTest extends AbstractControllerTest { /** * {@link EditCompanySymbolController#getAll()}
- * Тест проверяет получение запроса по REST API и отправку всех записей из таблицы hazelcast Map_BankAccount.
+ * Тест проверяет получение запроса по REST API и отправку всех записей из таблицы hazelcast Map_CompanySymbols.
* Входной запрос /clearing-member-categories/
* Ответ CommonGetAllResponse
*/ diff --git a/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/company/EditContactControllerTest.java b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/company/EditContactControllerTest.java index 4ff457db8..bcd732ff7 100644 --- a/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/company/EditContactControllerTest.java +++ b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/company/EditContactControllerTest.java @@ -80,7 +80,7 @@ class EditContactControllerTest extends AbstractControllerTest { /** * {@link EditContactController#getAll()}
- * Тест проверяет получение запроса по REST API и отправку всех записей из таблицы hazelcast Map_BankAccount.
+ * Тест проверяет получение запроса по REST API и отправку всех записей из таблицы hazelcast Map_Contact.
* Входной запрос /contacts/
* Ответ CommonGetAllResponse
*/ diff --git a/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/company/ProfileDocumentControllerTest.java b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/company/ProfileDocumentControllerTest.java index 1edb4516b..95b798af2 100644 --- a/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/company/ProfileDocumentControllerTest.java +++ b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/company/ProfileDocumentControllerTest.java @@ -23,8 +23,8 @@ class ProfileDocumentControllerTest extends AbstractControllerTest { /** * {@link ProfileDocumentController#getAll()}
- * Тест проверяет получение запроса по REST API и отправку всех записей из таблицы hazelcast Map_BankAccount.
- * Входной запрос /contacts/
+ * Тест проверяет получение запроса по REST API и отправку всех записей из таблицы hazelcast Map_ProfileDocument.
+ * Входной запрос /profile-documents/
* Ответ CommonGetAllResponse
*/ @Test diff --git a/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/misc/NotificationControllerTest.java b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/misc/NotificationControllerTest.java index e75f09dac..708cb12c3 100644 --- a/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/misc/NotificationControllerTest.java +++ b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/misc/NotificationControllerTest.java @@ -24,8 +24,8 @@ class NotificationControllerTest extends AbstractControllerTest { /** * {@link NotificationController#getAll()}
- * Тест проверяет получение запроса по REST API и отправку всех записей из таблицы hazelcast Map_BankAccount.
- * Входной запрос /contacts/
+ * Тест проверяет получение запроса по REST API и отправку всех записей из таблицы hazelcast Map_Notification.
+ * Входной запрос /notifications/
* Ответ CommonGetAllResponse
*/ @Test diff --git a/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/misc/SessionControllerTest.java b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/misc/SessionControllerTest.java new file mode 100644 index 000000000..83d4ebcef --- /dev/null +++ b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/misc/SessionControllerTest.java @@ -0,0 +1,54 @@ +package ru.spcex.clearing.backendapi.controller.queue.misc; + +import com.hazelcast.core.IMap; +import org.junit.jupiter.api.Test; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import ru.clearing.classes.statics.data.misc.Session; +import ru.spcex.clearing.backendapi.controller.queue.AbstractControllerTest; +import ru.spcex.clearing.backendapi.controller.response.entity.CommonGetAllResponse; +import ru.spcex.clearing.imdg.IMDGDistributedNames; + +import java.time.LocalDate; +import java.util.Collection; +import java.util.Map; + +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static ru.spcex.clearing.backendapi.controller.utils.JsonUtil.writeValue; + +class SessionControllerTest extends AbstractControllerTest { + private static final String REST_URL = "/sessions/"; + + /** + * {@link SessionController#getAll()}
+ * Тест проверяет получение запроса по REST API и отправку всех записей из таблицы hazelcast Map_Session.
+ * Входной запрос /sessions/
+ * Ответ CommonGetAllResponse
+ */ + @Test + void getAll() throws Exception { + //ARRANGE + Session session = new Session(); + session.setClearingDate(LocalDate.now()); + session.setSessionStatus("Ok"); + session.setId(currentId.get()); + + IMap iMap = hazelcastServiceTest.getHazelcast().getMap(IMDGDistributedNames.Map_Session); + iMap.put(session.getId(), session); + + Collection values = iMap.values(); + Collection> all = responseFactory.responseFromObjectCollection(values); + CommonGetAllResponse expected = new CommonGetAllResponse(); + expected.fromEntity(all); + //ACT + perform(MockMvcRequestBuilders.get(REST_URL) + .contentType(MediaType.APPLICATION_JSON)) + .andDo(print())//output to the log request and response + //ASSERT + .andExpect(status().isOk()) + .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON)) + .andExpect(content().json(writeValue(expected))); + } +} \ No newline at end of file diff --git a/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/payment/PaymentInstructionControllerTest.java b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/payment/PaymentInstructionControllerTest.java new file mode 100644 index 000000000..3fba79694 --- /dev/null +++ b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/payment/PaymentInstructionControllerTest.java @@ -0,0 +1,77 @@ +package ru.spcex.clearing.backendapi.controller.queue.payment; + +import com.hazelcast.core.IMap; +import org.junit.jupiter.api.Test; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import ru.clearing.classes.statics.data.payment.PaymentInstruction; +import ru.spcex.clearing.backendapi.controller.queue.AbstractControllerTest; +import ru.spcex.clearing.backendapi.controller.response.entity.CommonGetAllResponse; +import ru.spcex.clearing.imdg.IMDGDistributedNames; + +import java.time.Instant; +import java.time.LocalDate; +import java.util.Collection; +import java.util.Map; + +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static ru.spcex.clearing.backendapi.controller.utils.JsonUtil.writeValue; + +class PaymentInstructionControllerTest extends AbstractControllerTest { + private static final String REST_URL = "/paymentInstructions/"; + + /** + * {@link PaymentInstructionController#getAll()}
+ * Тест проверяет получение запроса по REST API и отправку всех записей из таблицы hazelcast Map_PaymentInstruction.
+ * Входной запрос /paymentInstructions/
+ * Ответ CommonGetAllResponse
+ */ + @Test + void getAll() throws Exception { + //ARRANGE + PaymentInstruction paymentInstruction = new PaymentInstruction(); + paymentInstruction.setSenderId(1010L); + paymentInstruction.setAddresseeId(1010L); + paymentInstruction.setAdresseeBIC("123456789"); + paymentInstruction.setPayeeBankName("BankName"); + paymentInstruction.setPayeeBIC("123456789"); + paymentInstruction.setAddresseeBankName("BankName"); + paymentInstruction.setPaymentDate(Instant.now()); + paymentInstruction.setPaymentPurpose("Purpose"); + paymentInstruction.setSettlementDate(LocalDate.now()); + paymentInstruction.setCreditLegAmount(2020L); + paymentInstruction.setDebitLegAmount(2020L); + paymentInstruction.setCreditLegAccountId(2020L); + paymentInstruction.setCreditCsAccount("Ok"); + paymentInstruction.setCreditLegAccount("123456789"); + paymentInstruction.setDebitLegAccountId(3030L); + paymentInstruction.setDebitCsAccount("123456789"); + paymentInstruction.setDebitLegAccount("123456789"); + paymentInstruction.setCreditLegDirection(3030L); + paymentInstruction.setDebitLegDirection(3030L); + paymentInstruction.setCreditLegCurrencyCode("123456789"); + paymentInstruction.setDebitLegCurrencyCode("123456789"); + paymentInstruction.setClearingDate(LocalDate.now()); + paymentInstruction.setTransactionStatus("Status"); + paymentInstruction.setDocumentNumber("123456789"); + paymentInstruction.setId(currentId.get()); + + IMap iMap = hazelcastServiceTest.getHazelcast().getMap(IMDGDistributedNames.Map_PaymentInstruction); + iMap.put(paymentInstruction.getId(), paymentInstruction); + + Collection values = iMap.values(); + Collection> all = responseFactory.responseFromObjectCollection(values); + CommonGetAllResponse expected = new CommonGetAllResponse(); + expected.fromEntity(all); + //ACT + perform(MockMvcRequestBuilders.get(REST_URL) + .contentType(MediaType.APPLICATION_JSON)) + .andDo(print())//output to the log request and response + //ASSERT + .andExpect(status().isOk()) + .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON)) + .andExpect(content().json(writeValue(expected))); + } +} \ No newline at end of file diff --git a/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/scheduler/SchedulerAllTodayControllerTest.java b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/scheduler/SchedulerAllTodayControllerTest.java new file mode 100644 index 000000000..74d861c93 --- /dev/null +++ b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/scheduler/SchedulerAllTodayControllerTest.java @@ -0,0 +1,61 @@ +package ru.spcex.clearing.backendapi.controller.queue.scheduler; + +import com.hazelcast.core.IMap; +import org.junit.jupiter.api.Test; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import ru.clearing.classes.statics.data.scheduler.SchedulerAllToday; +import ru.spcex.clearing.backendapi.controller.queue.AbstractControllerTest; +import ru.spcex.clearing.backendapi.controller.response.entity.CommonGetAllResponse; +import ru.spcex.clearing.imdg.IMDGDistributedNames; + +import java.time.LocalDate; +import java.time.LocalTime; +import java.util.Collection; +import java.util.Map; + +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static ru.spcex.clearing.backendapi.controller.utils.JsonUtil.writeValue; + +class SchedulerAllTodayControllerTest extends AbstractControllerTest { + private static final String REST_URL = "/schedule/schedulers-all-today/"; + + /** + * {@link SchedulerAllTodayController#getAll()}
+ * Тест проверяет получение запроса по REST API и отправку всех записей из таблицы hazelcast Map_SchedulerAllToday.
+ * Входной запрос /schedule/schedulers-all-today/
+ * Ответ CommonGetAllResponse
+ */ + @Test + void getAll() throws Exception { + //ARRANGE + SchedulerAllToday schedulerAllToday = new SchedulerAllToday(); + schedulerAllToday.setTask("Task"); + schedulerAllToday.setTaskTime(LocalTime.now()); + schedulerAllToday.setClearingDate(LocalDate.now()); + schedulerAllToday.setMarket("Market"); + schedulerAllToday.setTaskStatus("Ok"); + schedulerAllToday.setSecurityId(10210L); + schedulerAllToday.setSource("Source"); + schedulerAllToday.setOrigId(1010L); + schedulerAllToday.setId(currentId.get()); + + IMap iMap = hazelcastServiceTest.getHazelcast().getMap(IMDGDistributedNames.Map_SchedulerAllToday); + iMap.put(schedulerAllToday.getId(), schedulerAllToday); + + Collection values = iMap.values(); + Collection> all = responseFactory.responseFromObjectCollection(values); + CommonGetAllResponse expected = new CommonGetAllResponse(); + expected.fromEntity(all); + //ACT + perform(MockMvcRequestBuilders.get(REST_URL) + .contentType(MediaType.APPLICATION_JSON)) + .andDo(print())//output to the log request and response + //ASSERT + .andExpect(status().isOk()) + .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON)) + .andExpect(content().json(writeValue(expected))); + } +} \ No newline at end of file diff --git a/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/scheduler/SchedulerControllerTest.java b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/scheduler/SchedulerControllerTest.java new file mode 100644 index 000000000..8169d1099 --- /dev/null +++ b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/scheduler/SchedulerControllerTest.java @@ -0,0 +1,59 @@ +package ru.spcex.clearing.backendapi.controller.queue.scheduler; + +import com.hazelcast.core.IMap; +import org.junit.jupiter.api.Test; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import ru.clearing.classes.statics.data.scheduler.Scheduler; +import ru.spcex.clearing.backendapi.controller.queue.AbstractControllerTest; +import ru.spcex.clearing.backendapi.controller.response.entity.CommonGetAllResponse; +import ru.spcex.clearing.imdg.IMDGDistributedNames; + +import java.time.LocalDate; +import java.time.LocalTime; +import java.util.Collection; +import java.util.Map; + +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static ru.spcex.clearing.backendapi.controller.utils.JsonUtil.writeValue; + +class SchedulerControllerTest extends AbstractControllerTest { + private static final String REST_URL = "/schedule/schedulers/"; + + /** + * {@link SchedulerController#getAll()}
+ * Тест проверяет получение запроса по REST API и отправку всех записей из таблицы hazelcast Map_Scheduler.
+ * Входной запрос /schedule/schedulers/
+ * Ответ CommonGetAllResponse
+ */ + @Test + void getAll() throws Exception { + //ARRANGE + Scheduler scheduler = new Scheduler(); + scheduler.setTask("Task"); + scheduler.setTaskTime(LocalTime.now()); + scheduler.setClearingDate(LocalDate.now()); + scheduler.setMarket("Market"); + scheduler.setTaskStatus("Ok"); + scheduler.setSecurityId(10210L); + scheduler.setId(currentId.get()); + + IMap iMap = hazelcastServiceTest.getHazelcast().getMap(IMDGDistributedNames.Map_Scheduler); + iMap.put(scheduler.getId(), scheduler); + + Collection values = iMap.values(); + Collection> all = responseFactory.responseFromObjectCollection(values); + CommonGetAllResponse expected = new CommonGetAllResponse(); + expected.fromEntity(all); + //ACT + perform(MockMvcRequestBuilders.get(REST_URL) + .contentType(MediaType.APPLICATION_JSON)) + .andDo(print())//output to the log request and response + //ASSERT + .andExpect(status().isOk()) + .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON)) + .andExpect(content().json(writeValue(expected))); + } +} \ No newline at end of file diff --git a/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/scheduler/TaskRunnerControllerTest.java b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/scheduler/TaskRunnerControllerTest.java new file mode 100644 index 000000000..f224e2809 --- /dev/null +++ b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/scheduler/TaskRunnerControllerTest.java @@ -0,0 +1,169 @@ +package ru.spcex.clearing.backendapi.controller.queue.scheduler; + +import com.hazelcast.core.IMap; +import org.junit.jupiter.api.Test; +import org.keycloak.KeycloakPrincipal; +import org.keycloak.KeycloakSecurityContext; +import org.keycloak.adapters.spi.KeycloakAccount; +import org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken; +import org.keycloak.representations.AccessToken; +import org.springframework.core.NestedExceptionUtils; +import org.springframework.http.MediaType; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import ru.clearing.classes.statics.data.scheduler.TaskRunner; +import ru.clearing.classes.statics.data.user.User; +import ru.clearing.platform.dictionary.TaskDictionary; +import ru.spcex.clearing.backendapi.controller.queue.AbstractControllerTest; +import ru.spcex.clearing.backendapi.controller.queue.account.BankAccountController; +import ru.spcex.clearing.backendapi.controller.request.cud.account.BankAccountNewAction; +import ru.spcex.clearing.backendapi.controller.response.cud.CudResponse; +import ru.spcex.clearing.backendapi.controller.response.cud.QueueSuccessResponse; +import ru.spcex.clearing.backendapi.controller.response.entity.CommonGetAllResponse; +import ru.spcex.clearing.backendapi.domain.actions.IAction; +import ru.spcex.clearing.backendapi.errors.ActionValidationException; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.ActionType; +import ru.spcex.clearing.platform.messaging.domain.cud.account.BankAccountNewRequest; + +import java.util.Collection; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static ru.spcex.clearing.backendapi.controller.utils.JsonUtil.writeValue; + +class TaskRunnerControllerTest extends AbstractControllerTest { + private static final String REST_URL = "/task-runners/"; + + /** + * {@link TaskRunnerController#getAll()}
+ * Тест проверяет получение запроса по REST API и отправку всех записей из таблицы hazelcast Map_TaskRunner.
+ * Входной запрос /task-runners/
+ * Ответ CommonGetAllResponse
+ */ + @Test + void getAll() throws Exception { + //ARRANGE + TaskRunner taskRunner = new TaskRunner(); + taskRunner.setTask("Task"); + taskRunner.setSenderId(10210L); + taskRunner.setId(currentId.get()); + + IMap iMap = hazelcastServiceTest.getHazelcast().getMap(IMDGDistributedNames.Map_TaskRunner); + iMap.put(taskRunner.getId(), taskRunner); + + Collection values = iMap.values(); + Collection> all = responseFactory.responseFromObjectCollection(values); + CommonGetAllResponse expected = new CommonGetAllResponse(); + expected.fromEntity(all); + //ACT + perform(MockMvcRequestBuilders.get(REST_URL) + .contentType(MediaType.APPLICATION_JSON)) + .andDo(print())//output to the log request and response + //ASSERT + .andExpect(status().isOk()) + .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON)) + .andExpect(content().json(writeValue(expected))); + } + + + // @Test todo пока не работает ( + void add() throws Exception { + //ARRANGE + TaskDictionary taskDictionary = new TaskDictionary(); + IMap iMap = hazelcastServiceTest.getHazelcast().getMap(IMDGDistributedNames.Map_TaskDictionary); + iMap.put(taskDictionary.getId(), taskDictionary); + + CudResponse expected = new CudResponse(); + expected.setCode(0L); + expected.setMessage("success"); + expected.setPayload(new QueueSuccessResponse(ActionType.NEW, currentId.getAndIncrement())); + + setUserNameInMockSecurityContextAndMapUser("existUser"); + + //ACT + perform(MockMvcRequestBuilders.post(REST_URL + "ABLK") + .contentType(MediaType.APPLICATION_JSON)) + .andDo(print())//output to the log request and response + //ASSERT + .andExpect(status().isOk()) + .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON)) + .andExpect(content().json(writeValue(expected))); + } + + private void setUserNameInMockSecurityContextAndMapUser(String username) { + User user = new User(); + user.setIdentifier(username); + user.setId(currentId.get()); + + IMap iMap = hazelcastServiceTest.getHazelcast().getMap(IMDGDistributedNames.Map_User); + iMap.put(user.getId(), user); + + AccessToken accessToken = mock(AccessToken.class); + when(accessToken.getPreferredUsername()).thenReturn(username); + + KeycloakSecurityContext keycloakSecurityContext = mock(KeycloakSecurityContext.class); + when(keycloakSecurityContext.getToken()).thenReturn(accessToken); + + KeycloakPrincipal keycloakPrincipal = mock(KeycloakPrincipal.class); + when(keycloakPrincipal.getKeycloakSecurityContext()).thenReturn(keycloakSecurityContext); + + KeycloakAccount details = mock(KeycloakAccount.class); + when(details.getPrincipal()).thenReturn(keycloakPrincipal); + + KeycloakAuthenticationToken authentication = mock(KeycloakAuthenticationToken.class); + when(authentication.getDetails()).thenReturn(details); + SecurityContextHolder.getContext().setAuthentication(authentication); + } +// @Test +// void testWithPostProcessor() выдает Exception { +// perform(MockMvcRequestBuilders.get("/greet").with(jwt().jwt(jwt -> { +// jwt.claim("preferred_username", "Tonton Pirate"); +// }).authorities(List.of(new SimpleGrantedAuthority("NICE_GUY"), new SimpleGrantedAuthority("AUTHOR"))))) +// .andExpect(status().isOk()) +// .andExpect(content().string("Hi Tonton Pirate! You are granted with: [NICE_GUY, AUTHOR].")); +// } + + /** + * {@link BankAccountController#add(BankAccountNewAction)}
+ * Тест проверяет работу валидации сущности {@link BankAccountNewAction} принятой по REST API для отправку в Apache Kafka.
+ * Входной запрос {@link BankAccountNewRequest}:
+ * {@link BankAccountNewRequest#bankIdentificationCode} - 044525776 или ""
+ * {@link BankAccountNewRequest#bankName} - Beta Money Bank или ""
+ * {@link BankAccountNewRequest#correspondentAccount} - 30101111111111111776 или ""
+ * {@link BankAccountNewRequest#correspondentAccountName} - correspondent или ""
+ * {@link BankAccountNewRequest#currency} - RUB или ""
+ * {@link BankAccountNewRequest#destination} - destinatio или ""n
+ * {@link BankAccountNewRequest#taxpayerIdentificationNumber} - 3664011397 или ""
+ * {@link BankAccountNewRequest#taxRegistrationReasonCode} - 01 или ""
+ * {@link BankAccountNewRequest#account} - 11111222223333344444 или ""
+ */ + @Test + void addWithException() { +// assertThrowsFor(getBankAccountNewAction("", "Beta Money Bank", "30101111111111111776", "correspondent", "RUB", "destination", "3664011397", "01", "11111222223333344444")); +// assertThrowsFor(getBankAccountNewAction("044525776", "", "30101111111111111776", "correspondent", "RUB", "destination", "3664011397", "01", "11111222223333344444")); +// assertThrowsFor(getBankAccountNewAction("044525776", "Beta Money Bank", "", "correspondent", "RUB", "destination", "3664011397", "01", "11111222223333344444")); +// assertThrowsFor(getBankAccountNewAction("044525776", "Beta Money Bank", "30101111111111111776", "", "RUB", "destination", "3664011397", "01", "11111222223333344444")); +// assertThrowsFor(getBankAccountNewAction("044525776", "Beta Money Bank", "30101111111111111776", "correspondent", "", "destination", "3664011397", "01", "11111222223333344444")); +// assertThrowsFor(getBankAccountNewAction("044525776", "Beta Money Bank", "30101111111111111776", "correspondent", "RUB", "", "3664011397", "01", "11111222223333344444")); +// assertThrowsFor(getBankAccountNewAction("044525776", "Beta Money Bank", "30101111111111111776", "correspondent", "RUB", "destination", "", "01", "11111222223333344444")); +// assertThrowsFor(getBankAccountNewAction("044525776", "Beta Money Bank", "30101111111111111776", "correspondent", "RUB", "destination", "3664011397", "", "11111222223333344444")); +// assertThrowsFor(getBankAccountNewAction("044525776", "Beta Money Bank", "30101111111111111776", "correspondent", "RUB", "destination", "3664011397", "01", "")); + } + + private void assertThrowsFor(IAction iAction) { + assertThrows(ActionValidationException.class, () -> { + try { + perform(MockMvcRequestBuilders.post(REST_URL).contentType(MediaType.APPLICATION_JSON).content(writeValue(iAction))); + } catch (Exception e) { + Throwable rootCause = NestedExceptionUtils.getRootCause(e); + throw rootCause != null ? rootCause : e; + } + }); + } +} \ No newline at end of file diff --git a/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/meta/GetResponseFactoryTest.java b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/meta/GetResponseFactoryTest.java index a408322a5..3aea4aa28 100644 --- a/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/meta/GetResponseFactoryTest.java +++ b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/meta/GetResponseFactoryTest.java @@ -1,7 +1,6 @@ package ru.spcex.clearing.backendapi.meta; import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier;