Skip to content

Commit f375af6

Browse files
author
Tess Stoddard
committed
feat: add p2p transfer frequencies endpoint
1 parent ca25102 commit f375af6

4 files changed

Lines changed: 128 additions & 0 deletions

File tree

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.mx.path.model.mdx.accessor.p2p_transfer;
2+
3+
import com.mx.path.core.common.accessor.API;
4+
import com.mx.path.core.common.accessor.AccessorMethodNotImplementedException;
5+
import com.mx.path.core.common.gateway.GatewayAPI;
6+
import com.mx.path.core.common.gateway.GatewayClass;
7+
import com.mx.path.gateway.accessor.Accessor;
8+
import com.mx.path.gateway.accessor.AccessorResponse;
9+
import com.mx.path.model.mdx.model.Frequency;
10+
import com.mx.path.model.mdx.model.MdxList;
11+
12+
/**
13+
* Accessor base for p2p transfer frequency operations
14+
*/
15+
@GatewayClass
16+
@API(specificationUrl = "https://developer.mx.com/drafts/mdx/p2p_transfer/index.html#frequencies")
17+
public class FrequencyBaseAccessor extends Accessor {
18+
public FrequencyBaseAccessor() {
19+
}
20+
21+
/**
22+
* List frequency options for p2p transfers
23+
*
24+
* @return
25+
*/
26+
@GatewayAPI
27+
@API(description = "List frequency options for p2p transfers")
28+
public AccessorResponse<MdxList<Frequency>> list() {
29+
throw new AccessorMethodNotImplementedException();
30+
}
31+
}

mdx-models/src/main/java/com/mx/path/model/mdx/accessor/p2p_transfer/P2PTransferBaseAccessor.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ public class P2PTransferBaseAccessor extends Accessor {
2323
@Getter(AccessLevel.PROTECTED)
2424
private DurationBaseAccessor durations;
2525

26+
@GatewayAPI
27+
@Getter(AccessLevel.PROTECTED)
28+
private FrequencyBaseAccessor frequencies;
29+
2630
/**
2731
* Accessor for account operations
2832
*
@@ -58,4 +62,22 @@ public DurationBaseAccessor durations() {
5862
public void setDurations(DurationBaseAccessor durations) {
5963
this.durations = durations;
6064
}
65+
66+
/**
67+
* Accessor for frequency operations
68+
*
69+
* @return accessor
70+
*/
71+
@API
72+
public FrequencyBaseAccessor frequencies() {
73+
return frequencies;
74+
}
75+
76+
/**
77+
* Sets frequency accessor
78+
* @param frequencies
79+
*/
80+
public void setFrequencies(FrequencyBaseAccessor frequencies) {
81+
this.frequencies = frequencies;
82+
}
6183
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.mx.path.model.mdx.web.controller;
2+
3+
import com.mx.path.gateway.accessor.AccessorResponse;
4+
import com.mx.path.model.mdx.model.Frequency;
5+
import com.mx.path.model.mdx.model.MdxList;
6+
7+
import org.springframework.http.HttpStatus;
8+
import org.springframework.http.ResponseEntity;
9+
import org.springframework.web.bind.annotation.RequestMapping;
10+
import org.springframework.web.bind.annotation.RequestMethod;
11+
import org.springframework.web.bind.annotation.RestController;
12+
13+
@RestController
14+
@RequestMapping(value = "{clientId}", produces = BaseController.MDX_MEDIA)
15+
public class P2PTransferFrequenciesController extends BaseController {
16+
@RequestMapping(value = "/users/{userId}/p2p_transfers/frequencies", method = RequestMethod.GET)
17+
public final ResponseEntity<MdxList<Frequency>> list() {
18+
AccessorResponse<MdxList<Frequency>> response = gateway().p2pTransfers().frequencies().list();
19+
return new ResponseEntity<>(response.getResult().wrapped(), createMultiMapForResponse(response.getHeaders()), HttpStatus.OK);
20+
}
21+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package com.mx.path.model.mdx.web.controller
2+
3+
import static org.mockito.Mockito.doReturn
4+
import static org.mockito.Mockito.mock
5+
import static org.mockito.Mockito.spy
6+
import static org.mockito.Mockito.verify
7+
8+
import com.mx.path.gateway.accessor.AccessorResponse
9+
import com.mx.path.gateway.api.Gateway
10+
import com.mx.path.gateway.api.p2p_transfer.FrequencyGateway
11+
import com.mx.path.gateway.api.p2p_transfer.P2PTransferGateway
12+
import com.mx.path.model.mdx.model.Frequency
13+
import com.mx.path.model.mdx.model.MdxList
14+
15+
import org.springframework.http.HttpStatus
16+
17+
import spock.lang.Specification
18+
19+
class P2PTransferFrequenciesControllerTest extends Specification {
20+
P2PTransferFrequenciesController subject
21+
Gateway gateway
22+
P2PTransferGateway p2pTransferGateway
23+
FrequencyGateway frequencyGateway
24+
25+
def setup() {
26+
subject = new P2PTransferFrequenciesController()
27+
p2pTransferGateway = mock(P2PTransferGateway)
28+
frequencyGateway = mock(FrequencyGateway)
29+
30+
doReturn(frequencyGateway).when(p2pTransferGateway).frequencies()
31+
gateway = spy(Gateway.builder().clientId("client-1234").p2pTransfers(p2pTransferGateway).build())
32+
}
33+
34+
def cleanup() {
35+
BaseController.clearGateway()
36+
}
37+
38+
def "list interacts with gateway"() {
39+
given:
40+
BaseController.setGateway(gateway)
41+
def frequencies = new MdxList().tap {
42+
add(new Frequency())
43+
}
44+
doReturn(new AccessorResponse<MdxList<Frequency>>().withResult(frequencies)).when(frequencyGateway).list()
45+
46+
when:
47+
def result = subject.list()
48+
49+
then:
50+
HttpStatus.OK == result.statusCode
51+
result.body == frequencies
52+
verify(frequencyGateway).list() || true
53+
}
54+
}

0 commit comments

Comments
 (0)