Skip to content

Commit a9a595b

Browse files
authored
Merge pull request #126 from cloudsufi/bugfix/PLUGIN-1927
PLUGIN-1927: Map fields ending with `_stc` to string type
2 parents 09ad478 + a535053 commit a9a595b

File tree

3 files changed

+52
-3
lines changed

3 files changed

+52
-3
lines changed

src/main/java/io/cdap/plugin/servicenow/apiclient/ServiceNowTableAPIClientImpl.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@
6565
import java.util.concurrent.TimeUnit;
6666
import javax.annotation.Nullable;
6767

68+
import static io.cdap.plugin.servicenow.util.ServiceNowConstants.STC_FIELD_SUFFIX;
69+
6870
/**
6971
* Implementation class for ServiceNow Table API.
7072
*/
@@ -393,9 +395,14 @@ private Schema prepareSchemaWithMetadataAPI(RestAPIResponse restAPIResponse, Lis
393395
}
394396

395397
for (MetadataAPISchemaField field : metadataAPISchemaResponse.getResult().getColumns().values()) {
396-
if (valueType.equals(SourceValueType.SHOW_DISPLAY_VALUE) &&
397-
!Objects.equals(field.getType(), field.getInternalType())) {
398-
columns.add(new ServiceNowColumn(field.getName(), field.getType()));
398+
if (valueType.equals(SourceValueType.SHOW_DISPLAY_VALUE)) {
399+
if (!Objects.equals(field.getType(), field.getInternalType())) {
400+
columns.add(new ServiceNowColumn(field.getName(), field.getType()));
401+
} else if (field.getName().endsWith(STC_FIELD_SUFFIX) && field.getType().equals("integer")) {
402+
columns.add(new ServiceNowColumn(field.getName(), Schema.Type.STRING.name()));
403+
} else {
404+
columns.add(new ServiceNowColumn(field.getName(), field.getInternalType()));
405+
}
399406
} else if (valueType.equals(SourceValueType.SHOW_ACTUAL_VALUE) &&
400407
GLIDE_TIME_DATATYPE.equalsIgnoreCase(field.getInternalType())) {
401408
columns.add(new ServiceNowColumn(field.getName(), GLIDE_DATE_TIME_DATATYPE));

src/main/java/io/cdap/plugin/servicenow/util/ServiceNowConstants.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,4 +281,9 @@ public interface ServiceNowConstants {
281281
* Default Precision supported by ServiceNow Rest API
282282
*/
283283
int DEFAULT_PRECISION = 20;
284+
285+
/**
286+
* Suffix for ServiceNow fields that store elapsed time in seconds (e.g., calendar_stc, business_stc).
287+
*/
288+
String STC_FIELD_SUFFIX = "_stc";
284289
}

src/test/java/io/cdap/plugin/servicenow/apiclient/ServiceNowTableAPIClientImplTest.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,4 +187,41 @@ public void testFetchTableSchema_DisplayValueType() throws Exception {
187187
Assert.assertEquals(Schema.Type.STRING,
188188
schema.getField("user_name").getSchema().getUnionSchemas().get(0).getType());
189189
}
190+
191+
@Test
192+
public void testFetchTableSchema_StcFieldsWithDisplayValueType_ParseAsString() throws Exception {
193+
194+
ServiceNowConnectorConfig mockConfig = Mockito.mock(ServiceNowConnectorConfig.class);
195+
ServiceNowTableAPIClientImpl impl = new ServiceNowTableAPIClientImpl(mockConfig, true);
196+
ServiceNowTableAPIClientImpl implSpy = Mockito.spy(impl);
197+
String jsonResponse = "{\n" +
198+
" \"result\": {\n" +
199+
" \"columns\": {\n" +
200+
" \"calendar_stc\": {\n" +
201+
" \"label\": \"Resolve time\",\n" +
202+
" \"type\": \"integer\",\n" +
203+
" \"name\": \"calendar_stc\",\n" +
204+
" \"internal_type\": \"integer\"\n" +
205+
" },\n" +
206+
" \"business_stc\": {\n" +
207+
" \"label\": \"Business resolve time\",\n" +
208+
" \"type\": \"integer\",\n" +
209+
" \"name\": \"business_stc\",\n" +
210+
" \"internal_type\": \"integer\"\n" +
211+
" }\n" +
212+
" }\n" +
213+
" }\n" +
214+
"}";
215+
RestAPIResponse mockResponse = new RestAPIResponse(Collections.emptyMap(), jsonResponse, null);
216+
Mockito.doReturn(mockResponse).when(implSpy).executeGetWithRetries(Mockito.any());
217+
Schema schema = implSpy.fetchTableSchema("incident", "dummy-access-token",
218+
SourceValueType.SHOW_DISPLAY_VALUE, SchemaType.METADATA_API_BASED);
219+
Assert.assertNotNull(schema);
220+
Assert.assertEquals("record", schema.getDisplayName());
221+
Assert.assertEquals(2, schema.getFields().size());
222+
Assert.assertEquals(Schema.Type.STRING,
223+
schema.getField("business_stc").getSchema().getUnionSchemas().get(0).getType());
224+
Assert.assertEquals(Schema.Type.STRING,
225+
schema.getField("calendar_stc").getSchema().getUnionSchemas().get(0).getType());
226+
}
190227
}

0 commit comments

Comments
 (0)