From f4d2b7756cff3c175c599119fdb1eb56bbaa886c Mon Sep 17 00:00:00 2001 From: Rafael Lima Date: Fri, 18 Dec 2020 13:47:59 +0000 Subject: [PATCH 01/16] Add pet domain --- .../api/steps/PetStepDefinitions.java | 17 +++++++++ .../automation/api/support/domain/Pet.java | 35 +++++++++++++++++++ app/src/test/resources/features/pet.feature | 6 ++++ 3 files changed, 58 insertions(+) create mode 100644 app/src/test/java/bdd/automation/api/steps/PetStepDefinitions.java create mode 100644 app/src/test/java/bdd/automation/api/support/domain/Pet.java create mode 100644 app/src/test/resources/features/pet.feature diff --git a/app/src/test/java/bdd/automation/api/steps/PetStepDefinitions.java b/app/src/test/java/bdd/automation/api/steps/PetStepDefinitions.java new file mode 100644 index 0000000..9a4b87b --- /dev/null +++ b/app/src/test/java/bdd/automation/api/steps/PetStepDefinitions.java @@ -0,0 +1,17 @@ +package bdd.automation.api.steps; + +import bdd.automation.api.support.domain.Pet; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.cucumber.java.en.Given; +import io.cucumber.java.en.Then; + +public class PetStepDefinitions { + @Given("that I have pets available") + public void thatIHavePetsAvailable() throws JsonProcessingException { + Pet pet = Pet.builder().build(); + ObjectMapper objectMapper = new ObjectMapper(); + String json = objectMapper.writeValueAsString(pet); + System.out.println(json); + } +} diff --git a/app/src/test/java/bdd/automation/api/support/domain/Pet.java b/app/src/test/java/bdd/automation/api/support/domain/Pet.java new file mode 100644 index 0000000..4fa7c0e --- /dev/null +++ b/app/src/test/java/bdd/automation/api/support/domain/Pet.java @@ -0,0 +1,35 @@ +package bdd.automation.api.support.domain; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Arrays; +import java.util.List; + +@Data +@Builder +public class Pet { + @Builder.Default + private int id = 2; + @Builder.Default + private String name = "Chitara"; + @Builder.Default + private Category category = new Category(); + @Builder.Default + private String status = "available"; + @Builder.Default + private List photoUrls = Arrays.asList("url1", "url2"); + + @Data + @Builder + @AllArgsConstructor + @NoArgsConstructor + public static class Category { + @Builder.Default + private int id = 2; + @Builder.Default + private String name = "Cats"; + } +} diff --git a/app/src/test/resources/features/pet.feature b/app/src/test/resources/features/pet.feature new file mode 100644 index 0000000..e69016f --- /dev/null +++ b/app/src/test/resources/features/pet.feature @@ -0,0 +1,6 @@ +Feature: Manage a pet in the PetSore + + Scenario: List only available pets for sale + Given that I have pets available + When I search for all pets available + Then I receive a list of pets available \ No newline at end of file From a604efc37097167fb832b01fd07510cb9543018e Mon Sep 17 00:00:00 2001 From: Rafael Lima Date: Sat, 19 Dec 2020 22:46:56 +0000 Subject: [PATCH 02/16] Adding the Pet domain class --- .../java/bdd/automation/api/steps/PetStepDefinitions.java | 1 - .../java/bdd/automation/api/steps/UserStepDefinitions.java | 2 +- .../test/java/bdd/automation/api/support/api/UserApi.java | 5 ++++- app/src/test/java/bdd/automation/api/support/domain/Pet.java | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/app/src/test/java/bdd/automation/api/steps/PetStepDefinitions.java b/app/src/test/java/bdd/automation/api/steps/PetStepDefinitions.java index 9a4b87b..877d696 100644 --- a/app/src/test/java/bdd/automation/api/steps/PetStepDefinitions.java +++ b/app/src/test/java/bdd/automation/api/steps/PetStepDefinitions.java @@ -4,7 +4,6 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import io.cucumber.java.en.Given; -import io.cucumber.java.en.Then; public class PetStepDefinitions { @Given("that I have pets available") diff --git a/app/src/test/java/bdd/automation/api/steps/UserStepDefinitions.java b/app/src/test/java/bdd/automation/api/steps/UserStepDefinitions.java index 8e9680c..c96ea2f 100644 --- a/app/src/test/java/bdd/automation/api/steps/UserStepDefinitions.java +++ b/app/src/test/java/bdd/automation/api/steps/UserStepDefinitions.java @@ -15,7 +15,7 @@ public class UserStepDefinitions { private User expectedUser; - private final UserApi userApi; + private UserApi userApi; public UserStepDefinitions() { userApi = new UserApi(); diff --git a/app/src/test/java/bdd/automation/api/support/api/UserApi.java b/app/src/test/java/bdd/automation/api/support/api/UserApi.java index ba73789..63354e2 100644 --- a/app/src/test/java/bdd/automation/api/support/api/UserApi.java +++ b/app/src/test/java/bdd/automation/api/support/api/UserApi.java @@ -1,6 +1,7 @@ package bdd.automation.api.support.api; import bdd.automation.api.support.domain.User; +import lombok.Data; import org.apache.http.HttpStatus; import java.util.Arrays; @@ -8,12 +9,14 @@ import static io.restassured.RestAssured.given; - +@Data public class UserApi { private static final String CREATE_USER_ENDPOINT = "/v3/user"; private static final String USER_ENDPOINT = "/v3/user/{name}"; + private String name; + public void createUser(User user) { given(). body(user). diff --git a/app/src/test/java/bdd/automation/api/support/domain/Pet.java b/app/src/test/java/bdd/automation/api/support/domain/Pet.java index 4fa7c0e..a3b2c55 100644 --- a/app/src/test/java/bdd/automation/api/support/domain/Pet.java +++ b/app/src/test/java/bdd/automation/api/support/domain/Pet.java @@ -14,7 +14,7 @@ public class Pet { @Builder.Default private int id = 2; @Builder.Default - private String name = "Chitara"; + private String name = "Panthro"; @Builder.Default private Category category = new Category(); @Builder.Default From 16cac774ee17885d33909665c7b6e36ff45a33bf Mon Sep 17 00:00:00 2001 From: Rafael Lima Date: Sun, 20 Dec 2020 14:20:23 +0000 Subject: [PATCH 03/16] Add PetApi class --- .../api/steps/PetStepDefinitions.java | 35 +++++++++++++++---- .../automation/api/support/api/PetApi.java | 22 ++++++++++++ .../automation/api/support/domain/Pet.java | 4 +++ 3 files changed, 54 insertions(+), 7 deletions(-) create mode 100644 app/src/test/java/bdd/automation/api/support/api/PetApi.java diff --git a/app/src/test/java/bdd/automation/api/steps/PetStepDefinitions.java b/app/src/test/java/bdd/automation/api/steps/PetStepDefinitions.java index 877d696..e075d68 100644 --- a/app/src/test/java/bdd/automation/api/steps/PetStepDefinitions.java +++ b/app/src/test/java/bdd/automation/api/steps/PetStepDefinitions.java @@ -1,16 +1,37 @@ package bdd.automation.api.steps; +import bdd.automation.api.support.api.PetApi; import bdd.automation.api.support.domain.Pet; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; import io.cucumber.java.en.Given; +import io.cucumber.java.en.Then; +import io.cucumber.java.en.When; + +import java.util.List; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.empty; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.not; public class PetStepDefinitions { + + private PetApi petApi; + private List actualPets; + + public PetStepDefinitions() { + petApi = new PetApi(); + } + @Given("that I have pets available") - public void thatIHavePetsAvailable() throws JsonProcessingException { - Pet pet = Pet.builder().build(); - ObjectMapper objectMapper = new ObjectMapper(); - String json = objectMapper.writeValueAsString(pet); - System.out.println(json); + public void thatIHavePetsAvailable() {} + + @When("I search for all pets {word}") + public void iSearchForAllPetsAvailable(String status) { + actualPets = petApi.getPetsByStatus(status); + } + + @Then("I receive a list of pets available") + public void iReceiveAListOfPetsAvailable() { + assertThat(actualPets, is(not(empty()))); } } diff --git a/app/src/test/java/bdd/automation/api/support/api/PetApi.java b/app/src/test/java/bdd/automation/api/support/api/PetApi.java new file mode 100644 index 0000000..661637a --- /dev/null +++ b/app/src/test/java/bdd/automation/api/support/api/PetApi.java @@ -0,0 +1,22 @@ +package bdd.automation.api.support.api; + +import bdd.automation.api.support.domain.Pet; + +import java.util.List; + +import static io.restassured.RestAssured.*; + +public class PetApi { + + private static final String FIND_PETS_BY_STATUS_ENDPOINT = "v3/pet/findByStatus?status={status}"; + + public List getPetsByStatus(String status) { + return given(). + pathParam("status", status). + when(). + get(FIND_PETS_BY_STATUS_ENDPOINT). + then(). + extract().body().jsonPath().getList("", Pet.class); + } + +} diff --git a/app/src/test/java/bdd/automation/api/support/domain/Pet.java b/app/src/test/java/bdd/automation/api/support/domain/Pet.java index a3b2c55..29737b2 100644 --- a/app/src/test/java/bdd/automation/api/support/domain/Pet.java +++ b/app/src/test/java/bdd/automation/api/support/domain/Pet.java @@ -1,5 +1,6 @@ package bdd.automation.api.support.domain; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -10,6 +11,9 @@ @Data @Builder +@AllArgsConstructor +@NoArgsConstructor +@JsonIgnoreProperties(ignoreUnknown = true) public class Pet { @Builder.Default private int id = 2; From 71c43fad17c1511c6c46acbca922633693fc5ea7 Mon Sep 17 00:00:00 2001 From: Rafael Lima Date: Sat, 19 Dec 2020 22:46:56 +0000 Subject: [PATCH 04/16] Adding the Pet domain class --- .../java/bdd/automation/api/steps/PetStepDefinitions.java | 4 +++- .../java/bdd/automation/api/steps/UserStepDefinitions.java | 2 +- .../test/java/bdd/automation/api/support/api/UserApi.java | 5 ++++- .../test/java/bdd/automation/api/support/domain/Pet.java | 2 +- app/src/test/resources/features/animal.feature | 7 +++++++ 5 files changed, 16 insertions(+), 4 deletions(-) create mode 100644 app/src/test/resources/features/animal.feature diff --git a/app/src/test/java/bdd/automation/api/steps/PetStepDefinitions.java b/app/src/test/java/bdd/automation/api/steps/PetStepDefinitions.java index 9a4b87b..ab85330 100644 --- a/app/src/test/java/bdd/automation/api/steps/PetStepDefinitions.java +++ b/app/src/test/java/bdd/automation/api/steps/PetStepDefinitions.java @@ -4,9 +4,11 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import io.cucumber.java.en.Given; -import io.cucumber.java.en.Then; +import io.cucumber.java.pt.Dado; public class PetStepDefinitions { + + @Dado("que eu possua pets available") @Given("that I have pets available") public void thatIHavePetsAvailable() throws JsonProcessingException { Pet pet = Pet.builder().build(); diff --git a/app/src/test/java/bdd/automation/api/steps/UserStepDefinitions.java b/app/src/test/java/bdd/automation/api/steps/UserStepDefinitions.java index 8e9680c..c96ea2f 100644 --- a/app/src/test/java/bdd/automation/api/steps/UserStepDefinitions.java +++ b/app/src/test/java/bdd/automation/api/steps/UserStepDefinitions.java @@ -15,7 +15,7 @@ public class UserStepDefinitions { private User expectedUser; - private final UserApi userApi; + private UserApi userApi; public UserStepDefinitions() { userApi = new UserApi(); diff --git a/app/src/test/java/bdd/automation/api/support/api/UserApi.java b/app/src/test/java/bdd/automation/api/support/api/UserApi.java index ba73789..63354e2 100644 --- a/app/src/test/java/bdd/automation/api/support/api/UserApi.java +++ b/app/src/test/java/bdd/automation/api/support/api/UserApi.java @@ -1,6 +1,7 @@ package bdd.automation.api.support.api; import bdd.automation.api.support.domain.User; +import lombok.Data; import org.apache.http.HttpStatus; import java.util.Arrays; @@ -8,12 +9,14 @@ import static io.restassured.RestAssured.given; - +@Data public class UserApi { private static final String CREATE_USER_ENDPOINT = "/v3/user"; private static final String USER_ENDPOINT = "/v3/user/{name}"; + private String name; + public void createUser(User user) { given(). body(user). diff --git a/app/src/test/java/bdd/automation/api/support/domain/Pet.java b/app/src/test/java/bdd/automation/api/support/domain/Pet.java index 4fa7c0e..a3b2c55 100644 --- a/app/src/test/java/bdd/automation/api/support/domain/Pet.java +++ b/app/src/test/java/bdd/automation/api/support/domain/Pet.java @@ -14,7 +14,7 @@ public class Pet { @Builder.Default private int id = 2; @Builder.Default - private String name = "Chitara"; + private String name = "Panthro"; @Builder.Default private Category category = new Category(); @Builder.Default diff --git a/app/src/test/resources/features/animal.feature b/app/src/test/resources/features/animal.feature new file mode 100644 index 0000000..1995bf6 --- /dev/null +++ b/app/src/test/resources/features/animal.feature @@ -0,0 +1,7 @@ +# language: pt +Funcionalidade: Gerenciamento de um pet da PetSore + + Cenario: Lista somente pets disponíveis para a venda + Dado que eu possua pets available + Quando eu pesquiso por todos os pets available + Então eu recebo a lista de pets disponíveis \ No newline at end of file From cb05ed120c2444b4dbae2cf33c3cafdef4e33262 Mon Sep 17 00:00:00 2001 From: Rafael Lima Date: Sun, 20 Dec 2020 15:14:04 +0000 Subject: [PATCH 05/16] Add pt deserialization --- .../api/steps/PetStepDefinitions.java | 34 ++++++++++++++----- .../automation/api/support/api/PetApi.java | 23 +++++++++++++ .../automation/api/support/domain/Pet.java | 4 +++ .../test/resources/features/animal.feature | 10 +++--- 4 files changed, 58 insertions(+), 13 deletions(-) create mode 100644 app/src/test/java/bdd/automation/api/support/api/PetApi.java diff --git a/app/src/test/java/bdd/automation/api/steps/PetStepDefinitions.java b/app/src/test/java/bdd/automation/api/steps/PetStepDefinitions.java index ab85330..873e66e 100644 --- a/app/src/test/java/bdd/automation/api/steps/PetStepDefinitions.java +++ b/app/src/test/java/bdd/automation/api/steps/PetStepDefinitions.java @@ -1,19 +1,37 @@ package bdd.automation.api.steps; +import bdd.automation.api.support.api.PetApi; import bdd.automation.api.support.domain.Pet; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; import io.cucumber.java.en.Given; import io.cucumber.java.pt.Dado; +import io.cucumber.java.pt.Então; +import io.cucumber.java.pt.Quando; + +import java.util.List; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.*; public class PetStepDefinitions { - @Dado("que eu possua pets available") + private PetApi petApi; + private List actualPets; + + public PetStepDefinitions() { + petApi = new PetApi(); + } + + @Dado("que eu possua animais available") @Given("that I have pets available") - public void thatIHavePetsAvailable() throws JsonProcessingException { - Pet pet = Pet.builder().build(); - ObjectMapper objectMapper = new ObjectMapper(); - String json = objectMapper.writeValueAsString(pet); - System.out.println(json); + public void thatIHavePetsAvailable() {} + + @Quando("eu pesquiso por todos os animais {word}") + public void euPesquisoPorTodosOsAnimaisAvailable(String status) { + actualPets = petApi.getPetsByStatus(status); + } + + @Então("eu recebo a lista de animais available") + public void euReceboAListaDeAnimaisAvailable() { + assertThat(actualPets, is(not(empty()))); } } diff --git a/app/src/test/java/bdd/automation/api/support/api/PetApi.java b/app/src/test/java/bdd/automation/api/support/api/PetApi.java new file mode 100644 index 0000000..69a6e77 --- /dev/null +++ b/app/src/test/java/bdd/automation/api/support/api/PetApi.java @@ -0,0 +1,23 @@ +package bdd.automation.api.support.api; + +import bdd.automation.api.support.domain.Pet; + +import java.util.List; + +import static io.restassured.RestAssured.given; + +public class PetApi { + + private static final String FIND_PETS_BY_STATUS_ENDPOINT = "/v3/pet/findByStatus?status={status}"; + + public List getPetsByStatus(String status) { + return given(). + pathParam("status", status). + when(). + get(FIND_PETS_BY_STATUS_ENDPOINT). + then(). + extract().body().jsonPath().getList("", Pet.class); + } + + +} diff --git a/app/src/test/java/bdd/automation/api/support/domain/Pet.java b/app/src/test/java/bdd/automation/api/support/domain/Pet.java index a3b2c55..5624843 100644 --- a/app/src/test/java/bdd/automation/api/support/domain/Pet.java +++ b/app/src/test/java/bdd/automation/api/support/domain/Pet.java @@ -1,5 +1,6 @@ package bdd.automation.api.support.domain; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -10,6 +11,9 @@ @Data @Builder +@NoArgsConstructor +@AllArgsConstructor +@JsonIgnoreProperties(ignoreUnknown = true) public class Pet { @Builder.Default private int id = 2; diff --git a/app/src/test/resources/features/animal.feature b/app/src/test/resources/features/animal.feature index 1995bf6..987d808 100644 --- a/app/src/test/resources/features/animal.feature +++ b/app/src/test/resources/features/animal.feature @@ -1,7 +1,7 @@ # language: pt -Funcionalidade: Gerenciamento de um pet da PetSore +Funcionalidade: Gerenciamento de um animal da PetSore - Cenario: Lista somente pets disponíveis para a venda - Dado que eu possua pets available - Quando eu pesquiso por todos os pets available - Então eu recebo a lista de pets disponíveis \ No newline at end of file + Cenario: Lista somente animais disponíveis para a venda + Dado que eu possua animais available + Quando eu pesquiso por todos os animais available + Então eu recebo a lista de animais available \ No newline at end of file From ebc4a20e2c0db08ee2ac4aac60450efe2fa8af21 Mon Sep 17 00:00:00 2001 From: Rafael Lima Date: Sun, 20 Dec 2020 17:37:29 +0000 Subject: [PATCH 06/16] Adding example of rest assured old syntax --- .../automation/api/support/api/PetApi.java | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/app/src/test/java/bdd/automation/api/support/api/PetApi.java b/app/src/test/java/bdd/automation/api/support/api/PetApi.java index 661637a..5f2b0b0 100644 --- a/app/src/test/java/bdd/automation/api/support/api/PetApi.java +++ b/app/src/test/java/bdd/automation/api/support/api/PetApi.java @@ -1,6 +1,10 @@ package bdd.automation.api.support.api; import bdd.automation.api.support.domain.Pet; +import io.restassured.RestAssured; +import io.restassured.path.json.JsonPath; +import io.restassured.response.Response; +import io.restassured.specification.RequestSpecification; import java.util.List; @@ -10,13 +14,20 @@ public class PetApi { private static final String FIND_PETS_BY_STATUS_ENDPOINT = "v3/pet/findByStatus?status={status}"; +// public List getPetsByStatus(String status) { +// return given(). +// pathParam("status", status). +// when(). +// get(FIND_PETS_BY_STATUS_ENDPOINT). +// then(). +// extract().body().jsonPath().getList("", Pet.class); +// } + public List getPetsByStatus(String status) { - return given(). - pathParam("status", status). - when(). - get(FIND_PETS_BY_STATUS_ENDPOINT). - then(). - extract().body().jsonPath().getList("", Pet.class); + RequestSpecification httpRequest = RestAssured.given(); + httpRequest.pathParam("status", status); + Response response = httpRequest.get(FIND_PETS_BY_STATUS_ENDPOINT); + return response.body().jsonPath().getList("", Pet.class); } } From 453ae5a62bd415b27daad97efaba2dcc563c52d8 Mon Sep 17 00:00:00 2001 From: Rafael Lima Date: Sun, 20 Dec 2020 18:26:06 +0000 Subject: [PATCH 07/16] Using restassured assertions --- .../api/steps/PetStepDefinitions.java | 19 ++++++++++++++ .../automation/api/support/api/PetApi.java | 26 +++++++++---------- app/src/test/resources/features/pet.feature | 4 ++- 3 files changed, 35 insertions(+), 14 deletions(-) diff --git a/app/src/test/java/bdd/automation/api/steps/PetStepDefinitions.java b/app/src/test/java/bdd/automation/api/steps/PetStepDefinitions.java index e825501..850a80f 100644 --- a/app/src/test/java/bdd/automation/api/steps/PetStepDefinitions.java +++ b/app/src/test/java/bdd/automation/api/steps/PetStepDefinitions.java @@ -2,12 +2,15 @@ import bdd.automation.api.support.api.PetApi; import bdd.automation.api.support.domain.Pet; +import io.cucumber.java.en.And; import io.cucumber.java.en.Given; import io.cucumber.java.en.Then; import io.cucumber.java.en.When; import io.cucumber.java.pt.Dado; import io.cucumber.java.pt.Entao; import io.cucumber.java.pt.Quando; +import io.restassured.response.Response; +import org.apache.http.HttpStatus; import java.util.List; @@ -40,4 +43,20 @@ public void iSearchForAllPetsAvailable(String status) { public void iReceiveAListOfPetsAvailable() { assertThat(actualPets, is(not(empty()))); } + + @And("I receive another list of pets {word}") + public void iReceiveAnotherListOfPetsAvailable(String status) { + Response actualPetsAvailableResponse = petApi.getPetsResponseByStatus(status); + + actualPets = actualPetsAvailableResponse.body().jsonPath().getList("", Pet.class); + + actualPetsAvailableResponse. + then(). + statusCode(HttpStatus.SC_OK). + body( + "size()", is(actualPets.size()), + "findAll { it.status == 'available' }.size()", is(actualPets.size()) + ); + + } } diff --git a/app/src/test/java/bdd/automation/api/support/api/PetApi.java b/app/src/test/java/bdd/automation/api/support/api/PetApi.java index 5f2b0b0..1711665 100644 --- a/app/src/test/java/bdd/automation/api/support/api/PetApi.java +++ b/app/src/test/java/bdd/automation/api/support/api/PetApi.java @@ -14,20 +14,20 @@ public class PetApi { private static final String FIND_PETS_BY_STATUS_ENDPOINT = "v3/pet/findByStatus?status={status}"; -// public List getPetsByStatus(String status) { -// return given(). -// pathParam("status", status). -// when(). -// get(FIND_PETS_BY_STATUS_ENDPOINT). -// then(). -// extract().body().jsonPath().getList("", Pet.class); -// } - public List getPetsByStatus(String status) { - RequestSpecification httpRequest = RestAssured.given(); - httpRequest.pathParam("status", status); - Response response = httpRequest.get(FIND_PETS_BY_STATUS_ENDPOINT); - return response.body().jsonPath().getList("", Pet.class); + return given(). + pathParam("status", status). + when(). + get(FIND_PETS_BY_STATUS_ENDPOINT). + then(). + extract().body().jsonPath().getList("", Pet.class); + } + + public Response getPetsResponseByStatus(String status) { + return given(). + pathParam("status", status). + when(). + get(FIND_PETS_BY_STATUS_ENDPOINT); } } diff --git a/app/src/test/resources/features/pet.feature b/app/src/test/resources/features/pet.feature index e69016f..f0c5244 100644 --- a/app/src/test/resources/features/pet.feature +++ b/app/src/test/resources/features/pet.feature @@ -3,4 +3,6 @@ Feature: Manage a pet in the PetSore Scenario: List only available pets for sale Given that I have pets available When I search for all pets available - Then I receive a list of pets available \ No newline at end of file + Then I receive a list of pets available +# Unecessary step, done for the sake of learning + And I receive another list of pets available \ No newline at end of file From 32ecb6b2101e91920e88997a3014b3d1f243d3dc Mon Sep 17 00:00:00 2001 From: Rafael Lima Date: Sun, 20 Dec 2020 19:31:57 +0000 Subject: [PATCH 08/16] Setting up the scenario --- .../api/steps/PetStepDefinitions.java | 15 ++++++++++++-- .../automation/api/support/api/PetApi.java | 20 ++++++++++++++++--- .../test/resources/features/animal.feature | 12 ++++++++++- 3 files changed, 41 insertions(+), 6 deletions(-) diff --git a/app/src/test/java/bdd/automation/api/steps/PetStepDefinitions.java b/app/src/test/java/bdd/automation/api/steps/PetStepDefinitions.java index 850a80f..4540646 100644 --- a/app/src/test/java/bdd/automation/api/steps/PetStepDefinitions.java +++ b/app/src/test/java/bdd/automation/api/steps/PetStepDefinitions.java @@ -8,6 +8,7 @@ import io.cucumber.java.en.When; import io.cucumber.java.pt.Dado; import io.cucumber.java.pt.Entao; +import io.cucumber.java.pt.Então; import io.cucumber.java.pt.Quando; import io.restassured.response.Response; import org.apache.http.HttpStatus; @@ -29,8 +30,8 @@ public PetStepDefinitions() { } @Given("that I have pets available") - @Dado("que eu possua animais available") - public void thatIHavePetsAvailable() {} + @Dado("que eu possua animais {}") + public void thatIHavePetsAvailable(String status) {} @When("I search for all pets {word}") @Quando("eu pesquiso por todos os animais {word}") @@ -59,4 +60,14 @@ public void iReceiveAnotherListOfPetsAvailable(String status) { ); } + + @Então("eu recebo a lista com {int} animal/animais") + public void euReceboAListaComAnimais(int petsQuantity) { + assertThat(actualPets.size(), is(petsQuantity)); + } + + @Dado("que eu não possua animais {word}") + public void queEuNãoPossuaAnimaisSold(String status) { + petApi.deletePetsByStatus(status); + } } diff --git a/app/src/test/java/bdd/automation/api/support/api/PetApi.java b/app/src/test/java/bdd/automation/api/support/api/PetApi.java index 1711665..f83a3d2 100644 --- a/app/src/test/java/bdd/automation/api/support/api/PetApi.java +++ b/app/src/test/java/bdd/automation/api/support/api/PetApi.java @@ -1,10 +1,7 @@ package bdd.automation.api.support.api; import bdd.automation.api.support.domain.Pet; -import io.restassured.RestAssured; -import io.restassured.path.json.JsonPath; import io.restassured.response.Response; -import io.restassured.specification.RequestSpecification; import java.util.List; @@ -13,6 +10,7 @@ public class PetApi { private static final String FIND_PETS_BY_STATUS_ENDPOINT = "v3/pet/findByStatus?status={status}"; + private static final String PET_ENDPOINT = "v3/pet/{id}"; public List getPetsByStatus(String status) { return given(). @@ -30,4 +28,20 @@ public Response getPetsResponseByStatus(String status) { get(FIND_PETS_BY_STATUS_ENDPOINT); } + public void deletePetsByStatus(String status) { + List petsId = given(). + pathParam("status", status). + when(). + get(FIND_PETS_BY_STATUS_ENDPOINT). + thenReturn(). + path("id"); + + if(!petsId.isEmpty()) { + for (Integer id : petsId) { + given().pathParam("id", id).delete(PET_ENDPOINT); + } + } + + } + } diff --git a/app/src/test/resources/features/animal.feature b/app/src/test/resources/features/animal.feature index 987d808..031597b 100644 --- a/app/src/test/resources/features/animal.feature +++ b/app/src/test/resources/features/animal.feature @@ -4,4 +4,14 @@ Funcionalidade: Gerenciamento de um animal da PetSore Cenario: Lista somente animais disponíveis para a venda Dado que eu possua animais available Quando eu pesquiso por todos os animais available - Então eu recebo a lista de animais available \ No newline at end of file + Então eu recebo a lista de animais available + + Cenario: Lista somente animais pending + Dado que eu possua animais pending + Quando eu pesquiso por todos os animais pending + Então eu recebo a lista com 2 animais + + Cenario: Não lista nenhum animal + Dado que eu não possua animais sold + Quando eu pesquiso por todos os animais sold + Então eu recebo a lista com 0 animal \ No newline at end of file From 64003829823de77b96852f36afa18f41ba9b9da1 Mon Sep 17 00:00:00 2001 From: Rafael Lima Date: Sun, 20 Dec 2020 18:26:06 +0000 Subject: [PATCH 09/16] Using restassured assertions --- .../api/steps/PetStepDefinitions.java | 21 +++++++++++++ .../automation/api/support/api/PetApi.java | 31 +++++++++---------- .../test/resources/features/animal.feature | 4 ++- app/src/test/resources/features/pet.feature | 4 ++- 4 files changed, 41 insertions(+), 19 deletions(-) diff --git a/app/src/test/java/bdd/automation/api/steps/PetStepDefinitions.java b/app/src/test/java/bdd/automation/api/steps/PetStepDefinitions.java index e825501..40c0e63 100644 --- a/app/src/test/java/bdd/automation/api/steps/PetStepDefinitions.java +++ b/app/src/test/java/bdd/automation/api/steps/PetStepDefinitions.java @@ -2,12 +2,16 @@ import bdd.automation.api.support.api.PetApi; import bdd.automation.api.support.domain.Pet; +import io.cucumber.java.en.And; import io.cucumber.java.en.Given; import io.cucumber.java.en.Then; import io.cucumber.java.en.When; import io.cucumber.java.pt.Dado; +import io.cucumber.java.pt.E; import io.cucumber.java.pt.Entao; import io.cucumber.java.pt.Quando; +import io.restassured.response.Response; +import org.apache.http.HttpStatus; import java.util.List; @@ -40,4 +44,21 @@ public void iSearchForAllPetsAvailable(String status) { public void iReceiveAListOfPetsAvailable() { assertThat(actualPets, is(not(empty()))); } + + @And("I receive another list of pets {word}") + @E("eu recebo uma outra lista de animais {word}") + public void iReceiveAnotherListOfPetsAvailable(String status) { + Response actualPetsAvailableResponse = petApi.getPetsResponseByStatus(status); + + actualPets = actualPetsAvailableResponse.body().jsonPath().getList("", Pet.class); + + actualPetsAvailableResponse. + then(). + statusCode(HttpStatus.SC_OK). + body( + "size()", is(actualPets.size()), + "findAll { it.status == 'available' }.size()", is(actualPets.size()) + ); + + } } diff --git a/app/src/test/java/bdd/automation/api/support/api/PetApi.java b/app/src/test/java/bdd/automation/api/support/api/PetApi.java index 5f2b0b0..ae3817d 100644 --- a/app/src/test/java/bdd/automation/api/support/api/PetApi.java +++ b/app/src/test/java/bdd/automation/api/support/api/PetApi.java @@ -1,33 +1,30 @@ package bdd.automation.api.support.api; import bdd.automation.api.support.domain.Pet; -import io.restassured.RestAssured; -import io.restassured.path.json.JsonPath; import io.restassured.response.Response; -import io.restassured.specification.RequestSpecification; import java.util.List; -import static io.restassured.RestAssured.*; +import static io.restassured.RestAssured.given; public class PetApi { private static final String FIND_PETS_BY_STATUS_ENDPOINT = "v3/pet/findByStatus?status={status}"; -// public List getPetsByStatus(String status) { -// return given(). -// pathParam("status", status). -// when(). -// get(FIND_PETS_BY_STATUS_ENDPOINT). -// then(). -// extract().body().jsonPath().getList("", Pet.class); -// } - public List getPetsByStatus(String status) { - RequestSpecification httpRequest = RestAssured.given(); - httpRequest.pathParam("status", status); - Response response = httpRequest.get(FIND_PETS_BY_STATUS_ENDPOINT); - return response.body().jsonPath().getList("", Pet.class); + return given(). + pathParam("status", status). + when(). + get(FIND_PETS_BY_STATUS_ENDPOINT). + then(). + extract().body().jsonPath().getList("", Pet.class); + } + + public Response getPetsResponseByStatus(String status) { + return given(). + pathParam("status", status). + when(). + get(FIND_PETS_BY_STATUS_ENDPOINT); } } diff --git a/app/src/test/resources/features/animal.feature b/app/src/test/resources/features/animal.feature index 987d808..cfe7d5f 100644 --- a/app/src/test/resources/features/animal.feature +++ b/app/src/test/resources/features/animal.feature @@ -4,4 +4,6 @@ Funcionalidade: Gerenciamento de um animal da PetSore Cenario: Lista somente animais disponíveis para a venda Dado que eu possua animais available Quando eu pesquiso por todos os animais available - Então eu recebo a lista de animais available \ No newline at end of file + Então eu recebo a lista de animais available +# Passo desnecessário, somente para exemplo + E eu recebo uma outra lista de animais available \ No newline at end of file diff --git a/app/src/test/resources/features/pet.feature b/app/src/test/resources/features/pet.feature index e69016f..f0c5244 100644 --- a/app/src/test/resources/features/pet.feature +++ b/app/src/test/resources/features/pet.feature @@ -3,4 +3,6 @@ Feature: Manage a pet in the PetSore Scenario: List only available pets for sale Given that I have pets available When I search for all pets available - Then I receive a list of pets available \ No newline at end of file + Then I receive a list of pets available +# Unecessary step, done for the sake of learning + And I receive another list of pets available \ No newline at end of file From 5ba5353501bcd370116b21cf0f36d13753a0ed89 Mon Sep 17 00:00:00 2001 From: Rafael Lima Date: Mon, 28 Dec 2020 19:04:40 +0000 Subject: [PATCH 10/16] Update readme --- README.md | 98 +++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 80 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 0d32edf..8bd680f 100644 --- a/README.md +++ b/README.md @@ -1,45 +1,107 @@ #### Selecione sua Língua | Select your Language -Português -English +Português +English -# Nome do Video +# Automação de Testes de API usando BDD ## Repositório ### Branches -* Master (contém o código do último vídeo) - `pt-master` -* Vídeo 1 - `` +* Master (contém o código do último vídeo) - `main` +* Vídeo 1 - `01-basic-gradle-project` +* Vídeo 2 - `02-first-feature` +* Vídeo 3 - `03-first-implementation` +* Vídeo 4 - `04-docstring` +* Vídeo 5 - `05-rest-assured-setup` +* Vídeo 6 - `06-specification-by-example-scenario` +* Vídeo 7 - `07-cucumber-runner` +* Vídeo 8 - `08-creating-clients` +* Vídeo 9 - `09-cucumber-hooks` +* Vídeo 10 - `10-deleting-user-with-hooks` +* Vídeo 11 - `11-mapping-more-complex-jsons` +* Vídeo 12 - `12-deserialization` +* Vídeo 13 - `13-understanding-restassured-syntax` +* Vídeo 14 - `14-using-restassured-assertions` +* Vídeo 15 - `15-prepping-the-scenario` ### Requisitos: -* +* Java 14 +* Gradle 6.7 +* Docker -### Comandos -* +### Executar os Testes Localmente +* Subir a loja Swagger Pet Store - `docker run --name petstore -d -p 12345:8080 swaggerapi/petstore3:unstable` +* Rodar os testes - `./gradlew test` +* Relatório do Cucumber - `app/build/reports/feature.html` ## Vídeo -* [Vídeo Completo]() - +1. [Criação do Projeto e suas dependências](https://youtu.be/YTKIVemoibA) +1. [Criando Primerio Cenário](https://youtu.be/dmSimWz21RQ) +1. [Codando o Primeiro Cenário](https://youtu.be/qJyYvdAYZzY) +1. [Devo usar DocString?](https://youtu.be/FVssrtDRs_o) +1. [Rest Assured config](https://youtu.be/Ca_z5m_GtpI) +1. [Especificação por exemplo na prática](https://youtu.be/yZA65qXKxoQ) +1. [criando o Executável](https://youtu.be/jSWksLZ9Z7M) +1. [Mapeando a API](https://youtu.be/ltgVZ8Pbjcc) +1. [Criando Ganchos](https://youtu.be/TWkmPkelLd4) +1. [Limpando os Dados](https://youtu.be/TWkmPkelLd4) +1. [Json mais complexos](https://youtu.be/ORZwGUocE4E) +1. [Desserialização](https://youtu.be/JJtHzUfo8us) +1. [Sintaxe antiga do RestAssured](https://youtu.be/b-yLVlV8zrs) +1. [Assertivas no RestAssured](https://youtu.be/hKuIhFwAhr0) +1. [Preparando o cenário](https://youtu.be/CMXwL-w4pMg) --- -# Video Name +# API Test Automation using BDD ## Repository ### Branches -* Master (has the code from the last video) - `en-master` -* Video 1 - `` +* Master (has the code from the last video) - `main` +* Video 1 - `01-basic-gradle-project` +* Video 2 - `02-first-feature` +* Video 3 - `03-first-implementation` +* Video 4 - `04-docstring` +* Video 5 - `05-rest-assured-setup` +* Video 6 - `06-specification-by-example-scenario` +* Video 7 - `07-cucumber-runner` +* Video 8 - `08-creating-clients` +* Video 9 - `09-cucumber-hooks` +* Video 10 - `10-deleting-user-with-hooks` +* Video 11 - `11-mapping-more-complex-jsons` +* Video 12 - `12-deserialization` +* Video 13 - `13-understanding-restassured-syntax` +* Video 14 - `14-using-restassured-assertions` +* Video 15 - `15-prepping-the-scenario` ### Requirements: -* +* Java 14 +* Gradle 6.7 +* Docker -### Commands -* +### Executing the tests locally +* Start Swagger Pet Store - `docker run --name petstore -d -p 12345:8080 swaggerapi/petstore3:unstable` +* Run the tests - `./gradlew test` +* Cucumber Report - `app/build/reports/feature.html` ## Video -* [Full Video]() - +1. [Creating the Project and its dependencies](https://youtu.be/0i72N1Fz_y0) +1. [Creating the First Scenario](https://youtu.be/A3uiR4quZr4) +1. [Implementing the First Scenario](https://youtu.be/uFoq-XtbBa0) +1. [Should I use DocString?](https://youtu.be/M-S55a6ei1M) +1. [Rest Assured Config](https://youtu.be/3jHMpmZfylY) +1. [Hands on Specification by Example](https://youtu.be/wkePKVTevYM) +1. [Runner Class](https://youtu.be/oqElg0mpfwY) +1. [Mapping the API](https://youtu.be/-_B2fFxfFdY) +1. [Creating Hooks](https://youtu.be/Kg611Jv_ib8) +1. [Cleaning the Data](https://youtu.be/IkH6gk2gNNQ) +1. [More complex jsons](https://youtu.be/YLuGI-j61MY) +1. [Deserialization](https://youtu.be/dKdenUAI6iA) +1. [RestAssured Old Syntax](https://youtu.be/1QUjfMs74bA) +1. [RestAssured assertions](https://youtu.be/3R74ESRKm7o) +1. [Preparing the scenario](https://youtu.be/kEuTzrOjdhY) From 7073566b4b6afbaf19bd2faddb2ce3540a070e50 Mon Sep 17 00:00:00 2001 From: Rafael Lima Date: Mon, 4 Jan 2021 23:08:22 +0000 Subject: [PATCH 11/16] Adding scenario outline for PT --- .../automation/api/steps/PetStepDefinitions.java | 4 ++-- app/src/test/resources/features/animal.feature | 16 +++++++++++++++- app/src/test/resources/features/pet.feature | 16 +++++++++++++++- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/app/src/test/java/bdd/automation/api/steps/PetStepDefinitions.java b/app/src/test/java/bdd/automation/api/steps/PetStepDefinitions.java index c317c6f..b8916d9 100644 --- a/app/src/test/java/bdd/automation/api/steps/PetStepDefinitions.java +++ b/app/src/test/java/bdd/automation/api/steps/PetStepDefinitions.java @@ -59,8 +59,8 @@ public void iReceiveAnotherListOfPetsAvailable(String status) { } - @Então("eu recebo a lista com {int} animal/animais") - @Then("I receive a list of {int} pet(s)") + @Então("eu recebo a lista com {} animal/animais") + @Then("I receive a list of {} pet(s)") public void iReceiveAListOfPets(int petsQuantity) { assertThat(actualPets.size(), is(petsQuantity)); } diff --git a/app/src/test/resources/features/animal.feature b/app/src/test/resources/features/animal.feature index 735cd94..88f7b0b 100644 --- a/app/src/test/resources/features/animal.feature +++ b/app/src/test/resources/features/animal.feature @@ -16,4 +16,18 @@ Funcionalidade: Gerenciamento de um animal da PetSore Cenario: Não lista nenhum animal Dado que eu não possua animais sold Quando eu pesquiso por todos os animais sold - Então eu recebo a lista com 0 animal \ No newline at end of file + Então eu recebo a lista com 0 animal + + Esquema do Cenário: Lista animais pelo seu estado de venda + Dado que eu não possua animais sold + Quando eu pesquiso por todos os animais + Então eu recebo a lista com animais + + Exemplos: Animais em estoque + | estado | quantidade | + | available | 7 | + | pending | 2 | + + Exemplos: Animais sem estoque + | estado | quantidade | + | sold | 0 | \ No newline at end of file diff --git a/app/src/test/resources/features/pet.feature b/app/src/test/resources/features/pet.feature index c4762db..398cbd5 100644 --- a/app/src/test/resources/features/pet.feature +++ b/app/src/test/resources/features/pet.feature @@ -15,4 +15,18 @@ Feature: Manage a pet in the PetSore Scenario: Don't list any pets Given that I don't have pets sold When I search for all pets sold - Then I receive a list of 0 pet \ No newline at end of file + Then I receive a list of 0 pet + + Scenario Outline: List pets by its selling state + Given that I don't have pets sold + When I search for all pets + Then I receive a list of pets + + Examples: Pets in stock + | status | quantity | + | available | 7 | + | pending | 2 | + + Examples: Pets not in stock + | status | quantity | + | sold | 0 | \ No newline at end of file From 26174275eb22084f94fca26d74ce518238ec665b Mon Sep 17 00:00:00 2001 From: Rafael Lima Date: Tue, 5 Jan 2021 23:06:18 +0000 Subject: [PATCH 12/16] Adding readme --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 8bd680f..eaa87b3 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,7 @@ * Vídeo 13 - `13-understanding-restassured-syntax` * Vídeo 14 - `14-using-restassured-assertions` * Vídeo 15 - `15-prepping-the-scenario` +* Vídeo 16 - `16-scenario-outline` ### Requisitos: * Java 14 @@ -53,6 +54,7 @@ 1. [Sintaxe antiga do RestAssured](https://youtu.be/b-yLVlV8zrs) 1. [Assertivas no RestAssured](https://youtu.be/hKuIhFwAhr0) 1. [Preparando o cenário](https://youtu.be/CMXwL-w4pMg) +1. [Esquema de Cenário](https://youtu.be/oK_mxMqArHw) --- @@ -77,6 +79,7 @@ * Video 13 - `13-understanding-restassured-syntax` * Video 14 - `14-using-restassured-assertions` * Video 15 - `15-prepping-the-scenario` +* Video 16 - `16-scenario-outline` ### Requirements: * Java 14 @@ -105,3 +108,4 @@ 1. [RestAssured Old Syntax](https://youtu.be/1QUjfMs74bA) 1. [RestAssured assertions](https://youtu.be/3R74ESRKm7o) 1. [Preparing the scenario](https://youtu.be/kEuTzrOjdhY) +1. [Scenario Outline](https://youtu.be/ADRZoO5bUZw) From babafc00ccf4cb59c5ea85da1afe7f4b87dcab33 Mon Sep 17 00:00:00 2001 From: Rafael Lima Date: Mon, 11 Jan 2021 19:34:44 +0000 Subject: [PATCH 13/16] Adding feature --- .../api/steps/PetStepDefinitions.java | 30 +++++++++++++++++++ .../test/resources/features/animal.feature | 8 ++++- app/src/test/resources/features/pet.feature | 8 ++++- 3 files changed, 44 insertions(+), 2 deletions(-) diff --git a/app/src/test/java/bdd/automation/api/steps/PetStepDefinitions.java b/app/src/test/java/bdd/automation/api/steps/PetStepDefinitions.java index b8916d9..b700387 100644 --- a/app/src/test/java/bdd/automation/api/steps/PetStepDefinitions.java +++ b/app/src/test/java/bdd/automation/api/steps/PetStepDefinitions.java @@ -21,6 +21,7 @@ public class PetStepDefinitions { private PetApi petApi; private List actualPets; + private Response actualPetsResponse; public PetStepDefinitions() { petApi = new PetApi(); @@ -70,4 +71,33 @@ public void iReceiveAListOfPets(int petsQuantity) { public void thatIdontHavePets(String status) { petApi.deletePetsByStatus(status); } + + @When("I do a search for all pets {word}") + @Quando("pesquiso por todos os animais {word}") + public void iDoASearchForAllPetsAvailable(String status) { + actualPetsResponse = petApi.getPetsResponseByStatus(status); + } + + @Then("I receive a list of {int} pets {word}") + @Entao("recebo a lista com {int} animais {word}") + public void iReceiveAListOfPetsAvailable(int petsQuantity, String status) { + actualPetsResponse. + then(). + statusCode(HttpStatus.SC_OK). + body( + "size()", is(petsQuantity), + "findAll { it.status == '" + status + "' }.size()", is(petsQuantity) + ); + + } + + @And("{int} pets has the name {word}") + @E("{int} animais possuem o nome {word}") + public void petsHasTheNameLion(int petsQuantity, String petName) { + actualPetsResponse. + then(). + body( + "findAll { it.name.contains('"+petName+"') }.size()", is(petsQuantity) + ); + } } diff --git a/app/src/test/resources/features/animal.feature b/app/src/test/resources/features/animal.feature index 88f7b0b..d9c9494 100644 --- a/app/src/test/resources/features/animal.feature +++ b/app/src/test/resources/features/animal.feature @@ -30,4 +30,10 @@ Funcionalidade: Gerenciamento de um animal da PetSore Exemplos: Animais sem estoque | estado | quantidade | - | sold | 0 | \ No newline at end of file + | sold | 0 | + + Cenario: Lista animais disponíveis para a venda + Dado que eu possua animais available + Quando pesquiso por todos os animais available + Então recebo a lista com 7 animais available + E 3 animais possuem o nome Lion \ No newline at end of file diff --git a/app/src/test/resources/features/pet.feature b/app/src/test/resources/features/pet.feature index 398cbd5..28432f3 100644 --- a/app/src/test/resources/features/pet.feature +++ b/app/src/test/resources/features/pet.feature @@ -29,4 +29,10 @@ Feature: Manage a pet in the PetSore Examples: Pets not in stock | status | quantity | - | sold | 0 | \ No newline at end of file + | sold | 0 | + + Scenario: List pets available for selling + Given that I have pets available + When I do a search for all pets available + Then I receive a list of 7 pets available + And 3 pets has the name Lion \ No newline at end of file From 7280a881800eb87809bc47aca6c677bdc289ec09 Mon Sep 17 00:00:00 2001 From: Rafael Lima Date: Mon, 11 Jan 2021 22:26:50 +0000 Subject: [PATCH 14/16] Add loja.feature --- app/src/test/resources/features/loja.feature | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 app/src/test/resources/features/loja.feature diff --git a/app/src/test/resources/features/loja.feature b/app/src/test/resources/features/loja.feature new file mode 100644 index 0000000..d3864d7 --- /dev/null +++ b/app/src/test/resources/features/loja.feature @@ -0,0 +1,7 @@ +# new feature +# Tags: optional + +Feature: A description + + Scenario: A scenario + Given something.. \ No newline at end of file From 7a24c8bffec33a1c33ab443514b385466ec6f593 Mon Sep 17 00:00:00 2001 From: Rafael Lima Date: Mon, 11 Jan 2021 22:43:05 +0000 Subject: [PATCH 15/16] Creating builder from scratch --- .../api/steps/StoreStepDefinitions.java | 30 +++++++++ .../automation/api/support/domain/Store.java | 17 +++++ .../support/domain/builders/StoreBuilder.java | 66 +++++++++++++++++++ app/src/test/resources/features/store.feature | 7 ++ 4 files changed, 120 insertions(+) create mode 100644 app/src/test/java/bdd/automation/api/steps/StoreStepDefinitions.java create mode 100644 app/src/test/java/bdd/automation/api/support/domain/Store.java create mode 100644 app/src/test/java/bdd/automation/api/support/domain/builders/StoreBuilder.java create mode 100644 app/src/test/resources/features/store.feature diff --git a/app/src/test/java/bdd/automation/api/steps/StoreStepDefinitions.java b/app/src/test/java/bdd/automation/api/steps/StoreStepDefinitions.java new file mode 100644 index 0000000..723db2b --- /dev/null +++ b/app/src/test/java/bdd/automation/api/steps/StoreStepDefinitions.java @@ -0,0 +1,30 @@ +package bdd.automation.api.steps; + +import bdd.automation.api.support.domain.Store; +import bdd.automation.api.support.domain.builders.StoreBuilder; +import io.cucumber.java.en.Given; + +public class StoreStepDefinitions { + @Given("something..") + public void something() { + Store store1 = new StoreBuilder().build(); + + Store store2 = new StoreBuilder() + .withId(9) + .withPetId(99) + .withQuantity(100) + .withStatus("complete") + .withShipDate("11/01/2021") + .build(); + + Store store3 = new StoreBuilder() + .withPetId(88) + .withQuantity(50) + .withStatus("incomplete") + .build(); + + Store store4 = new StoreBuilder().build(); + + System.out.println("asdasd"); + } +} diff --git a/app/src/test/java/bdd/automation/api/support/domain/Store.java b/app/src/test/java/bdd/automation/api/support/domain/Store.java new file mode 100644 index 0000000..3f7a53a --- /dev/null +++ b/app/src/test/java/bdd/automation/api/support/domain/Store.java @@ -0,0 +1,17 @@ +package bdd.automation.api.support.domain; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@AllArgsConstructor +@NoArgsConstructor +@Data +public class Store { + private int id; + private int petId; + private int quantity; + private String shipDate; + private String status; + private boolean complete; +} diff --git a/app/src/test/java/bdd/automation/api/support/domain/builders/StoreBuilder.java b/app/src/test/java/bdd/automation/api/support/domain/builders/StoreBuilder.java new file mode 100644 index 0000000..40c857f --- /dev/null +++ b/app/src/test/java/bdd/automation/api/support/domain/builders/StoreBuilder.java @@ -0,0 +1,66 @@ +package bdd.automation.api.support.domain.builders; + +import bdd.automation.api.support.domain.Store; + +public class StoreBuilder { + private int id; + private int petId; + private int quantity; + private String shipDate; + private String status; + private boolean complete; + + public StoreBuilder() { + reset(); + } + + public StoreBuilder withId(int id) { + this.id = id; + return this; + } + + public StoreBuilder withPetId(int petId) { + this.petId = petId; + return this; + } + + public StoreBuilder withQuantity(int quantity) { + this.quantity = quantity; + return this; + } + + public StoreBuilder withShipDate(String shipDate) { + this.shipDate = shipDate; + return this; + } + + public StoreBuilder withStatus(String status) { + this.status = status; + return this; + } + + public StoreBuilder withComplete(Boolean complete) { + this.complete = complete; + return this; + } + + public Store build() { + return new Store( + id, + petId, + quantity, + shipDate, + status, + complete + ); + } + + public void reset() { + id = 5; + petId = 22; + quantity = 10; + shipDate = "20/02/2021"; + status = "approved"; + complete = true; + } +} diff --git a/app/src/test/resources/features/store.feature b/app/src/test/resources/features/store.feature new file mode 100644 index 0000000..d3864d7 --- /dev/null +++ b/app/src/test/resources/features/store.feature @@ -0,0 +1,7 @@ +# new feature +# Tags: optional + +Feature: A description + + Scenario: A scenario + Given something.. \ No newline at end of file From 43efc72fc22699ec9913f04ccac1bf0e47a594ea Mon Sep 17 00:00:00 2001 From: Rafael Lima Date: Wed, 20 Jan 2021 23:32:07 +0000 Subject: [PATCH 16/16] Adding readme --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index eaa87b3..5b425df 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,8 @@ * Vídeo 14 - `14-using-restassured-assertions` * Vídeo 15 - `15-prepping-the-scenario` * Vídeo 16 - `16-scenario-outline` +* Vídeo 17 - `17-asserting-with-groovy-collection` +* Vídeo 18 - `18-creating-builder-from-scratch` ### Requisitos: * Java 14 @@ -55,6 +57,8 @@ 1. [Assertivas no RestAssured](https://youtu.be/hKuIhFwAhr0) 1. [Preparando o cenário](https://youtu.be/CMXwL-w4pMg) 1. [Esquema de Cenário](https://youtu.be/oK_mxMqArHw) +1. [Assertivas com Coleções Groovy](https://youtu.be/Eox-7q2gT0g) +1. [Criando builders do zero](https://youtu.be/vhbtYHOMIhE) --- @@ -80,6 +84,8 @@ * Video 14 - `14-using-restassured-assertions` * Video 15 - `15-prepping-the-scenario` * Video 16 - `16-scenario-outline` +* Video 17 - `17-asserting-with-groovy-collection` +* Video 18 - `18-creating-builder-from-scratch` ### Requirements: * Java 14 @@ -109,3 +115,5 @@ 1. [RestAssured assertions](https://youtu.be/3R74ESRKm7o) 1. [Preparing the scenario](https://youtu.be/kEuTzrOjdhY) 1. [Scenario Outline](https://youtu.be/ADRZoO5bUZw) +1. [Assertions with Groovy Collections](https://youtu.be/Hzv0Rj3wOBY) +1. [Creating builder from scratch](https://youtu.be/NDPm0ybVj2Q)