embulk-input-marketo 0.6.9 → 0.6.10.alpha

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c0cae436fbdd33d197c7acb3e72ec4d5e2f5b00e
4
- data.tar.gz: 9077aadd1cf80fecfeef1ba687f1827a01d64416
3
+ metadata.gz: 22645790a18bbe5578b7146e488167fe0139a1a1
4
+ data.tar.gz: b26ea8361cbe4f5d32796eb7295250becc11497d
5
5
  SHA512:
6
- metadata.gz: 511670f368834d3d7d0a47a13d0a99391f3f7a0935e02d2011ef4d18e0d15ab6faa487358056ae2bcddf4fcdb1955e84b21639bae5f4eda5834b9d9f414b50a8
7
- data.tar.gz: 8ae2db810911899e13dc03745dd0f6c1f8106f1d20cf9c866c885cdaa072b64c1bb92d2f52907f1f4a00a6351d9f57d46be07f353e50b7fe31cd297c02a449a8
6
+ metadata.gz: 3c64fa145b1717cbf966b1e92052372fec3cd7848e97c128b769aba1721c4d5a852f1a1c7d656017c529009492a3f530c863e328275aab57e2c81f6942f3bd31
7
+ data.tar.gz: d0f35afc155263d59d5c491784481f189d491b5c5866fc7a983dc3621dc7b7efbf1173524ac9490310c725a926fc44cff89c4299aac8a02be1947bfe156feeb1
@@ -1,4 +1,4 @@
1
- ## 0.6.8 - 2018-04-12
1
+ ## 0.6.9 - 2018-04-16
2
2
  * [fixed] Fix wrapped TimeoutException not retry [#85](https://github.com/treasure-data/embulk-input-marketo/pull/85)
3
3
  * [enhance] Make read_timeout configurable [#85](https://github.com/treasure-data/embulk-input-marketo/pull/85)
4
4
 
@@ -16,7 +16,7 @@ repositories {
16
16
  configurations {
17
17
  provided
18
18
  }
19
- version = "0.6.9"
19
+ version = "0.6.10.alpha"
20
20
  sourceCompatibility = 1.7
21
21
  targetCompatibility = 1.7
22
22
 
@@ -14,10 +14,6 @@ public interface MarketoService
14
14
  {
15
15
  List<MarketoField> describeLead();
16
16
 
17
- List<MarketoField> describeLeadByProgram();
18
-
19
- List<MarketoField> describeLeadByLists();
20
-
21
17
  File extractLead(Date startTime, Date endTime, List<String> extractedFields, String filterField, int pollingTimeIntervalSecond, int bulkJobTimeoutSecond);
22
18
 
23
19
  File extractAllActivity(Date startTime, Date endTime, int pollingTimeIntervalSecond, int bulkJobTimeoutSecond);
@@ -185,22 +185,6 @@ public class MarketoServiceImpl implements MarketoService
185
185
  return marketoRestClient.describeLead();
186
186
  }
187
187
 
188
- @Override
189
- public List<MarketoField> describeLeadByProgram()
190
- {
191
- List<MarketoField> columns = marketoRestClient.describeLead();
192
- columns.add(new MarketoField(MarketoUtils.PROGRAM_ID_COLUMN_NAME, MarketoField.MarketoDataType.STRING));
193
- return columns;
194
- }
195
-
196
- @Override
197
- public List<MarketoField> describeLeadByLists()
198
- {
199
- List<MarketoField> columns = marketoRestClient.describeLead();
200
- columns.add(new MarketoField(MarketoUtils.LIST_ID_COLUMN_NAME, MarketoField.MarketoDataType.STRING));
201
- return columns;
202
- }
203
-
204
188
  private static class DownloadBulkExtractException extends Exception
205
189
  {
206
190
  private final long byteWritten;
@@ -7,8 +7,6 @@ import org.embulk.config.Config;
7
7
  import org.embulk.config.ConfigDefault;
8
8
  import org.embulk.input.marketo.MarketoService;
9
9
  import org.embulk.input.marketo.MarketoServiceImpl;
10
- import org.embulk.input.marketo.MarketoUtils;
11
- import org.embulk.input.marketo.model.MarketoField;
12
10
  import org.embulk.input.marketo.rest.MarketoRestClient;
13
11
  import org.embulk.spi.DataException;
14
12
  import org.embulk.spi.Exec;
@@ -29,7 +27,7 @@ public class LeadBulkExtractInputPlugin extends MarketoBaseBulkExtractInputPlugi
29
27
 
30
28
  private static final String UPDATED_AT = "updatedAt";
31
29
 
32
- public interface PluginTask extends MarketoBaseBulkExtractInputPlugin.PluginTask
30
+ public interface PluginTask extends MarketoBaseBulkExtractInputPlugin.PluginTask, LeadServiceResponseMapperBuilder.PluginTask
33
31
  {
34
32
  @Config("use_updated_at")
35
33
  @ConfigDefault("false")
@@ -63,9 +61,8 @@ public class LeadBulkExtractInputPlugin extends MarketoBaseBulkExtractInputPlugi
63
61
  {
64
62
  try (MarketoRestClient marketoRestClient = createMarketoRestClient(task)) {
65
63
  MarketoService marketoService = new MarketoServiceImpl(marketoRestClient);
66
- List<MarketoField> columns = marketoService.describeLead();
67
- task.setExtractedFields(MarketoUtils.getFieldNameFromMarketoFields(columns));
68
- return MarketoUtils.buildDynamicResponseMapper(task.getSchemaColumnPrefix(), columns);
64
+ LeadServiceResponseMapperBuilder<PluginTask> leadServiceResponseMapperBuilder = new LeadServiceResponseMapperBuilder<>(task, marketoService);
65
+ return leadServiceResponseMapperBuilder.buildServiceResponseMapper(task);
69
66
  }
70
67
  }
71
68
  }
@@ -0,0 +1,85 @@
1
+ package org.embulk.input.marketo.delegate;
2
+
3
+ import com.google.common.base.Optional;
4
+ import org.embulk.base.restclient.ServiceResponseMapper;
5
+ import org.embulk.base.restclient.ServiceResponseMapperBuildable;
6
+ import org.embulk.base.restclient.record.ValueLocator;
7
+ import org.embulk.config.Config;
8
+ import org.embulk.config.ConfigDefault;
9
+ import org.embulk.input.marketo.MarketoService;
10
+ import org.embulk.input.marketo.MarketoUtils;
11
+ import org.embulk.input.marketo.model.MarketoField;
12
+ import org.embulk.spi.Exec;
13
+ import org.slf4j.Logger;
14
+
15
+ import java.util.ArrayList;
16
+ import java.util.List;
17
+
18
+ /**
19
+ * Created by tai.khuu on 5/21/18.
20
+ */
21
+ public class LeadServiceResponseMapperBuilder<T extends LeadServiceResponseMapperBuilder.PluginTask> implements ServiceResponseMapperBuildable<T>
22
+ {
23
+ private static final Logger LOGGER = Exec.getLogger(LeadServiceResponseMapperBuilder.class);
24
+ private MarketoService marketoService;
25
+
26
+ private T pluginTask;
27
+
28
+ public interface PluginTask extends MarketoBaseInputPluginDelegate.PluginTask
29
+ {
30
+ @Config("included_fields")
31
+ @ConfigDefault("null")
32
+ Optional<List<String>> getIncludedLeadFields();
33
+
34
+ @Config("extracted_fields")
35
+ @ConfigDefault("[]")
36
+ List<String> getExtractedFields();
37
+
38
+ void setExtractedFields(List<String> extractedFields);
39
+ }
40
+
41
+ public LeadServiceResponseMapperBuilder(T task, MarketoService marketoService)
42
+ {
43
+ this.pluginTask = task;
44
+ this.marketoService = marketoService;
45
+ }
46
+
47
+ protected List<MarketoField> getLeadColumns()
48
+ {
49
+ List<MarketoField> columns = marketoService.describeLead();
50
+ if (pluginTask.getIncludedLeadFields().isPresent() && !pluginTask.getIncludedLeadFields().get().isEmpty()) {
51
+ List<MarketoField> filteredColumns = new ArrayList<>();
52
+ List<String> includedFields = pluginTask.getIncludedLeadFields().get();
53
+ for (String fieldName : includedFields) {
54
+ Optional<MarketoField> includedField = lookupFieldIgnoreCase(columns, fieldName);
55
+ if (includedField.isPresent()) {
56
+ filteredColumns.add(includedField.get());
57
+ }
58
+ else {
59
+ LOGGER.warn("Included field [{}] not found in Marketo lead field", fieldName);
60
+ }
61
+ }
62
+ columns = filteredColumns;
63
+ LOGGER.info("Included Fields option is set, included columns: [{}]", columns);
64
+ }
65
+ return columns;
66
+ }
67
+
68
+ private static Optional<MarketoField> lookupFieldIgnoreCase(List<MarketoField> inputList, String lookupFieldName)
69
+ {
70
+ for (MarketoField marketoField : inputList) {
71
+ if (marketoField.getName().equalsIgnoreCase(lookupFieldName)) {
72
+ return Optional.of(marketoField);
73
+ }
74
+ }
75
+ return Optional.absent();
76
+ }
77
+
78
+ @Override
79
+ public ServiceResponseMapper<? extends ValueLocator> buildServiceResponseMapper(T task)
80
+ {
81
+ List<MarketoField> leadColumns = getLeadColumns();
82
+ pluginTask.setExtractedFields(MarketoUtils.getFieldNameFromMarketoFields(leadColumns));
83
+ return MarketoUtils.buildDynamicResponseMapper(pluginTask.getSchemaColumnPrefix(), leadColumns);
84
+ }
85
+ }
@@ -10,6 +10,7 @@ import org.embulk.input.marketo.MarketoUtils;
10
10
  import org.embulk.input.marketo.model.MarketoField;
11
11
  import org.embulk.input.marketo.rest.MarketoRestClient;
12
12
 
13
+ import java.util.ArrayList;
13
14
  import java.util.Iterator;
14
15
  import java.util.List;
15
16
 
@@ -18,7 +19,7 @@ import java.util.List;
18
19
  */
19
20
  public class LeadWithListInputPlugin extends MarketoBaseInputPluginDelegate<LeadWithListInputPlugin.PluginTask>
20
21
  {
21
- public interface PluginTask extends MarketoBaseInputPluginDelegate.PluginTask
22
+ public interface PluginTask extends MarketoBaseInputPluginDelegate.PluginTask, LeadServiceResponseMapperBuilder.PluginTask
22
23
  {
23
24
  }
24
25
 
@@ -29,7 +30,10 @@ public class LeadWithListInputPlugin extends MarketoBaseInputPluginDelegate<Lead
29
30
  @Override
30
31
  protected Iterator<ServiceRecord> getServiceRecords(MarketoService marketoService, PluginTask task)
31
32
  {
32
- return FluentIterable.from(marketoService.getAllListLead(task.getExtractedFields())).transform(MarketoUtils.TRANSFORM_OBJECT_TO_JACKSON_SERVICE_RECORD_FUNCTION).iterator();
33
+ List<String> extractedFields = task.getExtractedFields();
34
+ // Remove LIST_ID_COLUMN_NAME when sent fields to Marketo since LIST_ID_COLUMN_NAME are added by plugin code
35
+ extractedFields.remove(MarketoUtils.LIST_ID_COLUMN_NAME);
36
+ return FluentIterable.from(marketoService.getAllListLead(extractedFields)).transform(MarketoUtils.TRANSFORM_OBJECT_TO_JACKSON_SERVICE_RECORD_FUNCTION).iterator();
33
37
  }
34
38
 
35
39
  @Override
@@ -37,9 +41,25 @@ public class LeadWithListInputPlugin extends MarketoBaseInputPluginDelegate<Lead
37
41
  {
38
42
  try (MarketoRestClient marketoRestClient = createMarketoRestClient(task)) {
39
43
  MarketoService marketoService = new MarketoServiceImpl(marketoRestClient);
40
- List<MarketoField> columns = marketoService.describeLeadByLists();
41
- task.setExtractedFields(MarketoUtils.getFieldNameFromMarketoFields(columns, MarketoUtils.LIST_ID_COLUMN_NAME));
42
- return MarketoUtils.buildDynamicResponseMapper(task.getSchemaColumnPrefix(), columns);
44
+ LeadWithListServiceResponseMapper serviceResponseMapper = new LeadWithListServiceResponseMapper(task, marketoService);
45
+ return serviceResponseMapper.buildServiceResponseMapper(task);
46
+ }
47
+ }
48
+
49
+ private static class LeadWithListServiceResponseMapper extends LeadServiceResponseMapperBuilder<PluginTask>
50
+ {
51
+
52
+ public LeadWithListServiceResponseMapper(LeadWithListInputPlugin.PluginTask task, MarketoService marketoService)
53
+ {
54
+ super(task, marketoService);
55
+ }
56
+
57
+ @Override
58
+ protected List<MarketoField> getLeadColumns()
59
+ {
60
+ List<MarketoField> leadColumns = super.getLeadColumns();
61
+ leadColumns.add(new MarketoField(MarketoUtils.LIST_ID_COLUMN_NAME, MarketoField.MarketoDataType.STRING));
62
+ return leadColumns;
43
63
  }
44
64
  }
45
65
  }
@@ -18,7 +18,7 @@ import java.util.List;
18
18
  */
19
19
  public class LeadWithProgramInputPlugin extends MarketoBaseInputPluginDelegate<LeadWithProgramInputPlugin.PluginTask>
20
20
  {
21
- public interface PluginTask extends MarketoBaseInputPluginDelegate.PluginTask
21
+ public interface PluginTask extends MarketoBaseInputPluginDelegate.PluginTask, LeadServiceResponseMapperBuilder.PluginTask
22
22
  {
23
23
  }
24
24
 
@@ -26,6 +26,8 @@ public class LeadWithProgramInputPlugin extends MarketoBaseInputPluginDelegate<L
26
26
  protected Iterator<ServiceRecord> getServiceRecords(MarketoService marketoService, PluginTask task)
27
27
  {
28
28
  List<String> fieldNames = task.getExtractedFields();
29
+ // Remove PROGRAM_ID_COLUMN_NAME when sent fields to Marketo since PROGRAM_ID_COLUMN_NAME are added by plugin code
30
+ fieldNames.remove(MarketoUtils.PROGRAM_ID_COLUMN_NAME);
29
31
  return FluentIterable.from(marketoService.getAllProgramLead(fieldNames)).
30
32
  transform(MarketoUtils.TRANSFORM_OBJECT_TO_JACKSON_SERVICE_RECORD_FUNCTION).iterator();
31
33
  }
@@ -35,9 +37,24 @@ public class LeadWithProgramInputPlugin extends MarketoBaseInputPluginDelegate<L
35
37
  {
36
38
  try (MarketoRestClient marketoRestClient = createMarketoRestClient(task)) {
37
39
  MarketoService marketoService = new MarketoServiceImpl(marketoRestClient);
38
- List<MarketoField> columns = marketoService.describeLeadByProgram();
39
- task.setExtractedFields(MarketoUtils.getFieldNameFromMarketoFields(columns, MarketoUtils.PROGRAM_ID_COLUMN_NAME));
40
- return MarketoUtils.buildDynamicResponseMapper(task.getSchemaColumnPrefix(), columns);
40
+ LeadWithProgramServiceResponseMapper serviceResponseMapper = new LeadWithProgramServiceResponseMapper(task, marketoService);
41
+ return serviceResponseMapper.buildServiceResponseMapper(task);
42
+ }
43
+ }
44
+
45
+ private static class LeadWithProgramServiceResponseMapper extends LeadServiceResponseMapperBuilder<PluginTask>
46
+ {
47
+ public LeadWithProgramServiceResponseMapper(LeadWithProgramInputPlugin.PluginTask task, MarketoService marketoService)
48
+ {
49
+ super(task, marketoService);
50
+ }
51
+
52
+ @Override
53
+ protected List<MarketoField> getLeadColumns()
54
+ {
55
+ List<MarketoField> leadColumns = super.getLeadColumns();
56
+ leadColumns.add(new MarketoField(MarketoUtils.PROGRAM_ID_COLUMN_NAME, MarketoField.MarketoDataType.STRING));
57
+ return leadColumns;
41
58
  }
42
59
  }
43
60
  }
@@ -45,7 +45,6 @@ import java.util.Iterator;
45
45
  import java.util.List;
46
46
  import java.util.Map;
47
47
  import java.util.NoSuchElementException;
48
- import java.util.Set;
49
48
 
50
49
  /**
51
50
  * Created by tai.khuu on 9/18/17.
@@ -1,16 +1,14 @@
1
1
  package org.embulk.input.marketo.delegate;
2
2
 
3
3
  import com.google.common.annotations.VisibleForTesting;
4
+ import com.google.common.base.Optional;
4
5
  import org.embulk.base.restclient.DefaultServiceDataSplitter;
5
6
  import org.embulk.base.restclient.RestClientInputPluginDelegate;
6
7
  import org.embulk.base.restclient.RestClientInputTaskBase;
7
8
  import org.embulk.base.restclient.ServiceDataSplitter;
8
9
  import org.embulk.base.restclient.record.RecordImporter;
9
10
  import org.embulk.base.restclient.record.ServiceRecord;
10
- import org.embulk.config.Config;
11
- import org.embulk.config.ConfigDefault;
12
- import org.embulk.config.ConfigDiff;
13
- import org.embulk.config.TaskReport;
11
+ import org.embulk.config.*;
14
12
  import org.embulk.input.marketo.MarketoService;
15
13
  import org.embulk.input.marketo.MarketoServiceImpl;
16
14
  import org.embulk.input.marketo.rest.MarketoRestClient;
@@ -30,33 +28,13 @@ import java.util.List;
30
28
  public abstract class MarketoBaseInputPluginDelegate<T extends MarketoBaseInputPluginDelegate.PluginTask> implements RestClientInputPluginDelegate<T>
31
29
  {
32
30
  public static final int PREVIEW_RECORD_LIMIT = 15;
33
- private static final int CONNECT_TIMEOUT_IN_MILLIS = 30000;
34
- private static final int IDLE_TIMEOUT_IN_MILLIS = 60000;
35
31
  public interface PluginTask
36
32
  extends RestClientInputTaskBase, MarketoRestClient.PluginTask
37
33
  {
38
- @Config("maximum_retries")
39
- @ConfigDefault("7")
40
- Integer getMaximumRetries();
41
-
42
- @Config("initial_retry_interval_milis")
43
- @ConfigDefault("20000")
44
- Integer getInitialRetryIntervalMilis();
45
-
46
- @Config("maximum_retries_interval_milis")
47
- @ConfigDefault("120000")
48
- Integer getMaximumRetriesIntervalMilis();
49
-
50
34
  @Config("schema_column_prefix")
51
35
  @ConfigDefault("\"mk\"")
52
36
  String getSchemaColumnPrefix();
53
37
 
54
- @Config("extracted_fields")
55
- @ConfigDefault("[]")
56
- List<String> getExtractedFields();
57
-
58
- void setExtractedFields(List<String> extractedFields);
59
-
60
38
  DateTime getJobStartTime();
61
39
 
62
40
  void setJobStartTime(DateTime dateTime);
@@ -77,6 +55,9 @@ public abstract class MarketoBaseInputPluginDelegate<T extends MarketoBaseInputP
77
55
  @Override
78
56
  public TaskReport ingestServiceData(T task, RecordImporter recordImporter, int taskIndex, PageBuilder pageBuilder)
79
57
  {
58
+ if (Exec.isPreview()) {
59
+ task.setBatchSize(PREVIEW_RECORD_LIMIT);
60
+ }
80
61
  try (MarketoRestClient restClient = createMarketoRestClient(task)) {
81
62
  MarketoService marketoService = new MarketoServiceImpl(restClient);
82
63
  Iterator<ServiceRecord> serviceRecords = getServiceRecords(marketoService, task);
@@ -95,10 +76,7 @@ public abstract class MarketoBaseInputPluginDelegate<T extends MarketoBaseInputP
95
76
  @VisibleForTesting
96
77
  public MarketoRestClient createMarketoRestClient(PluginTask task)
97
78
  {
98
- if (Exec.isPreview()) {
99
- task.setBatchSize(PREVIEW_RECORD_LIMIT);
100
- }
101
- return new MarketoRestClient(task, new Jetty92RetryHelper(task.getMaximumRetries(), task.getInitialRetryIntervalMilis(), task.getMaximumRetriesIntervalMilis(), new DefaultJetty92ClientCreator(CONNECT_TIMEOUT_IN_MILLIS, IDLE_TIMEOUT_IN_MILLIS)));
79
+ return new MarketoRestClient(task);
102
80
  }
103
81
 
104
82
  @Override
@@ -114,4 +114,13 @@ public class MarketoField
114
114
  return Optional.fromNullable(format);
115
115
  }
116
116
  }
117
+
118
+ @Override
119
+ public String toString()
120
+ {
121
+ return "MarketoField{" +
122
+ "name='" + name + '\'' +
123
+ ", marketoDataType=" + marketoDataType +
124
+ '}';
125
+ }
117
126
  }
@@ -23,6 +23,7 @@ import org.embulk.spi.DataException;
23
23
  import org.embulk.spi.Exec;
24
24
  import org.embulk.spi.type.Type;
25
25
  import org.embulk.spi.type.Types;
26
+ import org.embulk.util.retryhelper.jetty92.DefaultJetty92ClientCreator;
26
27
  import org.embulk.util.retryhelper.jetty92.Jetty92RetryHelper;
27
28
  import org.slf4j.Logger;
28
29
 
@@ -53,6 +54,9 @@ public class MarketoRestClient extends MarketoBaseRestClient
53
54
 
54
55
  private static final String RANGE_HEADER = "Range";
55
56
 
57
+ private static final int CONNECT_TIMEOUT_IN_MILLIS = 30000;
58
+ private static final int IDLE_TIMEOUT_IN_MILLIS = 60000;
59
+
56
60
  private String endPoint;
57
61
 
58
62
  private Integer batchSize;
@@ -108,11 +112,23 @@ public class MarketoRestClient extends MarketoBaseRestClient
108
112
  @Config("read_timeout_millis")
109
113
  @ConfigDefault("60000")
110
114
  Long getReadTimeoutMillis();
115
+
116
+ @Config("maximum_retries")
117
+ @ConfigDefault("7")
118
+ Integer getMaximumRetries();
119
+
120
+ @Config("initial_retry_interval_milis")
121
+ @ConfigDefault("20000")
122
+ Integer getInitialRetryIntervalMilis();
123
+
124
+ @Config("maximum_retries_interval_milis")
125
+ @ConfigDefault("120000")
126
+ Integer getMaximumRetriesIntervalMilis();
111
127
  }
112
128
 
113
- public MarketoRestClient(PluginTask task, Jetty92RetryHelper retryHelper)
129
+ public MarketoRestClient(PluginTask task)
114
130
  {
115
- this(MarketoUtils.getEndPoint(task.getAccountId()), MarketoUtils.getIdentityEndPoint(task.getAccountId()), task.getClientId(), task.getClientSecret(), task.getBatchSize(), task.getMaxReturn(), task.getReadTimeoutMillis(), task.getMarketoLimitIntervalMilis(), retryHelper);
131
+ this(MarketoUtils.getEndPoint(task.getAccountId()), MarketoUtils.getIdentityEndPoint(task.getAccountId()), task.getClientId(), task.getClientSecret(), task.getBatchSize(), task.getMaxReturn(), task.getReadTimeoutMillis(), task.getMarketoLimitIntervalMilis(), new Jetty92RetryHelper(task.getMaximumRetries(), task.getInitialRetryIntervalMilis(), task.getMaximumRetriesIntervalMilis(), new DefaultJetty92ClientCreator(CONNECT_TIMEOUT_IN_MILLIS, IDLE_TIMEOUT_IN_MILLIS)));
116
132
  }
117
133
 
118
134
  public MarketoRestClient(String endPoint, String identityEndPoint, String clientId, String clientSecret, Integer batchSize, Integer maxReturn, long readTimeoutMilis, int marketoLimitIntervalMilis, Jetty92RetryHelper retryHelper)
@@ -5,7 +5,6 @@ import com.fasterxml.jackson.databind.node.ObjectNode;
5
5
  import com.google.common.io.ByteStreams;
6
6
  import org.embulk.EmbulkTestRuntime;
7
7
  import org.embulk.input.marketo.model.BulkExtractRangeHeader;
8
- import org.embulk.input.marketo.model.MarketoField;
9
8
  import org.embulk.input.marketo.rest.MarketoRestClient;
10
9
  import org.embulk.input.marketo.rest.RecordPagingIterable;
11
10
  import org.junit.Assert;
@@ -135,28 +134,4 @@ public class MarketoServiceImplTest
135
134
  marketoService.describeLead();
136
135
  Mockito.verify(mockMarketoRestClient, Mockito.times(1)).describeLead();
137
136
  }
138
-
139
- @Test
140
- public void describeLeadByProgram() throws Exception
141
- {
142
- List<MarketoField> marketoFields = new ArrayList<>();
143
- Mockito.when(mockMarketoRestClient.describeLead()).thenReturn(marketoFields);
144
- marketoService.describeLeadByProgram();
145
- Mockito.verify(mockMarketoRestClient, Mockito.times(1)).describeLead();
146
- Assert.assertEquals(1, marketoFields.size());
147
- Assert.assertEquals("programId", marketoFields.get(0).getName());
148
- Assert.assertEquals(MarketoField.MarketoDataType.STRING, marketoFields.get(0).getMarketoDataType());
149
- }
150
-
151
- @Test
152
- public void describeLeadByLists() throws Exception
153
- {
154
- List<MarketoField> marketoFields = new ArrayList<>();
155
- Mockito.when(mockMarketoRestClient.describeLead()).thenReturn(marketoFields);
156
- marketoService.describeLeadByLists();
157
- Mockito.verify(mockMarketoRestClient, Mockito.times(1)).describeLead();
158
- Assert.assertEquals(1, marketoFields.size());
159
- Assert.assertEquals("listId", marketoFields.get(0).getName());
160
- Assert.assertEquals(MarketoField.MarketoDataType.STRING, marketoFields.get(0).getMarketoDataType());
161
- }
162
137
  }
@@ -0,0 +1,119 @@
1
+ package org.embulk.input.marketo.delegate;
2
+
3
+ import com.fasterxml.jackson.databind.JavaType;
4
+ import org.embulk.EmbulkTestRuntime;
5
+ import org.embulk.base.restclient.ServiceResponseMapper;
6
+ import org.embulk.base.restclient.record.ValueLocator;
7
+ import org.embulk.config.ConfigLoader;
8
+ import org.embulk.config.ConfigSource;
9
+ import org.embulk.input.marketo.MarketoService;
10
+ import org.embulk.input.marketo.MarketoUtils;
11
+ import org.embulk.input.marketo.model.MarketoField;
12
+ import org.embulk.spi.Schema;
13
+ import org.junit.Assert;
14
+ import org.junit.Before;
15
+ import org.junit.Rule;
16
+ import org.junit.Test;
17
+ import org.mockito.Mockito;
18
+
19
+ import java.io.IOException;
20
+ import java.util.ArrayList;
21
+ import java.util.List;
22
+
23
+ /**
24
+ * Created by tai.khuu on 5/24/18.
25
+ */
26
+ public class LeadServiceResponseMapperBuilderTest
27
+ {
28
+ private LeadServiceResponseMapperBuilder<LeadServiceResponseMapperBuilder.PluginTask> leadServiceResponseMapperBuilder;
29
+
30
+ @Rule
31
+ public EmbulkTestRuntime embulkTestRuntime = new EmbulkTestRuntime();
32
+
33
+ private LeadServiceResponseMapperBuilder.PluginTask pluginTask;
34
+
35
+ private ConfigSource configSource;
36
+
37
+ private MarketoService marketoService;
38
+
39
+ @Before
40
+ public void setUp() throws Exception
41
+ {
42
+ ConfigLoader configLoader = embulkTestRuntime.getExec().getInjector().getInstance(ConfigLoader.class);
43
+ configSource = configLoader.fromYamlString("--- \n" +
44
+ "account_id: 389-FLQ-873\n" +
45
+ "client_id: 87bdd058-12ff-49b8-8d29-c0518669e59a\n" +
46
+ "client_secret: 2uauyk43zzwjlUZwboZVxQ3SMTHe8ILY\n" +
47
+ "included_fields: \n" +
48
+ " - company\n" +
49
+ " - site\n" +
50
+ " - billingstreet\n" +
51
+ " - billingcity\n" +
52
+ " - billingstate\n" +
53
+ " - billingcountry\n" +
54
+ " - billingpostalCode\n" +
55
+ " - website\n" +
56
+ " - mainphone\n" +
57
+ " - annualrevenue\n" +
58
+ " - numberofemployees\n" +
59
+ " - industry\n" +
60
+ " - siccode\n" +
61
+ " - mktoCompanyNotes\n" +
62
+ " - externalcompanyId\n" +
63
+ " - id\n" +
64
+ "target: all_lead_with_list_id\n");
65
+ pluginTask = configSource.loadConfig(LeadServiceResponseMapperBuilder.PluginTask.class);
66
+ marketoService = Mockito.mock(MarketoService.class);
67
+ JavaType marketoFieldsType = MarketoUtils.OBJECT_MAPPER.getTypeFactory().constructParametrizedType(List.class, List.class, MarketoField.class);
68
+ List<MarketoField> marketoFields = MarketoUtils.OBJECT_MAPPER.readValue(this.getClass().getResourceAsStream("/fixtures/lead_describe_marketo_fields_full.json"), marketoFieldsType);
69
+ Mockito.when(marketoService.describeLead()).thenReturn(marketoFields);
70
+ }
71
+
72
+ @Test
73
+ public void buildServiceResponseMapper() throws Exception
74
+ {
75
+ leadServiceResponseMapperBuilder = new LeadServiceResponseMapperBuilder<>(pluginTask, marketoService);
76
+ ServiceResponseMapper<? extends ValueLocator> serviceResponseMapper = leadServiceResponseMapperBuilder.buildServiceResponseMapper(pluginTask);
77
+ Assert.assertFalse(pluginTask.getExtractedFields().isEmpty());
78
+ Assert.assertEquals(16, pluginTask.getExtractedFields().size());
79
+ Schema embulkSchema = serviceResponseMapper.getEmbulkSchema();
80
+ Assert.assertEquals(16, embulkSchema.getColumns().size());
81
+ Assert.assertEquals("mk_billingStreet", embulkSchema.getColumns().get(2).getName());
82
+ Assert.assertEquals("mk_company", embulkSchema.getColumn(0).getName());
83
+ Assert.assertEquals("mk_billingStreet", embulkSchema.getColumn(2).getName());
84
+ Assert.assertEquals("mk_id", embulkSchema.getColumn(15).getName());
85
+ }
86
+
87
+ @Test
88
+ public void getLeadColumnsIncludedEmpty() throws IOException
89
+ {
90
+ configSource = configSource.set("included_fields", MarketoUtils.OBJECT_MAPPER.readTree("[]"));
91
+ pluginTask = configSource.loadConfig(LeadServiceResponseMapperBuilder.PluginTask.class);
92
+ leadServiceResponseMapperBuilder = new LeadServiceResponseMapperBuilder<>(pluginTask, marketoService);
93
+ List<MarketoField> leadColumns = leadServiceResponseMapperBuilder.getLeadColumns();
94
+ Assert.assertEquals(129, leadColumns.size());
95
+ }
96
+
97
+ @Test
98
+ public void getLeadColumnsIncluded1() throws IOException
99
+ {
100
+ configSource = configSource.set("included_fields", MarketoUtils.OBJECT_MAPPER.readTree("[\"company\",\"incorrect_value\"]"));
101
+ pluginTask = configSource.loadConfig(LeadServiceResponseMapperBuilder.PluginTask.class);
102
+ leadServiceResponseMapperBuilder = new LeadServiceResponseMapperBuilder<>(pluginTask, marketoService);
103
+ List<MarketoField> leadColumns = leadServiceResponseMapperBuilder.getLeadColumns();
104
+ Assert.assertEquals(1, leadColumns.size());
105
+ Assert.assertEquals("company", leadColumns.get(0).getName());
106
+ }
107
+
108
+ @Test
109
+ public void getLeadColumnsIncluded2() throws IOException
110
+ {
111
+ configSource = configSource.set("included_fields", MarketoUtils.OBJECT_MAPPER.readTree("[\"company\",\"incorrect_value\"]"));
112
+ pluginTask = configSource.loadConfig(LeadServiceResponseMapperBuilder.PluginTask.class);
113
+ marketoService = Mockito.mock(MarketoService.class);
114
+ leadServiceResponseMapperBuilder = new LeadServiceResponseMapperBuilder<>(pluginTask, marketoService);
115
+ Mockito.when(marketoService.describeLead()).thenReturn(new ArrayList<MarketoField>());
116
+ List<MarketoField> leadColumns = leadServiceResponseMapperBuilder.getLeadColumns();
117
+ Assert.assertTrue(leadColumns.isEmpty());
118
+ }
119
+ }
@@ -72,7 +72,7 @@ public class MarketoRestClientTest
72
72
  configSource.set("max_return", 2);
73
73
  MarketoRestClient.PluginTask task = configSource.loadConfig(MarketoRestClient.PluginTask.class);
74
74
  mockRetryHelper = Mockito.mock(Jetty92RetryHelper.class);
75
- MarketoRestClient realRestClient = new MarketoRestClient(task, mockRetryHelper);
75
+ MarketoRestClient realRestClient = new MarketoRestClient(task);
76
76
  marketoRestClient = Mockito.spy(realRestClient);
77
77
  }
78
78
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embulk-input-marketo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.9
4
+ version: 0.6.10.alpha
5
5
  platform: ruby
6
6
  authors:
7
7
  - uu59
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2018-04-16 00:00:00.000000000 Z
13
+ date: 2018-05-28 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  requirement: !ruby/object:Gem::Requirement
@@ -73,6 +73,7 @@ files:
73
73
  - src/main/java/org/embulk/input/marketo/delegate/ActivityBulkExtractInputPlugin.java
74
74
  - src/main/java/org/embulk/input/marketo/delegate/CampaignInputPlugin.java
75
75
  - src/main/java/org/embulk/input/marketo/delegate/LeadBulkExtractInputPlugin.java
76
+ - src/main/java/org/embulk/input/marketo/delegate/LeadServiceResponseMapperBuilder.java
76
77
  - src/main/java/org/embulk/input/marketo/delegate/LeadWithListInputPlugin.java
77
78
  - src/main/java/org/embulk/input/marketo/delegate/LeadWithProgramInputPlugin.java
78
79
  - src/main/java/org/embulk/input/marketo/delegate/MarketoBaseBulkExtractInputPlugin.java
@@ -97,6 +98,7 @@ files:
97
98
  - src/test/java/org/embulk/input/marketo/delegate/ActivityBulkExtractInputPluginTest.java
98
99
  - src/test/java/org/embulk/input/marketo/delegate/CampaignInputPluginTest.java
99
100
  - src/test/java/org/embulk/input/marketo/delegate/LeadBulkExtractInputPluginTest.java
101
+ - src/test/java/org/embulk/input/marketo/delegate/LeadServiceResponseMapperBuilderTest.java
100
102
  - src/test/java/org/embulk/input/marketo/delegate/LeadWithListInputPluginTest.java
101
103
  - src/test/java/org/embulk/input/marketo/delegate/LeadWithProgramInputPluginTest.java
102
104
  - src/test/java/org/embulk/input/marketo/delegate/MarketoBaseBulkExtractInputPluginTest.java
@@ -124,9 +126,9 @@ files:
124
126
  - src/test/resources/fixtures/program_response.json
125
127
  - classpath/jetty-http-9.2.14.v20151106.jar
126
128
  - classpath/embulk-base-restclient-0.5.3.jar
129
+ - classpath/embulk-input-marketo-0.6.10.alpha.jar
127
130
  - classpath/jetty-client-9.2.14.v20151106.jar
128
131
  - classpath/jetty-util-9.2.14.v20151106.jar
129
- - classpath/embulk-input-marketo-0.6.9.jar
130
132
  - classpath/embulk-util-retryhelper-jetty92-0.5.3.jar
131
133
  - classpath/jetty-io-9.2.14.v20151106.jar
132
134
  homepage: https://github.com/treasure-data/embulk-input-marketo
@@ -144,9 +146,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
144
146
  version: '0'
145
147
  required_rubygems_version: !ruby/object:Gem::Requirement
146
148
  requirements:
147
- - - '>='
149
+ - - '>'
148
150
  - !ruby/object:Gem::Version
149
- version: '0'
151
+ version: 1.3.1
150
152
  requirements: []
151
153
  rubyforge_project:
152
154
  rubygems_version: 2.1.9