embulk-input-marketo 0.5.7.alpha.6 → 0.6.0.alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/build.gradle +6 -6
- data/src/main/java/org/embulk/input/marketo/MarketoService.java +1 -1
- data/src/main/java/org/embulk/input/marketo/MarketoServiceImpl.java +4 -5
- data/src/main/java/org/embulk/input/marketo/MarketoUtils.java +45 -14
- data/src/main/java/org/embulk/input/marketo/delegate/ActivityBulkExtractInputPlugin.java +12 -11
- data/src/main/java/org/embulk/input/marketo/delegate/CampaignInputPlugin.java +4 -23
- data/src/main/java/org/embulk/input/marketo/delegate/LeadBulkExtractInputPlugin.java +18 -11
- data/src/main/java/org/embulk/input/marketo/delegate/LeadWithListInputPlugin.java +3 -18
- data/src/main/java/org/embulk/input/marketo/delegate/LeadWithProgramInputPlugin.java +5 -20
- data/src/main/java/org/embulk/input/marketo/delegate/MarketoBaseBulkExtractInputPlugin.java +213 -87
- data/src/main/java/org/embulk/input/marketo/delegate/MarketoBaseInputPluginDelegate.java +22 -0
- data/src/main/java/org/embulk/input/marketo/model/MarketoBulkExtractRequest.java +12 -1
- data/src/main/java/org/embulk/input/marketo/model/MarketoField.java +28 -2
- data/src/main/java/org/embulk/input/marketo/model/MarketoResponse.java +2 -1
- data/src/main/java/org/embulk/input/marketo/model/filter/DateRangeFilter.java +9 -0
- data/src/main/java/org/embulk/input/marketo/rest/MarketoBaseRestClient.java +4 -0
- data/src/main/java/org/embulk/input/marketo/rest/{MarketoFileResponseEntityReader.java → MarketoInputStreamResponseEntityReader.java} +2 -2
- data/src/main/java/org/embulk/input/marketo/rest/MarketoResponseJetty92EntityReader.java +4 -1
- data/src/main/java/org/embulk/input/marketo/rest/MarketoRestClient.java +76 -42
- data/src/main/java/org/embulk/input/marketo/rest/RecordPagingIterable.java +35 -11
- data/src/test/java/org/embulk/input/marketo/MarketoServiceImplTest.java +159 -0
- data/src/test/java/org/embulk/input/marketo/MarketoUtilsTest.java +87 -0
- data/src/test/java/org/embulk/input/marketo/delegate/ActivityBulkExtractInputPluginTest.java +84 -0
- data/src/test/java/org/embulk/input/marketo/delegate/CampaignInputPluginTest.java +73 -0
- data/src/test/java/org/embulk/input/marketo/delegate/LeadBulkExtractInputPluginTest.java +94 -0
- data/src/test/java/org/embulk/input/marketo/delegate/LeadWithListInputPluginTest.java +99 -0
- data/src/test/java/org/embulk/input/marketo/delegate/LeadWithProgramInputPluginTest.java +101 -0
- data/src/test/java/org/embulk/input/marketo/delegate/MarketoBaseBulkExtractInputPluginTest.java +114 -0
- data/src/test/java/org/embulk/input/marketo/rest/MarketoBaseRestClientTest.java +3 -15
- data/src/test/java/org/embulk/input/marketo/rest/MarketoRestClientTest.java +450 -0
- data/src/test/resources/config/activity_bulk_extract_config.yaml +7 -0
- data/src/test/resources/config/lead_bulk_extract_config.yaml +8 -0
- data/src/test/resources/config/rest_config.yaml +3 -0
- data/src/test/resources/fixtures/activity_extract1.csv +35 -0
- data/src/test/resources/fixtures/activity_extract2.csv +22 -0
- data/src/test/resources/fixtures/all_program_full.json +53 -0
- data/src/test/resources/fixtures/campaign_response.json +38 -0
- data/src/test/resources/fixtures/campaign_response_full.json +102 -0
- data/src/test/resources/fixtures/lead_by_list.json +33 -0
- data/src/test/resources/fixtures/lead_by_program_response.json +47 -0
- data/src/test/resources/fixtures/lead_describe.json +221 -0
- data/src/test/resources/fixtures/lead_describe_expected.json +66 -0
- data/src/test/resources/fixtures/lead_describe_marketo_fields_full.json +518 -0
- data/src/test/resources/fixtures/lead_extract1.csv +11 -0
- data/src/test/resources/fixtures/lead_response_full.json +2402 -0
- data/src/test/resources/fixtures/lead_with_program_full.json +17 -0
- data/src/test/resources/fixtures/leads_extract2.csv +10 -0
- data/src/test/resources/fixtures/lists_response.json +31 -0
- data/src/test/resources/fixtures/program_response.json +71 -0
- metadata +39 -8
- data/src/main/java/org/embulk/input/marketo/model/filter/ListFilter.java +0 -10
@@ -0,0 +1,450 @@
|
|
1
|
+
package org.embulk.input.marketo.rest;
|
2
|
+
|
3
|
+
import com.fasterxml.jackson.core.JsonProcessingException;
|
4
|
+
import com.fasterxml.jackson.databind.DeserializationFeature;
|
5
|
+
import com.fasterxml.jackson.databind.JavaType;
|
6
|
+
import com.fasterxml.jackson.databind.ObjectMapper;
|
7
|
+
import com.fasterxml.jackson.databind.node.ArrayNode;
|
8
|
+
import com.fasterxml.jackson.databind.node.ObjectNode;
|
9
|
+
import com.fasterxml.jackson.databind.node.TextNode;
|
10
|
+
import com.google.common.collect.ImmutableListMultimap;
|
11
|
+
import com.google.common.collect.Multimap;
|
12
|
+
import com.google.common.io.ByteStreams;
|
13
|
+
import org.embulk.EmbulkTestRuntime;
|
14
|
+
import org.embulk.config.ConfigSource;
|
15
|
+
import org.embulk.input.marketo.MarketoUtils;
|
16
|
+
import org.embulk.input.marketo.model.MarketoError;
|
17
|
+
import org.embulk.input.marketo.model.MarketoField;
|
18
|
+
import org.embulk.input.marketo.model.MarketoResponse;
|
19
|
+
import org.embulk.spi.DataException;
|
20
|
+
import org.embulk.util.retryhelper.jetty92.Jetty92ResponseReader;
|
21
|
+
import org.embulk.util.retryhelper.jetty92.Jetty92RetryHelper;
|
22
|
+
import org.junit.Before;
|
23
|
+
import org.junit.Rule;
|
24
|
+
import org.junit.Test;
|
25
|
+
import org.mockito.ArgumentCaptor;
|
26
|
+
|
27
|
+
import java.io.IOException;
|
28
|
+
import java.io.InputStream;
|
29
|
+
import java.text.SimpleDateFormat;
|
30
|
+
import java.util.*;
|
31
|
+
|
32
|
+
import static org.junit.Assert.*;
|
33
|
+
import static org.mockito.Mockito.*;
|
34
|
+
|
35
|
+
/**
|
36
|
+
* Created by khuutantaitai on 10/3/17.
|
37
|
+
*/
|
38
|
+
public class MarketoRestClientTest
|
39
|
+
{
|
40
|
+
private static final String TEST_ACCOUNT_ID = "test_account_id";
|
41
|
+
|
42
|
+
private static final String TEST_CLIENT_SECRET = "test_client_secret";
|
43
|
+
|
44
|
+
private static final String TEST_CLIENT_ID = "test_client_id";
|
45
|
+
|
46
|
+
private static final String END_POINT = MarketoUtils.getEndPoint(TEST_ACCOUNT_ID);
|
47
|
+
|
48
|
+
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
|
49
|
+
|
50
|
+
@Rule
|
51
|
+
public EmbulkTestRuntime embulkTestRuntime = new EmbulkTestRuntime();
|
52
|
+
|
53
|
+
private MarketoRestClient marketoRestClient;
|
54
|
+
|
55
|
+
private Jetty92RetryHelper mockRetryHelper;
|
56
|
+
|
57
|
+
private static final JavaType RESPONSE_TYPE = OBJECT_MAPPER.getTypeFactory().constructParametrizedType(MarketoResponse.class, MarketoResponse.class, ObjectNode.class);
|
58
|
+
|
59
|
+
@Before
|
60
|
+
public void prepare()
|
61
|
+
{
|
62
|
+
ConfigSource configSource = embulkTestRuntime.getExec().newConfigSource();
|
63
|
+
configSource.set("account_id", TEST_ACCOUNT_ID);
|
64
|
+
configSource.set("client_secret", TEST_CLIENT_SECRET);
|
65
|
+
configSource.set("client_id", TEST_CLIENT_ID);
|
66
|
+
configSource.set("max_return", 2);
|
67
|
+
MarketoRestClient.PluginTask task = configSource.loadConfig(MarketoRestClient.PluginTask.class);
|
68
|
+
mockRetryHelper = mock(Jetty92RetryHelper.class);
|
69
|
+
MarketoRestClient realRestClient = new MarketoRestClient(task, mockRetryHelper);
|
70
|
+
marketoRestClient = spy(realRestClient);
|
71
|
+
}
|
72
|
+
|
73
|
+
@Test
|
74
|
+
public void describeLead() throws Exception
|
75
|
+
{
|
76
|
+
String leadSchema = new String(ByteStreams.toByteArray(this.getClass().getResourceAsStream("/fixtures/lead_describe.json")));
|
77
|
+
MarketoResponse<ObjectNode> marketoResponse = OBJECT_MAPPER.readValue(leadSchema, RESPONSE_TYPE);
|
78
|
+
doReturn(marketoResponse).when(marketoRestClient).doGet(eq(END_POINT + MarketoRESTEndpoint.DESCRIBE_LEAD.getEndpoint()), isNull(Map.class), isNull(ImmutableListMultimap.class), any(MarketoResponseJetty92EntityReader.class));
|
79
|
+
List<MarketoField> marketoFields = marketoRestClient.describeLead();
|
80
|
+
assertEquals(16, marketoFields.size());
|
81
|
+
JavaType marketoFieldType = OBJECT_MAPPER.getTypeFactory().constructParametrizedType(List.class, List.class, MarketoField.class);
|
82
|
+
List<MarketoField> expectedFields = OBJECT_MAPPER.readValue(new String(ByteStreams.toByteArray(this.getClass().getResourceAsStream("/fixtures/lead_describe_expected.json"))), marketoFieldType);
|
83
|
+
assertArrayEquals(expectedFields.toArray(), marketoFields.toArray());
|
84
|
+
}
|
85
|
+
|
86
|
+
// @Test
|
87
|
+
// public void describeLead2() throws Exception {
|
88
|
+
// String leadSchema = new String(ByteStreams.toByteArray(this.getClass().getResourceAsStream("/fixtures/lead_describe_full.json")));
|
89
|
+
// MarketoResponse<ObjectNode> marketoResponse = OBJECT_MAPPER.readValue(leadSchema, RESPONSE_TYPE);
|
90
|
+
// doReturn(marketoResponse).when(marketoRestClient).doGet(eq(END_POINT + MarketoRESTEndpoint.DESCRIBE_LEAD.getEndpoint()), isNull(Map.class), isNull(ImmutableListMultimap.class), any(MarketoResponseJetty92EntityReader.class));
|
91
|
+
// List<MarketoField> marketoFields = marketoRestClient.describeLead();
|
92
|
+
// assertEquals(16, marketoFields.size());
|
93
|
+
// JavaType marketoFieldType = OBJECT_MAPPER.getTypeFactory().constructParametrizedType(List.class, List.class, MarketoField.class);
|
94
|
+
// List<MarketoField> expectedFields = OBJECT_MAPPER.readValue(new String(ByteStreams.toByteArray(this.getClass().getResourceAsStream("/fixtures/lead_describe_expected.json"))), marketoFieldType);
|
95
|
+
// assertArrayEquals(expectedFields.toArray(), marketoFields.toArray());
|
96
|
+
// }
|
97
|
+
|
98
|
+
@Test
|
99
|
+
public void createLeadBulkExtract() throws Exception
|
100
|
+
{
|
101
|
+
MarketoResponse<ObjectNode> marketoResponse = new MarketoResponse<>();
|
102
|
+
marketoResponse.setSuccess(true);
|
103
|
+
Date startDate = new Date(1506865856000L);
|
104
|
+
Date endDate = new Date(1507297856000L);
|
105
|
+
ObjectNode bulkExtractResult = OBJECT_MAPPER.createObjectNode();
|
106
|
+
bulkExtractResult.set("exportId", new TextNode("bulkExtractId"));
|
107
|
+
marketoResponse.setResult(Arrays.asList(bulkExtractResult));
|
108
|
+
ArgumentCaptor<String> argumentCaptor = ArgumentCaptor.forClass(String.class);
|
109
|
+
doReturn(marketoResponse).when(marketoRestClient).doPost(eq(END_POINT + MarketoRESTEndpoint.CREATE_LEAD_EXTRACT.getEndpoint()), isNull(Map.class), isNull(ImmutableListMultimap.class), argumentCaptor.capture(), any(MarketoResponseJetty92EntityReader.class));
|
110
|
+
String filterField = "filterField";
|
111
|
+
String bulkExtractId = marketoRestClient.createLeadBulkExtract(startDate, endDate, Arrays.asList("extract_field1", "extract_field2"), filterField);
|
112
|
+
assertEquals("bulkExtractId", bulkExtractId);
|
113
|
+
String postContent = argumentCaptor.getValue();
|
114
|
+
ObjectNode marketoBulkExtractRequest = (ObjectNode) OBJECT_MAPPER.readTree(postContent);
|
115
|
+
ObjectNode filter = (ObjectNode) marketoBulkExtractRequest.get("filter");
|
116
|
+
ObjectNode dateRangeFilter = (ObjectNode) filter.get(filterField);
|
117
|
+
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(MarketoUtils.MARKETO_DATE_SIMPLE_DATE_FORMAT);
|
118
|
+
assertEquals(simpleDateFormat.format(startDate), dateRangeFilter.get("startAt").textValue());
|
119
|
+
assertEquals(simpleDateFormat.format(endDate), dateRangeFilter.get("endAt").textValue());
|
120
|
+
assertEquals("CSV", marketoBulkExtractRequest.get("format").textValue());
|
121
|
+
ArrayNode fields = (ArrayNode) marketoBulkExtractRequest.get("fields");
|
122
|
+
assertEquals("extract_field1", fields.get(0).textValue());
|
123
|
+
assertEquals("extract_field2", fields.get(1).textValue());
|
124
|
+
}
|
125
|
+
|
126
|
+
@Test
|
127
|
+
public void createLeadBulkExtractWithError() throws Exception
|
128
|
+
{
|
129
|
+
MarketoResponse<ObjectNode> marketoResponse = new MarketoResponse<>();
|
130
|
+
marketoResponse.setSuccess(false);
|
131
|
+
MarketoError marketoError = new MarketoError();
|
132
|
+
marketoError.setCode("ErrorCode1");
|
133
|
+
marketoError.setMessage("Message");
|
134
|
+
marketoResponse.setErrors(Arrays.asList(marketoError));
|
135
|
+
doReturn(marketoResponse).when(marketoRestClient).doPost(eq(END_POINT + MarketoRESTEndpoint.CREATE_LEAD_EXTRACT.getEndpoint()), isNull(Map.class), isNull(ImmutableListMultimap.class), anyString(), any(MarketoResponseJetty92EntityReader.class));
|
136
|
+
String filterField = "filterField";
|
137
|
+
try {
|
138
|
+
marketoRestClient.createLeadBulkExtract(new Date(), new Date(), Arrays.asList("extract_field1", "extract_field2"), filterField);
|
139
|
+
}
|
140
|
+
catch (DataException ex) {
|
141
|
+
assertEquals("ErrorCode1: Message", ex.getMessage());
|
142
|
+
return;
|
143
|
+
}
|
144
|
+
fail();
|
145
|
+
}
|
146
|
+
|
147
|
+
@Test()
|
148
|
+
public void createLeadBulkExtractWithParseError() throws Exception
|
149
|
+
{
|
150
|
+
doThrow(JsonProcessingException.class).when(marketoRestClient).doPost(eq(END_POINT + MarketoRESTEndpoint.CREATE_LEAD_EXTRACT.getEndpoint()), isNull(Map.class), isNull(ImmutableListMultimap.class), anyString(), any(MarketoResponseJetty92EntityReader.class));
|
151
|
+
String filterField = "filterField";
|
152
|
+
try {
|
153
|
+
marketoRestClient.createLeadBulkExtract(new Date(), new Date(), Arrays.asList("extract_field1", "extract_field2"), filterField);
|
154
|
+
}
|
155
|
+
catch (DataException ex) {
|
156
|
+
return;
|
157
|
+
}
|
158
|
+
fail();
|
159
|
+
}
|
160
|
+
|
161
|
+
@Test
|
162
|
+
public void createActitvityExtract() throws Exception
|
163
|
+
{
|
164
|
+
MarketoResponse<ObjectNode> marketoResponse = new MarketoResponse<>();
|
165
|
+
marketoResponse.setSuccess(true);
|
166
|
+
Date startDate = new Date(1506865856000L);
|
167
|
+
Date endDate = new Date(1507297856000L);
|
168
|
+
ObjectNode bulkExtractResult = OBJECT_MAPPER.createObjectNode();
|
169
|
+
bulkExtractResult.set("exportId", new TextNode("bulkExtractId"));
|
170
|
+
marketoResponse.setResult(Arrays.asList(bulkExtractResult));
|
171
|
+
ArgumentCaptor<String> argumentCaptor = ArgumentCaptor.forClass(String.class);
|
172
|
+
doReturn(marketoResponse).when(marketoRestClient).doPost(eq(END_POINT + MarketoRESTEndpoint.CREATE_ACTIVITY_EXTRACT.getEndpoint()), isNull(Map.class), isNull(ImmutableListMultimap.class), argumentCaptor.capture(), any(MarketoResponseJetty92EntityReader.class));
|
173
|
+
String bulkExtractId = marketoRestClient.createActivityExtract(startDate, endDate);
|
174
|
+
assertEquals("bulkExtractId", bulkExtractId);
|
175
|
+
String postContent = argumentCaptor.getValue();
|
176
|
+
ObjectNode marketoBulkExtractRequest = (ObjectNode) OBJECT_MAPPER.readTree(postContent);
|
177
|
+
ObjectNode filter = (ObjectNode) marketoBulkExtractRequest.get("filter");
|
178
|
+
assertTrue(filter.has("createdAt"));
|
179
|
+
}
|
180
|
+
|
181
|
+
@Test
|
182
|
+
public void startLeadBulkExtract() throws Exception
|
183
|
+
{
|
184
|
+
String bulkExportId = "bulkExportId";
|
185
|
+
Map<String, String> pathParams = new HashMap<>();
|
186
|
+
pathParams.put("export_id", bulkExportId);
|
187
|
+
MarketoResponse<ObjectNode> marketoResponse = new MarketoResponse<>();
|
188
|
+
marketoResponse.setSuccess(true);
|
189
|
+
doReturn(marketoResponse).when(marketoRestClient).doPost(eq(END_POINT + MarketoRESTEndpoint.START_LEAD_EXPORT_JOB.getEndpoint(pathParams)), isNull(Map.class), isNull(ImmutableListMultimap.class), isNull(String.class), any(MarketoResponseJetty92EntityReader.class));
|
190
|
+
marketoRestClient.startLeadBulkExtract(bulkExportId);
|
191
|
+
verify(marketoRestClient, times(1)).doPost(eq(END_POINT + MarketoRESTEndpoint.START_LEAD_EXPORT_JOB.getEndpoint(pathParams)), isNull(Map.class), isNull(ImmutableListMultimap.class), isNull(String.class), any(MarketoResponseJetty92EntityReader.class));
|
192
|
+
}
|
193
|
+
|
194
|
+
@Test
|
195
|
+
public void startLeadBulkExtractWithError() throws Exception
|
196
|
+
{
|
197
|
+
String bulkExportId = "bulkExportId";
|
198
|
+
Map<String, String> pathParams = new HashMap<>();
|
199
|
+
pathParams.put("export_id", bulkExportId);
|
200
|
+
MarketoResponse<ObjectNode> marketoResponse = new MarketoResponse<>();
|
201
|
+
marketoResponse.setSuccess(false);
|
202
|
+
MarketoError marketoError = new MarketoError();
|
203
|
+
marketoError.setCode("ErrorCode");
|
204
|
+
marketoError.setMessage("Message");
|
205
|
+
marketoResponse.setErrors(Arrays.asList(marketoError));
|
206
|
+
doReturn(marketoResponse).when(marketoRestClient).doPost(eq(END_POINT + MarketoRESTEndpoint.START_LEAD_EXPORT_JOB.getEndpoint(pathParams)), isNull(Map.class), isNull(ImmutableListMultimap.class), isNull(String.class), any(MarketoResponseJetty92EntityReader.class));
|
207
|
+
try {
|
208
|
+
marketoRestClient.startLeadBulkExtract(bulkExportId);
|
209
|
+
}
|
210
|
+
catch (DataException ex) {
|
211
|
+
verify(marketoRestClient, times(1)).doPost(eq(END_POINT + MarketoRESTEndpoint.START_LEAD_EXPORT_JOB.getEndpoint(pathParams)), isNull(Map.class), isNull(ImmutableListMultimap.class), isNull(String.class), any(MarketoResponseJetty92EntityReader.class));
|
212
|
+
return;
|
213
|
+
}
|
214
|
+
fail();
|
215
|
+
}
|
216
|
+
|
217
|
+
@Test
|
218
|
+
public void startActivityBulkExtract() throws Exception
|
219
|
+
{
|
220
|
+
String bulkExportId = "bulkExportId";
|
221
|
+
Map<String, String> pathParams = new HashMap<>();
|
222
|
+
pathParams.put("export_id", bulkExportId);
|
223
|
+
MarketoResponse<ObjectNode> marketoResponse = new MarketoResponse<>();
|
224
|
+
marketoResponse.setSuccess(true);
|
225
|
+
doReturn(marketoResponse).when(marketoRestClient).doPost(eq(END_POINT + MarketoRESTEndpoint.START_ACTIVITY_EXPORT_JOB.getEndpoint(pathParams)), isNull(Map.class), isNull(ImmutableListMultimap.class), isNull(String.class), any(MarketoResponseJetty92EntityReader.class));
|
226
|
+
marketoRestClient.startActitvityBulkExtract(bulkExportId);
|
227
|
+
verify(marketoRestClient, times(1)).doPost(eq(END_POINT + MarketoRESTEndpoint.START_ACTIVITY_EXPORT_JOB.getEndpoint(pathParams)), isNull(Map.class), isNull(ImmutableListMultimap.class), isNull(String.class), any(MarketoResponseJetty92EntityReader.class));
|
228
|
+
}
|
229
|
+
|
230
|
+
@Test
|
231
|
+
public void waitLeadExportJobComplete() throws Exception
|
232
|
+
{
|
233
|
+
String bulkExportId = "bulkExportId";
|
234
|
+
Map<String, String> pathParams = new HashMap<>();
|
235
|
+
pathParams.put("export_id", bulkExportId);
|
236
|
+
MarketoResponse<ObjectNode> marketoResponse = mock(MarketoResponse.class);
|
237
|
+
when(marketoResponse.isSuccess()).thenReturn(true);
|
238
|
+
ObjectNode result = mock(ObjectNode.class);
|
239
|
+
when(marketoResponse.getResult()).thenReturn(Arrays.asList(result));
|
240
|
+
when(result.get("status")).thenReturn(new TextNode("Queued")).thenReturn(new TextNode("Processing")).thenReturn(new TextNode("Completed"));
|
241
|
+
doReturn(marketoResponse).when(marketoRestClient).doGet(eq(END_POINT + MarketoRESTEndpoint.GET_LEAD_EXPORT_STATUS.getEndpoint(pathParams)), isNull(Map.class), isNull(ImmutableListMultimap.class), any(MarketoResponseJetty92EntityReader.class));
|
242
|
+
marketoRestClient.waitLeadExportJobComplete(bulkExportId, 1, 4);
|
243
|
+
verify(marketoRestClient, times(3)).doGet(eq(END_POINT + MarketoRESTEndpoint.GET_LEAD_EXPORT_STATUS.getEndpoint(pathParams)), isNull(Map.class), isNull(ImmutableListMultimap.class), any(MarketoResponseJetty92EntityReader.class));
|
244
|
+
}
|
245
|
+
|
246
|
+
@Test
|
247
|
+
public void waitLeadExportJobTimeOut() throws Exception
|
248
|
+
{
|
249
|
+
String bulkExportId = "bulkExportId";
|
250
|
+
Map<String, String> pathParams = new HashMap<>();
|
251
|
+
pathParams.put("export_id", bulkExportId);
|
252
|
+
MarketoResponse<ObjectNode> marketoResponse = mock(MarketoResponse.class);
|
253
|
+
when(marketoResponse.isSuccess()).thenReturn(true);
|
254
|
+
ObjectNode result = mock(ObjectNode.class);
|
255
|
+
when(marketoResponse.getResult()).thenReturn(Arrays.asList(result));
|
256
|
+
when(result.get("status")).thenReturn(new TextNode("Queued")).thenReturn(new TextNode("Processing"));
|
257
|
+
doReturn(marketoResponse).when(marketoRestClient).doGet(eq(END_POINT + MarketoRESTEndpoint.GET_LEAD_EXPORT_STATUS.getEndpoint(pathParams)), isNull(Map.class), isNull(ImmutableListMultimap.class), any(MarketoResponseJetty92EntityReader.class));
|
258
|
+
try {
|
259
|
+
marketoRestClient.waitLeadExportJobComplete(bulkExportId, 1, 4);
|
260
|
+
}
|
261
|
+
catch (DataException e) {
|
262
|
+
assertTrue(e.getMessage().contains("Job timeout exception"));
|
263
|
+
verify(marketoRestClient, times(3)).doGet(eq(END_POINT + MarketoRESTEndpoint.GET_LEAD_EXPORT_STATUS.getEndpoint(pathParams)), isNull(Map.class), isNull(ImmutableListMultimap.class), any(MarketoResponseJetty92EntityReader.class));
|
264
|
+
return;
|
265
|
+
}
|
266
|
+
fail();
|
267
|
+
}
|
268
|
+
|
269
|
+
@Test
|
270
|
+
public void waitLeadExportJobFailed() throws Exception
|
271
|
+
{
|
272
|
+
String bulkExportId = "bulkExportId";
|
273
|
+
Map<String, String> pathParams = new HashMap<>();
|
274
|
+
pathParams.put("export_id", bulkExportId);
|
275
|
+
MarketoResponse<ObjectNode> marketoResponse = mock(MarketoResponse.class);
|
276
|
+
when(marketoResponse.isSuccess()).thenReturn(true);
|
277
|
+
ObjectNode result = mock(ObjectNode.class);
|
278
|
+
when(marketoResponse.getResult()).thenReturn(Arrays.asList(result));
|
279
|
+
when(result.get("status")).thenReturn(new TextNode("Queued")).thenReturn(new TextNode("Failed"));
|
280
|
+
when(result.get("errorMsg")).thenReturn(new TextNode("ErrorMessage"));
|
281
|
+
doReturn(marketoResponse).when(marketoRestClient).doGet(eq(END_POINT + MarketoRESTEndpoint.GET_LEAD_EXPORT_STATUS.getEndpoint(pathParams)), isNull(Map.class), isNull(ImmutableListMultimap.class), any(MarketoResponseJetty92EntityReader.class));
|
282
|
+
try {
|
283
|
+
marketoRestClient.waitLeadExportJobComplete(bulkExportId, 1, 4);
|
284
|
+
}
|
285
|
+
catch (DataException e) {
|
286
|
+
assertTrue(e.getMessage().contains("Bulk extract job failed"));
|
287
|
+
assertTrue(e.getMessage().contains("ErrorMessage"));
|
288
|
+
verify(marketoRestClient, times(2)).doGet(eq(END_POINT + MarketoRESTEndpoint.GET_LEAD_EXPORT_STATUS.getEndpoint(pathParams)), isNull(Map.class), isNull(ImmutableListMultimap.class), any(MarketoResponseJetty92EntityReader.class));
|
289
|
+
return;
|
290
|
+
}
|
291
|
+
fail();
|
292
|
+
}
|
293
|
+
|
294
|
+
@Test
|
295
|
+
public void waitActitvityExportJobComplete() throws Exception
|
296
|
+
{
|
297
|
+
String exportId = "exportId";
|
298
|
+
Map<String, String> pathParamMap = new HashMap<>();
|
299
|
+
pathParamMap.put("export_id", exportId);
|
300
|
+
MarketoResponse<ObjectNode> marketoResponse = mock(MarketoResponse.class);
|
301
|
+
when(marketoResponse.isSuccess()).thenReturn(true);
|
302
|
+
ObjectNode mockObjectNode = mock(ObjectNode.class);
|
303
|
+
when(marketoResponse.getResult()).thenReturn(Arrays.asList(mockObjectNode));
|
304
|
+
when(mockObjectNode.get("status")).thenReturn(new TextNode("Completed"));
|
305
|
+
doReturn(marketoResponse).when(marketoRestClient).doGet(anyString(), isNull(Map.class), isNull(ImmutableListMultimap.class), any(Jetty92ResponseReader.class));
|
306
|
+
marketoRestClient.waitActitvityExportJobComplete(exportId, 1, 3);
|
307
|
+
verify(marketoRestClient, times(1)).doGet(eq(END_POINT + MarketoRESTEndpoint.GET_ACTIVITY_EXPORT_STATUS.getEndpoint(pathParamMap)), isNull(Map.class), isNull(ImmutableListMultimap.class), any(Jetty92ResponseReader.class));
|
308
|
+
}
|
309
|
+
|
310
|
+
@Test
|
311
|
+
public void getLeadBulkExtractResult() throws Exception
|
312
|
+
{
|
313
|
+
String exportId = "exportId";
|
314
|
+
Map<String, String> pathParamMap = new HashMap<>();
|
315
|
+
pathParamMap.put("export_id", exportId);
|
316
|
+
doReturn(mock(InputStream.class)).when(marketoRestClient).doGet(eq(END_POINT + MarketoRESTEndpoint.GET_LEAD_EXPORT_RESULT.getEndpoint(pathParamMap)), isNull(Map.class), isNull(ImmutableListMultimap.class), any(MarketoInputStreamResponseEntityReader.class));
|
317
|
+
marketoRestClient.getLeadBulkExtractResult(exportId);
|
318
|
+
verify(marketoRestClient, times(1)).doGet(eq(END_POINT + MarketoRESTEndpoint.GET_LEAD_EXPORT_RESULT.getEndpoint(pathParamMap)), isNull(Map.class), isNull(ImmutableListMultimap.class), any(MarketoInputStreamResponseEntityReader.class));
|
319
|
+
}
|
320
|
+
|
321
|
+
@Test
|
322
|
+
public void getActivitiesBulkExtractResult() throws Exception
|
323
|
+
{
|
324
|
+
String exportId = "exportId";
|
325
|
+
Map<String, String> pathParamMap = new HashMap<>();
|
326
|
+
pathParamMap.put("export_id", exportId);
|
327
|
+
doReturn(mock(InputStream.class)).when(marketoRestClient).doGet(eq(END_POINT + MarketoRESTEndpoint.GET_ACTIVITY_EXPORT_RESULT.getEndpoint(pathParamMap)), isNull(Map.class), isNull(ImmutableListMultimap.class), any(MarketoInputStreamResponseEntityReader.class));
|
328
|
+
marketoRestClient.getActivitiesBulkExtractResult(exportId);
|
329
|
+
verify(marketoRestClient, times(1)).doGet(eq(END_POINT + MarketoRESTEndpoint.GET_ACTIVITY_EXPORT_RESULT.getEndpoint(pathParamMap)), isNull(Map.class), isNull(ImmutableListMultimap.class), any(MarketoInputStreamResponseEntityReader.class));
|
330
|
+
}
|
331
|
+
|
332
|
+
@Test
|
333
|
+
public void getLists() throws Exception
|
334
|
+
{
|
335
|
+
mockMarketoPageResponse("/fixtures/lists_response.json", END_POINT + MarketoRESTEndpoint.GET_LISTS.getEndpoint());
|
336
|
+
RecordPagingIterable<ObjectNode> lists = marketoRestClient.getLists();
|
337
|
+
Iterator<ObjectNode> iterator = lists.iterator();
|
338
|
+
ObjectNode list1 = iterator.next();
|
339
|
+
ObjectNode list2 = iterator.next();
|
340
|
+
assertFalse(iterator.hasNext());
|
341
|
+
assertEquals("Test list 1", list1.get("name").asText());
|
342
|
+
assertEquals("Test list 2", list2.get("name").asText());
|
343
|
+
ArgumentCaptor<Multimap> immutableListMultimapArgumentCaptor = ArgumentCaptor.forClass(Multimap.class);
|
344
|
+
verify(marketoRestClient, times(2)).doGet(eq(END_POINT + MarketoRESTEndpoint.GET_LISTS.getEndpoint()), isNull(Map.class), immutableListMultimapArgumentCaptor.capture(), any(MarketoResponseJetty92EntityReader.class));
|
345
|
+
List<Multimap> params = immutableListMultimapArgumentCaptor.getAllValues();
|
346
|
+
Multimap params1 = params.get(0);
|
347
|
+
assertEquals("300", params1.get("batchSize").iterator().next());
|
348
|
+
Multimap params2 = params.get(1);
|
349
|
+
assertEquals("GWP55GLCVCZLPE6SS7OCG5IEXQ======", params2.get("nextPageToken").iterator().next());
|
350
|
+
}
|
351
|
+
|
352
|
+
@Test
|
353
|
+
public void getPrograms() throws Exception
|
354
|
+
{
|
355
|
+
mockMarketoPageResponse("/fixtures/program_response.json", END_POINT + MarketoRESTEndpoint.GET_PROGRAMS.getEndpoint());
|
356
|
+
RecordPagingIterable<ObjectNode> lists = marketoRestClient.getPrograms();
|
357
|
+
Iterator<ObjectNode> iterator = lists.iterator();
|
358
|
+
ObjectNode program1 = iterator.next();
|
359
|
+
ObjectNode program2 = iterator.next();
|
360
|
+
ObjectNode program3 = iterator.next();
|
361
|
+
assertFalse(iterator.hasNext());
|
362
|
+
assertEquals("MB_Sep_25_test_program", program1.get("name").asText());
|
363
|
+
assertEquals("TD Output Test Program", program2.get("name").asText());
|
364
|
+
assertEquals("Yao_progream", program3.get("name").asText());
|
365
|
+
ArgumentCaptor<ImmutableListMultimap> immutableListMultimapArgumentCaptor = ArgumentCaptor.forClass(ImmutableListMultimap.class);
|
366
|
+
verify(marketoRestClient, times(2)).doGet(eq(END_POINT + MarketoRESTEndpoint.GET_PROGRAMS.getEndpoint()), isNull(Map.class), immutableListMultimapArgumentCaptor.capture(), any(MarketoResponseJetty92EntityReader.class));
|
367
|
+
List<ImmutableListMultimap> params = immutableListMultimapArgumentCaptor.getAllValues();
|
368
|
+
ImmutableListMultimap params1 = params.get(0);
|
369
|
+
assertEquals("0", params1.get("offset").get(0));
|
370
|
+
assertEquals("2", params1.get("maxReturn").get(0));
|
371
|
+
ImmutableListMultimap params2 = params.get(1);
|
372
|
+
assertEquals("2", params2.get("offset").get(0));
|
373
|
+
}
|
374
|
+
|
375
|
+
private void mockMarketoPageResponse(String fixtureName, String mockEndpoint) throws IOException
|
376
|
+
{
|
377
|
+
ArrayNode listPages = (ArrayNode) OBJECT_MAPPER.readTree(new String(ByteStreams.toByteArray(this.getClass().getResourceAsStream(fixtureName)))).get("responses");
|
378
|
+
MarketoResponse<ObjectNode> page1 = OBJECT_MAPPER.readValue(listPages.get(0).toString(), RESPONSE_TYPE);
|
379
|
+
MarketoResponse<ObjectNode> page2 = OBJECT_MAPPER.readValue(listPages.get(1).toString(), RESPONSE_TYPE);
|
380
|
+
doReturn(page1).doReturn(page2).when(marketoRestClient).doGet(eq(mockEndpoint), isNull(Map.class), any(Multimap.class), any(MarketoResponseJetty92EntityReader.class));
|
381
|
+
}
|
382
|
+
|
383
|
+
@Test
|
384
|
+
public void getLeadsByProgram() throws Exception
|
385
|
+
{
|
386
|
+
String programId = "programId";
|
387
|
+
Map<String, String> pathParamPath = new HashMap<>();
|
388
|
+
pathParamPath.put("program_id", programId);
|
389
|
+
mockMarketoPageResponse("/fixtures/lead_by_program_response.json", END_POINT + MarketoRESTEndpoint.GET_LEADS_BY_PROGRAM.getEndpoint(pathParamPath));
|
390
|
+
RecordPagingIterable<ObjectNode> lists = marketoRestClient.getLeadsByProgram(programId, Arrays.asList("firstName", "lastName"));
|
391
|
+
Iterator<ObjectNode> iterator = lists.iterator();
|
392
|
+
ObjectNode lead1 = iterator.next();
|
393
|
+
ObjectNode lead2 = iterator.next();
|
394
|
+
assertFalse(iterator.hasNext());
|
395
|
+
assertEquals("Tai 1", lead1.get("firstName").asText());
|
396
|
+
assertEquals("Tai", lead2.get("firstName").asText());
|
397
|
+
ArgumentCaptor<ImmutableListMultimap> immutableListMultimapArgumentCaptor = ArgumentCaptor.forClass(ImmutableListMultimap.class);
|
398
|
+
verify(marketoRestClient, times(2)).doGet(eq(END_POINT + MarketoRESTEndpoint.GET_LEADS_BY_PROGRAM.getEndpoint(pathParamPath)), isNull(Map.class), immutableListMultimapArgumentCaptor.capture(), any(MarketoResponseJetty92EntityReader.class));
|
399
|
+
List<ImmutableListMultimap> params = immutableListMultimapArgumentCaptor.getAllValues();
|
400
|
+
Multimap params1 = params.get(0);
|
401
|
+
assertEquals("300", params1.get("batchSize").iterator().next());
|
402
|
+
assertEquals("firstName,lastName", params1.get("fields").iterator().next());
|
403
|
+
Multimap params2 = params.get(1);
|
404
|
+
assertEquals("z4MgsIiC5C======", params2.get("nextPageToken").iterator().next());
|
405
|
+
}
|
406
|
+
|
407
|
+
@Test
|
408
|
+
public void getLeadsByList() throws Exception
|
409
|
+
{
|
410
|
+
String listId = "listId";
|
411
|
+
Map<String, String> pathParamPath = new HashMap<>();
|
412
|
+
pathParamPath.put("list_id", listId);
|
413
|
+
mockMarketoPageResponse("/fixtures/lead_by_list.json", END_POINT + MarketoRESTEndpoint.GET_LEADS_BY_LIST.getEndpoint(pathParamPath));
|
414
|
+
RecordPagingIterable<ObjectNode> lists = marketoRestClient.getLeadsByList(listId, Arrays.asList("firstName", "lastName"));
|
415
|
+
Iterator<ObjectNode> iterator = lists.iterator();
|
416
|
+
ObjectNode lead1 = iterator.next();
|
417
|
+
ObjectNode lead2 = iterator.next();
|
418
|
+
assertFalse(iterator.hasNext());
|
419
|
+
assertEquals("John10093", lead1.get("firstName").asText());
|
420
|
+
assertEquals("John10094", lead2.get("firstName").asText());
|
421
|
+
ArgumentCaptor<ImmutableListMultimap> immutableListMultimapArgumentCaptor = ArgumentCaptor.forClass(ImmutableListMultimap.class);
|
422
|
+
verify(marketoRestClient, times(2)).doGet(eq(END_POINT + MarketoRESTEndpoint.GET_LEADS_BY_LIST.getEndpoint(pathParamPath)), isNull(Map.class), immutableListMultimapArgumentCaptor.capture(), any(MarketoResponseJetty92EntityReader.class));
|
423
|
+
List<ImmutableListMultimap> params = immutableListMultimapArgumentCaptor.getAllValues();
|
424
|
+
Multimap params1 = params.get(0);
|
425
|
+
assertEquals("300", params1.get("batchSize").iterator().next());
|
426
|
+
assertEquals("firstName,lastName", params1.get("fields").iterator().next());
|
427
|
+
Multimap params2 = params.get(1);
|
428
|
+
assertEquals("z4MgsIiC5C======", params2.get("nextPageToken").iterator().next());
|
429
|
+
}
|
430
|
+
|
431
|
+
@Test
|
432
|
+
public void getCampaign() throws Exception
|
433
|
+
{
|
434
|
+
mockMarketoPageResponse("/fixtures/campaign_response.json", END_POINT + MarketoRESTEndpoint.GET_CAMPAIGN.getEndpoint());
|
435
|
+
RecordPagingIterable<ObjectNode> lists = marketoRestClient.getCampaign();
|
436
|
+
Iterator<ObjectNode> iterator = lists.iterator();
|
437
|
+
ObjectNode campaign1 = iterator.next();
|
438
|
+
ObjectNode campaign2 = iterator.next();
|
439
|
+
assertFalse(iterator.hasNext());
|
440
|
+
assertEquals("Opened Sales Email", campaign1.get("name").asText());
|
441
|
+
assertEquals("Clicks Link in Email", campaign2.get("name").asText());
|
442
|
+
ArgumentCaptor<ImmutableListMultimap> immutableListMultimapArgumentCaptor = ArgumentCaptor.forClass(ImmutableListMultimap.class);
|
443
|
+
verify(marketoRestClient, times(2)).doGet(eq(END_POINT + MarketoRESTEndpoint.GET_CAMPAIGN.getEndpoint()), isNull(Map.class), immutableListMultimapArgumentCaptor.capture(), any(MarketoResponseJetty92EntityReader.class));
|
444
|
+
List<ImmutableListMultimap> params = immutableListMultimapArgumentCaptor.getAllValues();
|
445
|
+
Multimap params1 = params.get(0);
|
446
|
+
assertEquals("300", params1.get("batchSize").iterator().next());
|
447
|
+
Multimap params2 = params.get(1);
|
448
|
+
assertEquals("z4MgsIiC5C======", params2.get("nextPageToken").iterator().next());
|
449
|
+
}
|
450
|
+
}
|