FINERACT-1744

- [x] Batch api support for idempotency
- [x] BatchFilter for generic batch filtering
- [x] LoanCOBApiFilter extend with BatchFilter support
- [x] FineractRequestContextHolder generic context holder with batch and http request supports
This commit is contained in:
Janos Haber
2022-12-14 13:06:20 +01:00
committed by Arnold Gálovics
parent be958b9aef
commit 995b1ea021
14 changed files with 644 additions and 114 deletions
@@ -18,46 +18,47 @@
*/
package org.apache.fineract.commands.service;
import static org.mockito.Mockito.when;
import java.util.HashMap;
import org.apache.fineract.commands.domain.CommandWrapper;
import org.apache.fineract.infrastructure.core.config.FineractProperties;
import org.apache.fineract.infrastructure.core.domain.BatchRequestContextHolder;
import org.apache.fineract.infrastructure.core.domain.FineractRequestContextHolder;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.mockito.Spy;
public class IdempotencyKeyResolverTest {
@Mock
private IdempotencyKeyGenerator idempotencyKeyGenerator;
@Mock
private FineractProperties fineractProperties;
@InjectMocks
private IdempotencyKeyResolver underTest;
@Spy
private FineractRequestContextHolder fineractRequestContextHolder;
@BeforeEach
public void setup() {
MockitoAnnotations.openMocks(this);
BatchRequestContextHolder.setRequestAttributes(new HashMap<>());
}
@AfterEach
public void tearDown() {
BatchRequestContextHolder.resetRequestAttributes();
}
@Test
public void testIPKResolveFromRequest() {
String idkh = "foo";
String idk = "bar";
Mockito.when(fineractProperties.getIdempotencyKeyHeaderName()).thenReturn(idkh);
MockHttpServletRequest request = new MockHttpServletRequest();
request.addHeader(idkh, idk);
RequestAttributes requestAttributes = new ServletRequestAttributes(request);
RequestContextHolder.setRequestAttributes(requestAttributes);
fineractRequestContextHolder.setAttribute(SynchronousCommandProcessingService.IDEMPOTENCY_KEY_ATTRIBUTE, idk);
CommandWrapper wrapper = CommandWrapper.wrap("act", "ent", 1L, 1L);
String resolvedIdk = underTest.resolve(wrapper);
Assertions.assertEquals(idk, resolvedIdk);
@@ -66,8 +67,7 @@ public class IdempotencyKeyResolverTest {
@Test
public void testIPKResolveFromGenerate() {
String idk = "idk";
Mockito.when(idempotencyKeyGenerator.create()).thenReturn(idk);
RequestContextHolder.setRequestAttributes(null);
when(idempotencyKeyGenerator.create()).thenReturn(idk);
CommandWrapper wrapper = CommandWrapper.wrap("act", "ent", 1L, 1L);
String resolvedIdk = underTest.resolve(wrapper);
Assertions.assertEquals(idk, resolvedIdk);
@@ -75,7 +75,6 @@ public class IdempotencyKeyResolverTest {
@Test
public void testIPKResolveFromWrapper() {
RequestContextHolder.setRequestAttributes(null);
String idk = "idk";
CommandWrapper wrapper = new CommandWrapper(null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, idk);
@@ -31,6 +31,7 @@ import org.apache.fineract.commands.provider.CommandHandlerProvider;
import org.apache.fineract.infrastructure.configuration.domain.ConfigurationDomainService;
import org.apache.fineract.infrastructure.core.api.JsonCommand;
import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
import org.apache.fineract.infrastructure.core.domain.FineractRequestContextHolder;
import org.apache.fineract.infrastructure.core.serialization.ToApiJsonSerializer;
import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext;
import org.apache.fineract.useradministration.domain.AppUser;
@@ -41,6 +42,7 @@ import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.mockito.Spy;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
@@ -66,6 +68,9 @@ public class SynchronousCommandProcessingServiceTest {
@Mock
private CommandSourceService commandSourceService;
@Spy
private FineractRequestContextHolder fineractRequestContextHolder;
@InjectMocks
private SynchronousCommandProcessingService underTest;