Skip to content

Commit d05d69d

Browse files
committed
feat(converter): add converter for all tests cucumber
1 parent 4280e60 commit d05d69d

3 files changed

Lines changed: 71 additions & 19 deletions

File tree

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package feature;
2+
3+
import com.xpeho.spring_boot_java_random_user.domain.entities.UserRequest;
4+
import io.cucumber.java.DataTableType;
5+
6+
import java.util.List;
7+
import java.util.Map;
8+
9+
/**
10+
* Cucumber converters — transforment automatiquement les données
11+
* des fichiers .feature en objets Java typés.
12+
*/
13+
public class CucumberTypeConfig {
14+
15+
/**
16+
* Représente une ligne de vérification field/expected dans une DataTable.
17+
*/
18+
public record FieldAssertion(String field, String expected) {}
19+
20+
/**
21+
* Convertit chaque ligne de la DataTable (2 colonnes sans en-tête)
22+
* en un objet FieldAssertion.
23+
*/
24+
@DataTableType
25+
public FieldAssertion fieldAssertion(List<String> row) {
26+
if (row.size() < 2) {
27+
throw new IllegalArgumentException(
28+
"DataTable row must have at least 2 columns (field | expected), got %d: %s"
29+
.formatted(row.size(), row)
30+
);
31+
}
32+
return new FieldAssertion(row.get(0).trim(), row.get(1).trim());
33+
}
34+
35+
/**
36+
* Convertit une ligne de DataTable (Map<String,String>) en UserRequest.
37+
* Utilisable dans les .feature avec des tables à en-têtes.
38+
*/
39+
@DataTableType
40+
public UserRequest userRequest(Map<String, String> row) {
41+
return new UserRequest(
42+
row.get("gender"),
43+
row.get("firstname"),
44+
row.get("lastname"),
45+
row.get("civility"),
46+
row.get("email"),
47+
row.get("phone"),
48+
row.get("picture"),
49+
row.get("nat")
50+
);
51+
}
52+
53+
}

src/test/java/feature/StepDefinition.java

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import com.fasterxml.jackson.databind.JsonNode;
44
import com.fasterxml.jackson.databind.ObjectMapper;
55
import com.xpeho.spring_boot_java_random_user.domain.entities.UserRequest;
6-
import io.cucumber.datatable.DataTable;
6+
import feature.CucumberTypeConfig.FieldAssertion;
77
import io.cucumber.java.en.And;
88
import io.cucumber.java.en.Given;
99
import io.cucumber.java.en.Then;
@@ -46,26 +46,25 @@ public void theResponseStatusShouldBe(int expectedStatus) {
4646
}
4747

4848
@And("the user profile")
49-
public void theUserProfile(DataTable table) throws Exception{
49+
public void theUserProfile(List<FieldAssertion> assertions) throws Exception {
5050
JsonNode body = objectMapper.readTree(latestResponse.getBody());
51-
List<List<String>> rows = table.asLists(String.class);
52-
for (List<String> row : rows) {
53-
String field = row.get(0).trim();
54-
String expected = row.get(1).trim();
55-
JsonNode valueNode = body.get(field);
56-
assertNotNull(valueNode);
5751

58-
if ("<generated_id>".equals(expected)) {
59-
createdUserId = valueNode.asLong();
60-
assertTrue(createdUserId > 0);
61-
continue;
62-
}
63-
if ("<created_id>".equals(expected)) {
64-
assertNotNull(createdUserId);
65-
assertEquals(createdUserId.toString(), valueNode.asText());
66-
continue;
52+
for (FieldAssertion assertion : assertions) {
53+
JsonNode valueNode = body.get(assertion.field());
54+
assertNotNull(valueNode, "Field '%s' not found in response".formatted(assertion.field()));
55+
56+
switch (assertion.expected()) {
57+
case "<generated_id>" -> {
58+
createdUserId = valueNode.asLong();
59+
assertTrue(createdUserId > 0);
60+
}
61+
case "<created_id>" -> {
62+
assertNotNull(createdUserId);
63+
assertEquals(createdUserId.toString(), valueNode.asText());
64+
}
65+
default -> assertEquals(assertion.expected(), valueNode.asText(),
66+
"Mismatch on field '%s'".formatted(assertion.field()));
6767
}
68-
assertEquals(expected, valueNode.asText());
6968
}
7069
}
7170

src/test/resources/features/get_user.feature

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,5 @@ Feature: Get user endpoint
1313
| firstname | Emma |
1414

1515
Scenario: Get a user that does not exist
16-
When the client call to GET /random-users/999
16+
When the client call to GET /random-users/999999
1717
Then the response status should be 404

0 commit comments

Comments
 (0)