I’m testing API , using rest assured , programming language is JAVA, so my issue is , I’m trying to get generated ID from the response body , using this ID, trying to delete created product, but I’m having issues to save generated ID , for more information I have the following Scenario
@Validation Scenario: verifying the validation of productWorkingDates Given productWorkingDates is created with the following fields | productId | fromDate | toDate | name | strictHours | maxUsedTicketsQuantity | errorCode | | ZOw7WVOx | 2021-09-02 | 2022-11-02 | Validation | true | 0 | 0 | And timeSlots is created with the following fields | dayOfWeek | startTime | endTime | duration | quantity | usedQuantity | active | | Monday | 14:00:00 | 15:00:00 | 02:00:00 | 0 | 0 | true | | Tuesday | 14:00:00 | 15:00:00 | 02:00:00 | 0 | 0 | true | Then verify status code is 200 When productWorkingDates is created with the following fields | productId | fromDate | toDate | name | strictHours | maxUsedTicketsQuantity | errorCode | | ZOw7WVOx | 2021-09-02 | 2022-11-02 | Validation | true | 0 | 0 | And timeSlots is created with the following fields | dayOfWeek | startTime | endTime | duration | quantity | usedQuantity | active | | Monday | 14:00:00 | 15:00:00 | 02:00:00 | 0 | 0 | true | | Tuesday | 14:00:00 | 15:00:00 | 02:00:00 | 0 | 0 | true | And verify that error is "Calendar already exist for this date" @Validation Scenario: delete created productWorkingDates And delete productWorkingDate Then verify status code is 200
I have the following Step Definition
@Given("^productWorkingDates is created with the following fields$") public void productWorkingDatesIsCreatedWithTheFollowingFields(List<Map<String, String>> productWorkingDates) { productWorkingDate.setProductId(productWorkingDates.get(0).get("productId")); productWorkingDate.setFromDate(productWorkingDates.get(0).get("fromDate")); productWorkingDate.setToDate(productWorkingDates.get(0).get("toDate")); productWorkingDate.setName(productWorkingDates.get(0).get("name")); productWorkingDate.setStrictHours(Boolean.parseBoolean(productWorkingDates.get(0).get("strictHours"))); productWorkingDate.setMaxUsedTicketsQuantity(Integer.parseInt(productWorkingDates.get(0).get("maxUsedTicketsQuantity"))); productWorkingDate.setErrorCode(Integer.parseInt(productWorkingDates.get(0).get("errorCode"))); root.setProductWorkingDate(productWorkingDate); } @And("^timeSlots is created with the following fields$") public void timeslotsIsCreatedWithTheFollowingFields(List<Map<String, String>> expectedTimeSlots) { List<TimeSlots> listTimeSlots = new ArrayList<>(); for (Map<String, String> expectedTimeSlot : expectedTimeSlots) { TimeSlots timeSlots = new TimeSlots(); timeSlots.setDayOfWeek(expectedTimeSlot.get("dayOfWeek")); timeSlots.setStartTime(expectedTimeSlot.get("startTime")); timeSlots.setEndTime((expectedTimeSlot.get("endTime"))); timeSlots.setDuration(expectedTimeSlot.get("duration")); timeSlots.setQuantity(Integer.parseInt(expectedTimeSlot.get("quantity"))); timeSlots.setUsedQuantity(Integer.parseInt(expectedTimeSlot.get("usedQuantity"))); timeSlots.setActive(Boolean.parseBoolean(expectedTimeSlot.get("active"))); listTimeSlots.add(timeSlots); } productWorkingDate.setTimeSlots(listTimeSlots); root.setProductWorkingDate(productWorkingDate); String newProd = ObjectConverter.convertObjectToJson(root); commonData.response = NewProductEndPoints.createProductWorkingDates(newProd, cookies); id = commonData.response.jsonPath().get("productWorkingDate.id"); } @And("^delete productWorkingDate$") public void deleteProductWorkingDate() { commonData.response = NewProductEndPoints.deleteProductWorkingDates(id); }
I have following ouput
{ "productWorkingDate": { "id": "xl4W4jaj", "productId": "ZOw7WVOx", "fromDate": "2021-09-02", "toDate": "2022-11-02", "name": "Validation", "strictHours": true, "timeSlots": [ { "id": "7OxWz2l6", "productWorkingDateId": "xl4W4jaj", "dayOfWeek": "Monday", "startTime": "14:00:00", "endTime": "15:00:00", "duration": "02:00:00", "quantity": 0, "usedQuantity": 0, "active": true, "deletedAt": null }, { "id": "dl2rYVlX", "productWorkingDateId": "xl4W4jaj", "dayOfWeek": "Tuesday", "startTime": "14:00:00", "endTime": "15:00:00", "duration": "02:00:00", "quantity": 0, "usedQuantity": 0, "active": true, "deletedAt": null } ], "deletedAt": null, "maxUsedTicketsQuantity": 0, "errorCode": 0 }, "maxUsedTicketsQuantity": 0, "error": null, "errorCode": 0 } { "productWorkingDate": null, "maxUsedTicketsQuantity": 0, "error": "Calendar already exist for this date", "errorCode": 0 } { "productWorkingDate": null, "maxUsedTicketsQuantity": 0, "error": "Calendar already exist for this date", "errorCode": 0 } { "type": "https://httpstatuses.com/400", "title": "Bad Request", "status": 400, "detail": "ProductWorkingDate with Id: 0 not exist", "traceId": "00-b8488f6a33bf384999f0ea4ebae376c1-ac88b69265568942-00" } { "type": "https://httpstatuses.com/400", "title": "Bad Request", "status": 400, "detail": "ProductWorkingDate with Id: 0 not exist", "traceId": "00-b8488f6a33bf384999f0ea4ebae376c1-ac88b69265568942-00" } org.junit.ComparisonFailure: Expected :200 Actual :400
so the problem is , I’m creating private static id;
in a class level , and getting this id’s value from the reponse body using
id = commonData.response.jsonPath().get("productWorkingDate.id");
as u can see in the scenario i’m creating two same products for validation, first product is being created successfully , second product is not created, because they have the same dates, and it’s working as expected , but i need to delete first created product, and get the Id of this first product , but JAVA is getting Id from the second product , which is not created, so the question is how do i save the Id from first product which is successfully created , and using this Id delete the product. I hope I have described the issue good enough , if not pls comment bellow , thanks in advance
Advertisement
Answer
One simple solution on the top of my head is that instead of using private static String id
, you can use private static List<String> ids = new ArraysList<>();
You will save each id
to list of ids
@And("^timeSlots is created with the following fields$") public void timeslotsIsCreatedWithTheFollowingFields(List<Map<String, String>> expectedTimeSlots) { ... id = commonData.response.jsonPath().get("productWorkingDate.id"); ids.add(id); }
Then in the method that using it, you will get the id
from ids
@And("^delete productWorkingDate$") public void deleteProductWorkingDate() { commonData.response = NewProductEndPoints.deleteProductWorkingDates(ids.get(0)); }