diff --git a/mdx-gateway-generator/gradle.lockfile b/mdx-gateway-generator/gradle.lockfile index 8efb20cf..241e1ac6 100644 --- a/mdx-gateway-generator/gradle.lockfile +++ b/mdx-gateway-generator/gradle.lockfile @@ -1,12 +1,12 @@ # This is a Gradle generated file for dependency locking. # Manual edits can break the build and are not advised. # This file is expected to be part of source control. -com.auth0:java-jwt:4.6.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.auth0:java-jwt:4.6.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath com.datadoghq:dd-trace-api:1.38.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath com.fasterxml.jackson.core:jackson-annotations:2.22=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath -com.fasterxml.jackson.core:jackson-core:2.22.0=runtimeClasspath,testRuntimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.22.0=runtimeClasspath,testRuntimeClasspath -com.fasterxml.jackson:jackson-bom:2.22.0=runtimeClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-core:2.22.2=runtimeClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.22.2=runtimeClasspath,testRuntimeClasspath +com.fasterxml.jackson:jackson-bom:2.22.2=runtimeClasspath,testRuntimeClasspath com.fasterxml.woodstox:woodstox-core:7.2.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath com.github.rholder:guava-retrying:2.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath com.github.spotbugs:spotbugs-annotations:4.10.2=annotationProcessor,testAnnotationProcessor diff --git a/mdx-gateways/gradle.lockfile b/mdx-gateways/gradle.lockfile index 5ee8ed26..996487f1 100644 --- a/mdx-gateways/gradle.lockfile +++ b/mdx-gateways/gradle.lockfile @@ -1,12 +1,12 @@ # This is a Gradle generated file for dependency locking. # Manual edits can break the build and are not advised. # This file is expected to be part of source control. -com.auth0:java-jwt:4.6.0=annotationProcessor,compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.auth0:java-jwt:4.6.1=annotationProcessor,compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath com.datadoghq:dd-trace-api:1.38.0=annotationProcessor,compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath com.fasterxml.jackson.core:jackson-annotations:2.22=annotationProcessor,compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath -com.fasterxml.jackson.core:jackson-core:2.22.0=annotationProcessor,runtimeClasspath,testRuntimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.22.0=annotationProcessor,runtimeClasspath,testRuntimeClasspath -com.fasterxml.jackson:jackson-bom:2.22.0=annotationProcessor,runtimeClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-core:2.22.2=annotationProcessor,runtimeClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.22.2=annotationProcessor,runtimeClasspath,testRuntimeClasspath +com.fasterxml.jackson:jackson-bom:2.22.2=annotationProcessor,runtimeClasspath,testRuntimeClasspath com.fasterxml.woodstox:woodstox-core:7.2.1=annotationProcessor,compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath com.github.oowekyala.ooxml:nice-xml-messages:3.1=pmd com.github.rholder:guava-retrying:2.0.0=annotationProcessor,compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath diff --git a/mdx-models/gradle.lockfile b/mdx-models/gradle.lockfile index d932a331..2c26c9e7 100644 --- a/mdx-models/gradle.lockfile +++ b/mdx-models/gradle.lockfile @@ -1,12 +1,12 @@ # This is a Gradle generated file for dependency locking. # Manual edits can break the build and are not advised. # This file is expected to be part of source control. -com.auth0:java-jwt:4.6.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.auth0:java-jwt:4.6.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath com.datadoghq:dd-trace-api:1.38.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath com.fasterxml.jackson.core:jackson-annotations:2.22=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath -com.fasterxml.jackson.core:jackson-core:2.22.0=runtimeClasspath,testRuntimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.22.0=runtimeClasspath,testRuntimeClasspath -com.fasterxml.jackson:jackson-bom:2.22.0=runtimeClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-core:2.22.2=runtimeClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.22.2=runtimeClasspath,testRuntimeClasspath +com.fasterxml.jackson:jackson-bom:2.22.2=runtimeClasspath,testRuntimeClasspath com.fasterxml.woodstox:woodstox-core:7.2.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath com.github.oowekyala.ooxml:nice-xml-messages:3.1=pmd com.github.rholder:guava-retrying:2.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath diff --git a/mdx-models/src/main/java/com/mx/path/model/mdx/accessor/cross_account_transfer/CrossAccountRecurringTransferBaseAccessor.java b/mdx-models/src/main/java/com/mx/path/model/mdx/accessor/cross_account_transfer/CrossAccountRecurringTransferBaseAccessor.java index 9fa140b0..57e8a570 100644 --- a/mdx-models/src/main/java/com/mx/path/model/mdx/accessor/cross_account_transfer/CrossAccountRecurringTransferBaseAccessor.java +++ b/mdx-models/src/main/java/com/mx/path/model/mdx/accessor/cross_account_transfer/CrossAccountRecurringTransferBaseAccessor.java @@ -77,6 +77,17 @@ public AccessorResponse> list() { throw new AccessorMethodNotImplementedException(); } + /** + * List all recurring cross account transfers - Version 20260427 + * + * @return + */ + @GatewayAPI + @API(description = "List all recurring cross account transfers version 20260427") + public AccessorResponse> list20260427() { + throw new AccessorMethodNotImplementedException(); + } + /** * Skip next payment of recurring cross account transfer * diff --git a/mdx-models/src/main/java/com/mx/path/model/mdx/accessor/cross_account_transfer/CrossAccountTransferBaseAccessor.java b/mdx-models/src/main/java/com/mx/path/model/mdx/accessor/cross_account_transfer/CrossAccountTransferBaseAccessor.java index 4e4b5f2a..8ef61484 100644 --- a/mdx-models/src/main/java/com/mx/path/model/mdx/accessor/cross_account_transfer/CrossAccountTransferBaseAccessor.java +++ b/mdx-models/src/main/java/com/mx/path/model/mdx/accessor/cross_account_transfer/CrossAccountTransferBaseAccessor.java @@ -161,6 +161,17 @@ public AccessorResponse> list() { throw new AccessorMethodNotImplementedException(); } + /** + * List all cross-account transfers - Version 20260427 + * + * @return list of cross account transfers + */ + @GatewayAPI + @API(description = "List all cross-account transfers version 20260427") + public AccessorResponse> list20260427() { + throw new AccessorMethodNotImplementedException(); + } + /** * Update a scheduled cross account transfer * diff --git a/mdx-models/src/main/java/com/mx/path/model/mdx/accessor/transfer/TransferBaseAccessor.java b/mdx-models/src/main/java/com/mx/path/model/mdx/accessor/transfer/TransferBaseAccessor.java index e860e59e..b2136e6a 100644 --- a/mdx-models/src/main/java/com/mx/path/model/mdx/accessor/transfer/TransferBaseAccessor.java +++ b/mdx-models/src/main/java/com/mx/path/model/mdx/accessor/transfer/TransferBaseAccessor.java @@ -91,6 +91,18 @@ public AccessorResponse> list(TransferListOptions options) { throw new AccessorMethodNotImplementedException(); } + /** + * List all transfers - Version 20260427 + * + * @param options + * @return + */ + @GatewayAPI + @API(description = "List all transfers version 20260427") + public AccessorResponse> list20260427(TransferListOptions options) { + throw new AccessorMethodNotImplementedException(); + } + /** * Update a transfer * diff --git a/mdx-models/src/main/java/com/mx/path/model/mdx/accessor/transfer/recurring_transfer/RecurringTransferBaseAccessor.java b/mdx-models/src/main/java/com/mx/path/model/mdx/accessor/transfer/recurring_transfer/RecurringTransferBaseAccessor.java index a30aff81..0d395b4d 100644 --- a/mdx-models/src/main/java/com/mx/path/model/mdx/accessor/transfer/recurring_transfer/RecurringTransferBaseAccessor.java +++ b/mdx-models/src/main/java/com/mx/path/model/mdx/accessor/transfer/recurring_transfer/RecurringTransferBaseAccessor.java @@ -86,6 +86,18 @@ public AccessorResponse> list(RecurringTransferListOp throw new AccessorMethodNotImplementedException(); } + /** + * List recurring transfers - Version 20260427 + * + * @param options + * @return + */ + @GatewayAPI + @API(description = "List recurring transfers version 20260427") + public AccessorResponse> list20260427(RecurringTransferListOptions options) { + throw new AccessorMethodNotImplementedException(); + } + /** * Skip next payment of recurring transfer * diff --git a/mdx-web/gradle.lockfile b/mdx-web/gradle.lockfile index 2ee17daa..a40ea1e4 100644 --- a/mdx-web/gradle.lockfile +++ b/mdx-web/gradle.lockfile @@ -4,13 +4,13 @@ biz.aQute.bnd:biz.aQute.bnd.annotation:7.1.0=compileClasspath,testCompileClasspath ch.qos.logback:logback-classic:1.5.34=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath ch.qos.logback:logback-core:1.5.34=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath -com.auth0:java-jwt:4.6.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.auth0:java-jwt:4.6.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath com.datadoghq:dd-trace-api:1.38.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath com.fasterxml.jackson.core:jackson-annotations:2.21=compileClasspath,testCompileClasspath com.fasterxml.jackson.core:jackson-annotations:2.22=runtimeClasspath,testRuntimeClasspath -com.fasterxml.jackson.core:jackson-core:2.22.0=runtimeClasspath,testRuntimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.22.0=runtimeClasspath,testRuntimeClasspath -com.fasterxml.jackson:jackson-bom:2.22.0=runtimeClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-core:2.22.2=runtimeClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.22.2=runtimeClasspath,testRuntimeClasspath +com.fasterxml.jackson:jackson-bom:2.22.2=runtimeClasspath,testRuntimeClasspath com.fasterxml.woodstox:woodstox-core:7.1.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath com.github.oowekyala.ooxml:nice-xml-messages:3.1=pmd com.github.rholder:guava-retrying:2.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath @@ -147,7 +147,8 @@ org.ow2.asm:asm:9.7.1=testCompileClasspath,testRuntimeClasspath org.ow2.asm:asm:9.9=jacocoAnt org.ow2.asm:asm:9.9.1=pmd org.pcollections:pcollections:4.0.2=pmd -org.projectlombok:lombok:1.18.46=annotationProcessor,compileClasspath,testAnnotationProcessor,testCompileClasspath +org.projectlombok:lombok:1.18.46=compileClasspath,testCompileClasspath +org.projectlombok:lombok:1.18.48=annotationProcessor,testAnnotationProcessor org.reflections:reflections:0.10.2=checkstyle,runtimeClasspath,testRuntimeClasspath org.skyscreamer:jsonassert:1.5.3=testCompileClasspath,testRuntimeClasspath org.slf4j:jul-to-slf4j:1.7.36=pmd diff --git a/mdx-web/src/main/java/com/mx/path/model/mdx/web/controller/CrossAccountRecurringTransferController.java b/mdx-web/src/main/java/com/mx/path/model/mdx/web/controller/CrossAccountRecurringTransferController.java index da65e6bd..48d24f7e 100644 --- a/mdx-web/src/main/java/com/mx/path/model/mdx/web/controller/CrossAccountRecurringTransferController.java +++ b/mdx-web/src/main/java/com/mx/path/model/mdx/web/controller/CrossAccountRecurringTransferController.java @@ -12,16 +12,27 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; +import jakarta.servlet.http.HttpServletRequest; + @RestController @RequestMapping(value = "{clientId}", produces = BaseController.MDX_MEDIA) public class CrossAccountRecurringTransferController extends BaseController { public CrossAccountRecurringTransferController() { } + @SuppressWarnings({ "MagicNumber", "unchecked" }) @RequestMapping(value = "/users/{userId}/cross_account_transfers/recurring_cross_account_transfers", method = RequestMethod.GET) - public final ResponseEntity> getCrossAccountRecurringTransfers() { - AccessorResponse> response = gateway().crossAccount().crossAccountRecurring().list(); - return new ResponseEntity<>(response.getResult().wrapped(), createMultiMapForResponse(response.getHeaders()), HttpStatus.OK); + public final ResponseEntity> getCrossAccountRecurringTransfers(HttpServletRequest request) { + return (ResponseEntity>) versioned(request) + .defaultVersion(MdxList.class, MdxList.class, recurringTransfers -> { + AccessorResponse> response = gateway().crossAccount().crossAccountRecurring().list(); + return new ResponseEntity<>(response.getResult().wrapped(), createMultiMapForResponse(response.getHeaders()), HttpStatus.OK); + }) + .version(20260427, MdxList.class, MdxList.class, recurringTransfers -> { + AccessorResponse> response = gateway().crossAccount().crossAccountRecurring().list20260427(); + return new ResponseEntity<>(response.getResult().wrapped(), createMultiMapForResponse(response.getHeaders()), HttpStatus.OK); + }) + .execute(); } @RequestMapping(value = "/users/{userId}/cross_account_transfers/recurring_cross_account_transfers/{id}", method = RequestMethod.GET) diff --git a/mdx-web/src/main/java/com/mx/path/model/mdx/web/controller/CrossAccountTransfersController.java b/mdx-web/src/main/java/com/mx/path/model/mdx/web/controller/CrossAccountTransfersController.java index 6e894a14..ab34e762 100644 --- a/mdx-web/src/main/java/com/mx/path/model/mdx/web/controller/CrossAccountTransfersController.java +++ b/mdx-web/src/main/java/com/mx/path/model/mdx/web/controller/CrossAccountTransfersController.java @@ -14,6 +14,8 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; +import jakarta.servlet.http.HttpServletRequest; + @RestController @RequestMapping(value = "{clientId}", produces = BaseController.MDX_MEDIA) public class CrossAccountTransfersController extends BaseController { @@ -35,10 +37,19 @@ public final ResponseEntity getCrossAccountTransfer(@PathV return new ResponseEntity<>(response.getResult().wrapped(), createMultiMapForResponse(response.getHeaders()), HttpStatus.OK); } + @SuppressWarnings({ "MagicNumber", "unchecked" }) @RequestMapping(value = "/users/{userId}/cross_account_transfers", method = RequestMethod.GET) - public final ResponseEntity> listCrossAccountTransfers() { - AccessorResponse> response = gateway().crossAccount().list(); - return new ResponseEntity<>(response.getResult().wrapped(), createMultiMapForResponse(response.getHeaders()), HttpStatus.OK); + public final ResponseEntity> listCrossAccountTransfers(HttpServletRequest request) { + return (ResponseEntity>) versioned(request) + .defaultVersion(MdxList.class, MdxList.class, crossAccountTransfers -> { + AccessorResponse> response = gateway().crossAccount().list(); + return new ResponseEntity<>(response.getResult().wrapped(), createMultiMapForResponse(response.getHeaders()), HttpStatus.OK); + }) + .version(20260427, MdxList.class, MdxList.class, crossAccountTransfers -> { + AccessorResponse> response = gateway().crossAccount().list20260427(); + return new ResponseEntity<>(response.getResult().wrapped(), createMultiMapForResponse(response.getHeaders()), HttpStatus.OK); + }) + .execute(); } @Deprecated diff --git a/mdx-web/src/main/java/com/mx/path/model/mdx/web/controller/RecurringTransfersController.java b/mdx-web/src/main/java/com/mx/path/model/mdx/web/controller/RecurringTransfersController.java index 2d144557..fbeb486c 100644 --- a/mdx-web/src/main/java/com/mx/path/model/mdx/web/controller/RecurringTransfersController.java +++ b/mdx-web/src/main/java/com/mx/path/model/mdx/web/controller/RecurringTransfersController.java @@ -14,16 +14,27 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; +import jakarta.servlet.http.HttpServletRequest; + @RestController @RequestMapping(value = "{clientId}", produces = BaseController.MDX_MEDIA) public class RecurringTransfersController extends BaseController { + @SuppressWarnings({ "MagicNumber", "unchecked" }) @RequestMapping(value = "/users/{userId}/recurring_transfers", method = RequestMethod.GET) - public final ResponseEntity> list(RecurringTransferListQueryParameters queryParameters) { + public final ResponseEntity> list(RecurringTransferListQueryParameters queryParameters, HttpServletRequest request) { RecurringTransferListOptions options = new RecurringTransferListOptions(); options.setTransferType(queryParameters.getTransfer_type()); - AccessorResponse> response = gateway().transfers().recurring().list(options); - return new ResponseEntity<>(response.getResult().wrapped(), createMultiMapForResponse(response.getHeaders()), HttpStatus.OK); + return (ResponseEntity>) versioned(request) + .defaultVersion(MdxList.class, MdxList.class, recurringTransfers -> { + AccessorResponse> response = gateway().transfers().recurring().list(options); + return new ResponseEntity<>(response.getResult().wrapped(), createMultiMapForResponse(response.getHeaders()), HttpStatus.OK); + }) + .version(20260427, MdxList.class, MdxList.class, recurringTransfers -> { + AccessorResponse> response = gateway().transfers().recurring().list20260427(options); + return new ResponseEntity<>(response.getResult().wrapped(), createMultiMapForResponse(response.getHeaders()), HttpStatus.OK); + }) + .execute(); } @RequestMapping(value = "/users/{userId}/recurring_transfers", method = RequestMethod.POST, consumes = MDX_MEDIA) diff --git a/mdx-web/src/main/java/com/mx/path/model/mdx/web/controller/TransfersController.java b/mdx-web/src/main/java/com/mx/path/model/mdx/web/controller/TransfersController.java index 6602c175..6fc145ca 100644 --- a/mdx-web/src/main/java/com/mx/path/model/mdx/web/controller/TransfersController.java +++ b/mdx-web/src/main/java/com/mx/path/model/mdx/web/controller/TransfersController.java @@ -14,16 +14,27 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; +import jakarta.servlet.http.HttpServletRequest; + @RestController @RequestMapping(value = "{clientId}", produces = BaseController.MDX_MEDIA) public class TransfersController extends BaseController { + @SuppressWarnings({ "MagicNumber", "unchecked" }) @RequestMapping(value = "/users/{userId}/transfers", method = RequestMethod.GET) - public final ResponseEntity> list(TransferListQueryParameters queryParameters) { + public final ResponseEntity> list(TransferListQueryParameters queryParameters, HttpServletRequest request) { TransferListOptions options = new TransferListOptions(); options.setTransferType(queryParameters.getTransfer_type()); - AccessorResponse> response = gateway().transfers().list(options); - return new ResponseEntity<>(response.getResult().wrapped(), createMultiMapForResponse(response.getHeaders()), HttpStatus.OK); + return (ResponseEntity>) versioned(request) + .defaultVersion(MdxList.class, MdxList.class, transfers -> { + AccessorResponse> response = gateway().transfers().list(options); + return new ResponseEntity<>(response.getResult().wrapped(), createMultiMapForResponse(response.getHeaders()), HttpStatus.OK); + }) + .version(20260427, MdxList.class, MdxList.class, transfers -> { + AccessorResponse> response = gateway().transfers().list20260427(options); + return new ResponseEntity<>(response.getResult().wrapped(), createMultiMapForResponse(response.getHeaders()), HttpStatus.OK); + }) + .execute(); } @RequestMapping(value = "/users/{user_id}/transfers/{id}", method = RequestMethod.GET) diff --git a/mdx-web/src/test/groovy/com/mx/path/model/mdx/web/controller/CrossAccountRecurringTransferControllerTest.groovy b/mdx-web/src/test/groovy/com/mx/path/model/mdx/web/controller/CrossAccountRecurringTransferControllerTest.groovy index ae226e29..1d06f32d 100644 --- a/mdx-web/src/test/groovy/com/mx/path/model/mdx/web/controller/CrossAccountRecurringTransferControllerTest.groovy +++ b/mdx-web/src/test/groovy/com/mx/path/model/mdx/web/controller/CrossAccountRecurringTransferControllerTest.groovy @@ -1,13 +1,19 @@ package com.mx.path.model.mdx.web.controller +import static org.mockito.Mockito.mock import static org.mockito.Mockito.spy import static org.mockito.Mockito.verify +import static org.mockito.Mockito.when +import com.google.gson.Gson +import com.google.gson.GsonBuilder +import com.mx.path.core.context.Session import com.mx.path.gateway.accessor.AccessorResponse import com.mx.path.gateway.api.Gateway import com.mx.path.gateway.api.cross_account_transfer.CrossAccountRecurringTransferGateway import com.mx.path.gateway.api.cross_account_transfer.CrossAccountTransferGateway import com.mx.path.model.mdx.model.MdxList +import com.mx.path.model.mdx.model.Resources import com.mx.path.model.mdx.model.cross_account_transfer.CrossAccountRecurringTransfer import org.mockito.Mockito @@ -15,11 +21,14 @@ import org.springframework.http.HttpStatus import spock.lang.Specification +import jakarta.servlet.http.HttpServletRequest + class CrossAccountRecurringTransferControllerTest extends Specification{ CrossAccountRecurringTransferController subject Gateway gateway CrossAccountTransferGateway crossAccountTransferGateway CrossAccountRecurringTransferGateway crossAccountRecurringTransferGateway + Gson gson def setup() { subject = new CrossAccountRecurringTransferController() @@ -27,6 +36,10 @@ class CrossAccountRecurringTransferControllerTest extends Specification{ crossAccountTransferGateway = spy(CrossAccountTransferGateway.builder() .crossAccountRecurring(crossAccountRecurringTransferGateway).build()) gateway = Gateway.builder().crossAccount(crossAccountTransferGateway).build() + + GsonBuilder builder = new GsonBuilder() + Resources.registerResources(builder) + gson = builder.create() } def cleanup() { @@ -76,13 +89,31 @@ class CrossAccountRecurringTransferControllerTest extends Specification{ when: Mockito.doReturn(new AccessorResponse>().withResult(list)).when(crossAccountRecurringTransferGateway).list() - def response = subject.getCrossAccountRecurringTransfers() + def response = subject.getCrossAccountRecurringTransfers(buildRequest(null, "application/vnd.mx.mdx.v6+json")) then: HttpStatus.OK == response.getStatusCode() verify(crossAccountRecurringTransferGateway).list() || true } + def "getCrossAccountRecurringTransfers v20260427 interacts with gateway"() { + given: + BaseController.setGateway(gateway) + + def crossAccountRecurringTransfer = new CrossAccountRecurringTransfer() + def list = new MdxList().tap { + add(crossAccountRecurringTransfer) + } + + when: + Mockito.doReturn(new AccessorResponse>().withResult(list)).when(crossAccountRecurringTransferGateway).list20260427() + def response = subject.getCrossAccountRecurringTransfers(buildRequest(null, "application/vnd.mx.mdx.v6+json;version=20260427")) + + then: + HttpStatus.OK == response.getStatusCode() + verify(crossAccountRecurringTransferGateway).list20260427() || true + } + def "updateCrossAccountRecurringTransfer interacts with gateway"() { given: BaseController.setGateway(gateway) @@ -126,4 +157,16 @@ class CrossAccountRecurringTransferControllerTest extends Specification{ HttpStatus.NO_CONTENT == response.getStatusCode() verify(crossAccountRecurringTransferGateway).skipNext("id") || true } + + def buildRequest(Object body, String contentType) { + HttpServletRequest request = mock(HttpServletRequest.class) + when(request.getReader()).thenReturn(new BufferedReader(new StringReader(gson.toJson(body)))) + if (Session.current() != null) { + when(request.getHeader("mx-session-key")).thenReturn(Session.current().getId()) + } + when(request.getHeaders("Content-Type")).thenReturn(Collections.enumeration([contentType])) + when(request.getHeaders("Accept")).thenReturn(Collections.enumeration([contentType])) + + return request + } } diff --git a/mdx-web/src/test/groovy/com/mx/path/model/mdx/web/controller/CrossAccountTransfersControllerTest.groovy b/mdx-web/src/test/groovy/com/mx/path/model/mdx/web/controller/CrossAccountTransfersControllerTest.groovy index c0c1aaef..0502974d 100644 --- a/mdx-web/src/test/groovy/com/mx/path/model/mdx/web/controller/CrossAccountTransfersControllerTest.groovy +++ b/mdx-web/src/test/groovy/com/mx/path/model/mdx/web/controller/CrossAccountTransfersControllerTest.groovy @@ -2,15 +2,21 @@ package com.mx.path.model.mdx.web.controller import static org.mockito.ArgumentMatchers.any import static org.mockito.ArgumentMatchers.anyString +import static org.mockito.Mockito.mock import static org.mockito.Mockito.spy import static org.mockito.Mockito.verify +import static org.mockito.Mockito.when +import com.google.gson.Gson +import com.google.gson.GsonBuilder import com.mx.path.core.common.accessor.PathResponseStatus +import com.mx.path.core.context.Session import com.mx.path.gateway.accessor.AccessorResponse import com.mx.path.gateway.api.Gateway import com.mx.path.gateway.api.cross_account_transfer.CrossAccountTransferGateway import com.mx.path.model.mdx.model.AccountType import com.mx.path.model.mdx.model.MdxList +import com.mx.path.model.mdx.model.Resources import com.mx.path.model.mdx.model.account.Account import com.mx.path.model.mdx.model.cross_account_transfer.CrossAccountTransfer import com.mx.path.testing.WithMockery @@ -20,10 +26,13 @@ import org.springframework.http.HttpStatus import spock.lang.Specification +import jakarta.servlet.http.HttpServletRequest + class CrossAccountTransfersControllerTest extends Specification implements WithMockery { CrossAccountTransfersController subject Gateway gateway CrossAccountTransferGateway crossAccountTransferGateway + Gson gson def setup() { crossAccountTransferGateway = spy(CrossAccountTransferGateway.builder().build()) @@ -31,6 +40,10 @@ class CrossAccountTransfersControllerTest extends Specification implements WithM .build() subject = new CrossAccountTransfersController() + + GsonBuilder builder = new GsonBuilder() + Resources.registerResources(builder) + gson = builder.create() } def cleanup() { @@ -95,7 +108,7 @@ class CrossAccountTransfersControllerTest extends Specification implements WithM when: Mockito.doReturn(new AccessorResponse>().withResult(crossAccountTransfers)).when(crossAccountTransferGateway).list() - def response = subject.listCrossAccountTransfers() + def response = subject.listCrossAccountTransfers(buildRequest(null, "application/vnd.mx.mdx.v6+json")) then: verify(crossAccountTransferGateway).list() || true @@ -103,6 +116,24 @@ class CrossAccountTransfersControllerTest extends Specification implements WithM HttpStatus.OK == response.getStatusCode() } + def "listCrossAccountTransfers v20260427 interacts with gateway"() { + given: + BaseController.setGateway(gateway) + def crossAccountTransfer = new CrossAccountTransfer() + def crossAccountTransfers = new MdxList().tap { + add(crossAccountTransfer) + } + + when: + Mockito.doReturn(new AccessorResponse>().withResult(crossAccountTransfers)).when(crossAccountTransferGateway).list20260427() + def response = subject.listCrossAccountTransfers(buildRequest(null, "application/vnd.mx.mdx.v6+json;version=20260427")) + + then: + verify(crossAccountTransferGateway).list20260427() || true + response.getBody() == crossAccountTransfers + HttpStatus.OK == response.getStatusCode() + } + def "listCrossAccountTransferAccountTypes interacts with gateway"() { given: BaseController.setGateway(gateway) @@ -151,4 +182,16 @@ class CrossAccountTransfersControllerTest extends Specification implements WithM response.getBody() == accounts HttpStatus.OK == response.getStatusCode() } + + def buildRequest(Object body, String contentType) { + HttpServletRequest request = mock(HttpServletRequest.class) + when(request.getReader()).thenReturn(new BufferedReader(new StringReader(gson.toJson(body)))) + if (Session.current() != null) { + when(request.getHeader("mx-session-key")).thenReturn(Session.current().getId()) + } + when(request.getHeaders("Content-Type")).thenReturn(Collections.enumeration([contentType])) + when(request.getHeaders("Accept")).thenReturn(Collections.enumeration([contentType])) + + return request + } } diff --git a/mdx-web/src/test/groovy/com/mx/path/model/mdx/web/controller/RecurringTransfersControllerTest.groovy b/mdx-web/src/test/groovy/com/mx/path/model/mdx/web/controller/RecurringTransfersControllerTest.groovy index bf342bc7..233ca0b6 100644 --- a/mdx-web/src/test/groovy/com/mx/path/model/mdx/web/controller/RecurringTransfersControllerTest.groovy +++ b/mdx-web/src/test/groovy/com/mx/path/model/mdx/web/controller/RecurringTransfersControllerTest.groovy @@ -1,14 +1,20 @@ package com.mx.path.model.mdx.web.controller import static org.mockito.Mockito.any +import static org.mockito.Mockito.mock import static org.mockito.Mockito.spy import static org.mockito.Mockito.verify +import static org.mockito.Mockito.when +import com.google.gson.Gson +import com.google.gson.GsonBuilder +import com.mx.path.core.context.Session import com.mx.path.gateway.accessor.AccessorResponse import com.mx.path.gateway.api.Gateway import com.mx.path.gateway.api.transfer.TransferGateway import com.mx.path.gateway.api.transfer.recurring_transfer.RecurringTransferGateway import com.mx.path.model.mdx.model.MdxList +import com.mx.path.model.mdx.model.Resources import com.mx.path.model.mdx.model.challenges.Challenge import com.mx.path.model.mdx.model.profile.ChallengeQuestions import com.mx.path.model.mdx.model.transfer.RecurringTransfer @@ -21,18 +27,25 @@ import org.springframework.http.HttpStatus import spock.lang.Specification +import jakarta.servlet.http.HttpServletRequest + class RecurringTransfersControllerTest extends Specification implements WithMockery { RecurringTransfersController subject Gateway gateway TransferGateway transferGateway RecurringTransferGateway recurringTransferGateway + Gson gson def setup() { subject = new RecurringTransfersController() recurringTransferGateway = spy(RecurringTransferGateway.builder().build()) transferGateway = TransferGateway.builder().recurring(recurringTransferGateway).build() gateway = Gateway.builder().transfers(transferGateway).build() + + GsonBuilder builder = new GsonBuilder() + Resources.registerResources(builder) + gson = builder.create() } def cleanup() { @@ -103,7 +116,7 @@ class RecurringTransfersControllerTest extends Specification implements WithMock when: Mockito.doReturn(new AccessorResponse>().withResult(list)).when(recurringTransferGateway).list(any(RecurringTransferListOptions)) - def response = subject.list(queryParameters) + def response = subject.list(queryParameters, buildRequest(null, "application/vnd.mx.mdx.v6+json")) then: HttpStatus.OK == response.statusCode @@ -111,6 +124,25 @@ class RecurringTransfersControllerTest extends Specification implements WithMock response.body == list } + def "getRecurringTransfers v20260427 interacts with gateway"() { + given: + BaseController.setGateway(gateway) + def transfer = new RecurringTransfer() + def list = new MdxList().tap { add(transfer) } + def queryParameters = new RecurringTransferListQueryParameters().tap { + transfer_type = "test" + } + + when: + Mockito.doReturn(new AccessorResponse>().withResult(list)).when(recurringTransferGateway).list20260427(any(RecurringTransferListOptions)) + def response = subject.list(queryParameters, buildRequest(null, "application/vnd.mx.mdx.v6+json;version=20260427")) + + then: + HttpStatus.OK == response.statusCode + verify(recurringTransferGateway).list20260427(any(RecurringTransferListOptions)) || true + response.body == list + } + def "skipNextRecurringTransfer interacts with gateway"() { given: BaseController.setGateway(gateway) @@ -174,4 +206,16 @@ class RecurringTransfersControllerTest extends Specification implements WithMock verify(recurringTransferGateway).update("id", transfer) || true response.body == mockResponse.result } + + def buildRequest(Object body, String contentType) { + HttpServletRequest request = mock(HttpServletRequest.class) + when(request.getReader()).thenReturn(new BufferedReader(new StringReader(gson.toJson(body)))) + if (Session.current() != null) { + when(request.getHeader("mx-session-key")).thenReturn(Session.current().getId()) + } + when(request.getHeaders("Content-Type")).thenReturn(Collections.enumeration([contentType])) + when(request.getHeaders("Accept")).thenReturn(Collections.enumeration([contentType])) + + return request + } } diff --git a/mdx-web/src/test/groovy/com/mx/path/model/mdx/web/controller/TransfersControllerTest.groovy b/mdx-web/src/test/groovy/com/mx/path/model/mdx/web/controller/TransfersControllerTest.groovy index fba80430..acaa326c 100644 --- a/mdx-web/src/test/groovy/com/mx/path/model/mdx/web/controller/TransfersControllerTest.groovy +++ b/mdx-web/src/test/groovy/com/mx/path/model/mdx/web/controller/TransfersControllerTest.groovy @@ -1,13 +1,19 @@ package com.mx.path.model.mdx.web.controller import static org.mockito.ArgumentMatchers.any +import static org.mockito.Mockito.mock import static org.mockito.Mockito.spy import static org.mockito.Mockito.verify +import static org.mockito.Mockito.when +import com.google.gson.Gson +import com.google.gson.GsonBuilder +import com.mx.path.core.context.Session import com.mx.path.gateway.accessor.AccessorResponse import com.mx.path.gateway.api.Gateway import com.mx.path.gateway.api.transfer.TransferGateway import com.mx.path.model.mdx.model.MdxList +import com.mx.path.model.mdx.model.Resources import com.mx.path.model.mdx.model.challenges.Challenge import com.mx.path.model.mdx.model.transfer.Transfer import com.mx.path.model.mdx.model.transfer.options.TransferListOptions @@ -19,16 +25,23 @@ import org.springframework.http.HttpStatus import spock.lang.Specification +import jakarta.servlet.http.HttpServletRequest + class TransfersControllerTest extends Specification { TransfersController subject Gateway gateway TransferGateway transferGateway + Gson gson def setup() { subject = new TransfersController() transferGateway = spy(TransferGateway.builder().build()) gateway = Gateway.builder().transfers(transferGateway).build() + + GsonBuilder builder = new GsonBuilder() + Resources.registerResources(builder) + gson = builder.create() } def cleanup() { @@ -93,7 +106,7 @@ class TransfersControllerTest extends Specification { when: Mockito.doReturn(new AccessorResponse>().withResult(list)).when(transferGateway).list(any(TransferListOptions)) - def response = subject.list(queryParameters) + def response = subject.list(queryParameters, buildRequest(null, "application/vnd.mx.mdx.v6+json")) then: HttpStatus.OK == response.getStatusCode() @@ -102,6 +115,27 @@ class TransfersControllerTest extends Specification { captor.value.transferType == "test" } + def "getTransfers v20260427 interacts with gateway"() { + given: + BaseController.setGateway(gateway) + def transfer = new Transfer() + def list = new MdxList().tap { add(transfer) } + def queryParameters = new TransferListQueryParameters().tap { + transfer_type = "test" + } + + when: + Mockito.doReturn(new AccessorResponse>().withResult(list)).when(transferGateway).list20260427(any(TransferListOptions)) + + def response = subject.list(queryParameters, buildRequest(null, "application/vnd.mx.mdx.v6+json;version=20260427")) + + then: + HttpStatus.OK == response.getStatusCode() + ArgumentCaptor captor = ArgumentCaptor.forClass(TransferListOptions) + verify(transferGateway).list20260427(captor.capture()) || true + captor.value.transferType == "test" + } + def "updateTransfer_implements - 200"() { given: BaseController.setGateway(gateway) @@ -176,4 +210,16 @@ class TransfersControllerTest extends Specification { HttpStatus.OK == response.getStatusCode() verify(transferGateway).finish(any()) || true } + + def buildRequest(Object body, String contentType) { + HttpServletRequest request = mock(HttpServletRequest.class) + when(request.getReader()).thenReturn(new BufferedReader(new StringReader(gson.toJson(body)))) + if (Session.current() != null) { + when(request.getHeader("mx-session-key")).thenReturn(Session.current().getId()) + } + when(request.getHeaders("Content-Type")).thenReturn(Collections.enumeration([contentType])) + when(request.getHeaders("Accept")).thenReturn(Collections.enumeration([contentType])) + + return request + } } diff --git a/realtime/gradle.lockfile b/realtime/gradle.lockfile index 98699264..50499be9 100644 --- a/realtime/gradle.lockfile +++ b/realtime/gradle.lockfile @@ -1,12 +1,12 @@ # This is a Gradle generated file for dependency locking. # Manual edits can break the build and are not advised. # This file is expected to be part of source control. -com.auth0:java-jwt:4.6.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.auth0:java-jwt:4.6.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath com.datadoghq:dd-trace-api:1.38.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath com.fasterxml.jackson.core:jackson-annotations:2.22=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath -com.fasterxml.jackson.core:jackson-core:2.22.0=runtimeClasspath,testRuntimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.22.0=runtimeClasspath,testRuntimeClasspath -com.fasterxml.jackson:jackson-bom:2.22.0=runtimeClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-core:2.22.2=runtimeClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.22.2=runtimeClasspath,testRuntimeClasspath +com.fasterxml.jackson:jackson-bom:2.22.2=runtimeClasspath,testRuntimeClasspath com.fasterxml.woodstox:woodstox-core:7.2.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath com.github.oowekyala.ooxml:nice-xml-messages:3.1=pmd com.github.rholder:guava-retrying:2.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath