The error that I am getting is
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at the 5th line. Because response only has an empty array. The array gets populated in the debug mode perfectly. Debugging is not easy. Not sure if it matters. Thanks for your time.
Please find the Java test and properties files below.
@Test
public void testApplication() throws Exception {
String ResourceUrl = "/mdh/v";
String values = "205,2019-12-31";
ResponseEntity<String> response = testRestTemplate.getForEntity(ResourceUrl, String.class);
@SuppressWarnings("unchecked")
List<Map<String, String>> list = objectMapper.readValue(response.getBody(), List.class);
Iterator<Map.Entry<String, String>> it = list.get(0).entrySet().iterator();
String expected_values[] = values.split(",", -1);
int i = 0;
while (it.hasNext()) {
Map.Entry<String, String> entry = it.next();
if (expected_values[i].isEmpty())
assertEquals(String.valueOf("null"), String.valueOf(entry.getValue()));
else if (isValidInteger(expected_values[i].trim(), 10)) {
assertEquals(Integer.valueOf(expected_values[i]), Integer.valueOf(String.valueOf(entry.getValue())));
} else if (isValidDouble(expected_values[i].trim())) {
assertEquals(Double.valueOf(expected_values[i]), Double.valueOf(String.valueOf(entry.getValue())));
} else if (isValidDate(expected_values[i].trim())
&& (expected_values[i].contentEquals(String.valueOf(entry.getValue())) == false)) {
Long ts = Long.valueOf(String.valueOf(entry.getValue()));
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String dt = formatter.format(ts);
assertEquals(expected_values[i], dt);
} else {
assertEquals(expected_values[i], String.valueOf(entry.getValue()));
}
i++;
}
assertThat(response.getStatusCode(), equalTo(HttpStatus.OK));
HttpHeaders httpHeaders = testRestTemplate.headForHeaders(ResourceUrl);
assertTrue(httpHeaders.getContentType().includes(MediaType.APPLICATION_JSON));
}
```
application-test.properties:
spring.datasource.url=jdbc:h2:mem:testdb;MODE=MYSQL;
spring.datasource.username=sa
spring.datasource.password=password
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.platform=h2
m.t.tableName=MOCK_TF_m_t_RESULT
spring.datasource.hikari.connection-timeout=600000
spring.datasource.hikari.minimum-idle=80
spring.datasource.hikari.maximum-pool-size=80
spring.datasource.hikari.idle-timeout=60000
spring.datasource.hikari.max-lifetime=6000
spring.datasource.hikari.auto-commit=true
spring.datasource.hikari.maxLifetime=6000000
#m.t.marketData.where[1] = WHERE upper(${m.t.aClass.column}) = upper('%1$s') AND upper(${m.t.service.column}) = upper('%2$s') AND ${m.t.vDate.column} = DATE '%3$s'
#m.t.marketData.where[2] = WHERE upper(${m.t.aClass.column}) = upper('%1$s') AND upper(${m.t.service.column}) = upper('%2$s') AND ${m.t.vDate.column} = DATE '%3$s' AND upper(${m.t.vDate.subArea.column}) = upper('%4$s') AND upper(${m.t.vDate.serviceFrequency.column}) = upper('%5$s')
#m.t.marketData.sql[0]= SELECT ${m-t-result.columnList.cdities} FROM ${m.t.tableName} WHERE upper(${m.t.aClass.column}) = upper('%1$s') AND upper(${m.t.service.column}) = upper('%2$s') AND ${m.t.vDate.column} = '%3$s';
#m.t.marketData.sql[0]= SELECT ${m-t-result.columnList.cdities} FROM MOCK_TF_m_t_RESULT WHERE upper(${m.t.aClass.column}) = upper('%1$s') AND upper(${m.t.service.column}) = upper('%2$s') AND ${m.t.vDate.column} = PARSEDATETIME('%3$s','dd-MMMM-yy');
m.t.marketData.vDate.Condn = ${m.t.vDate.column} = PARSEDATETIME('%3$s','dd-MMMM-yy')
m-t-result.columnList.interestRates=ClientID,vDate,aClass,ServiceName,ServiceFrequency,SubArea
#spring.jpa.hibernate.ddl-auto=none
#disable spring.jpa.hibernate.ddl-auto if you use schema.sql.
#spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
```