Comment mapper un ensemble de résultats vers un objet Java (POJO) puis le comparer avec la réponse réelle, c'est-à-dire déjà convertie en objet Java (POJO)
Le principal problème auquel je suis confronté est que le type de colonne SQL est différent du POJO. Par exemple : les informations marketing avec la réponse ci-dessous créeront un POJO séparé, mais dans la base de données, elles sont mappées en tant que chaîne.
Existe-t-il un moyen de créer une fonction générique pour valider l'ensemble de résultats de la base de données par rapport à la réponse réelle pour chaque point de terminaison ?
Réponse de l'API ci-dessous :
{
"uuid": "00a26ea4-6be3-47dd-8ee6-2f52a71d98b6",
"email": "pulkit.agrawal+4353746031@gmail.com",
"firstName": "Pulkit",
"lastName": "Agrawal",
"businessName": "MMIS Test 1709386721967",
"phoneNumber": "4029559455",
"marketingInfo": {
"utm_campaign": "Commerce_WhereToBuy"
},
"resellerUuid": "47HMNNZ9BPF8E",
"order": {
"uuid": "366ae541-899b-420a-9112-0897406bf7ae",
"hasSubscriptions": false,
"planId": "4NKNCTE5RGV5P",
"planName": "Counter Service Restaurant",
"keyedInRate": {
"percentage": 3.5,
"fixedAmount": {
"value": 0.20,
"currencyCode": "USD"
}
},
"inPersonRate": {
"percentage": 2.3,
"fixedAmount": {
"value": 0.10,
"currencyCode": "USD"
}
},
"shippingAddress": {
"lineOne": "131 Varick St",
"lineTwo": "11",
"city": "New York",
"state": "NY",
"zipCode": "10014"
},
"items": [
{
"uuid": "64e2172d-bd99-4dcc-8f04-b39d24f64614",
"fdmpId": "777-1000108721",
"displayName": "Flex",
"purchaseType": "P",
"quantity": 1,
"price": {
"value": 599.00,
"currencyCode": "USD"
},
"digitalCatalogId": "FLEX_GEN_3"
},
{
"uuid": "ff873f43-09d6-4fd6-9613-78703e1b1b19",
"fdmpId": "93183",
"displayName": "Station Solo",
"purchaseType": "P",
"quantity": 1,
"price": {
"value": 1699.00,
"currencyCode": "USD"
},
"digitalCatalogId": "STATION_SOLO_CASH_DRAWER"
}
]
},
"salesforceId": "00Q8J000001uPewUAE",
"salesforceOwnerId": "00G7j000001EdZdEAK",
"chainAgentId": "526975216882",
"clAnalyticsId": "d356c4dec6af56976d667364b3f41b6e779dde2aaf027edf9cfe74cf288505f0",
"modifiedTime": "2024-03-02T13:38:43.908+00:00"
}
Code que j'essaie :
public class SubmitApp extends BaseTest {
@Test
public void shouldBeAbleToCreateLead() throws SQLException, ClassNotFoundException, NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException {
Lead requestCreateLead = leadBuilder();
Response response = LeadAPI.put(requestCreateLead);
assertThat(response.statusCode(), equalTo(StatusCode.CODE_200.getCode()));
LeadResponse actualResponseLead = response.as(LeadResponse.class);
ResultSet rs = dbConnection();
List responseList = convertSQLResultSetToObject(rs, LeadResponse.class);
}
public static <T> List<T> convertSQLResultSetToObject(ResultSet resultSet, Class<T> clazz) throws SQLException, NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException {
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
}
List<T> list = new ArrayList<>();
while (resultSet.next()) {
T dto = clazz.getConstructor().newInstance();
for (Field field : fields) {
String name = field.getName();
try {
String value = resultSet.getString(name);
field.set(dto, field.getType().getConstructor(String.class).newInstance(value));
} catch (Exception e) {
e.printStackTrace();
}
}
list.add(dto);
}
return list;
}
@Step
public Lead leadBuilder() {
Lead lead = new Lead();
return lead;
}
Erreur rencontrée dans la dernière ligne :
java.lang.NoSuchMethodException: com.spotify.oauth2.pojo.LeadResponse.MarketingInfo.(java.lang.String)
N.B : Lien Github pour le code : Dépôt GitHub Rest Assured