Skip to content

Instantly share code, notes, and snippets.

@Jet-C
Created December 1, 2019 02:03
Show Gist options
  • Select an option

  • Save Jet-C/fe1a0da023cf020a72276f8abeefd74c to your computer and use it in GitHub Desktop.

Select an option

Save Jet-C/fe1a0da023cf020a72276f8abeefd74c to your computer and use it in GitHub Desktop.
Rest-assured integration tests
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT, classes = SpringTestApplication.class)
@TestInstance(Lifecycle.PER_CLASS)
@ActiveProfiles({ "integration" })
public class AppRestAssuredIT {
@Value("${local.server.port}")
private int ports;
@BeforeAll
public void setUp() {
port = ports;
baseURI = "http://localhost/demo"; // Will result in "http://localhost:xxxx/demo"
}
@Test
public void get_AllVehicles_returnsAllVehicles_200() {
String vinArray[] = { "FR45212A24D4SED66", "FR4EDED2150RFT5GE", "XDFR6545DF3A5R896", "GMDE65A5ED66ER002",
"PQERS2A36458E98CD", "194678S400005", "48955460210" };
ValidatableResponse response = given().contentType(MediaType.APPLICATION_JSON_VALUE)
.accept(MediaType.APPLICATION_JSON_VALUE).when().get("/vehicles").then();
System.out.println("'getAllVehicles_returnsAllVehicles_200()' response:\n" + response.extract().asString());
response.assertThat().statusCode(HttpStatus.OK.value()).body("content.size()", greaterThan(7))
.body(containsString("Corvette")).body("find {it.vin == 'FR45212A24D4SED66'}.year", equalTo(2010))
.body("find {it.vin == 'FR45212A24D4SED66'}.year", equalTo(2010))
.body("make", hasItems("Ford", "Chevrolet", "Toyota", "Nissan")).body("make", not(hasItem("Honda")))
.body("vin", hasItems(vinArray)).body("findAll {it.year < 1990}.size()", is(2));
}
@Test
public void get_VehicleById_returnsVehicle_200() {
ValidatableResponse response = given().contentType(MediaType.APPLICATION_JSON_VALUE)
.accept(MediaType.APPLICATION_JSON_VALUE).when().get("/vehicles/FR45212A24D4SED66").then();
System.out.println("'getVehicleById_returnsVehicle_200()' response:\n" + response.extract().asString());
response.assertThat().statusCode(HttpStatus.OK.value()).body("make", equalTo("Ford"))
.body("model", equalTo("F-150")).body("year", equalTo(2010)).body("is_older", equalTo(false));
}
@Test
public void get_VehicleById_returnsNotFound_404() {
ValidatableResponse response = given().contentType(MediaType.APPLICATION_JSON_VALUE)
.accept(MediaType.APPLICATION_JSON_VALUE).when().get("/vehicles/NON-EXISTING-ID77").then();
System.out.println("'get_VehicleById_returnsNotFound_404()' response:\n" + response.extract().asString());
response.assertThat().statusCode(HttpStatus.NOT_FOUND.value()).body("errorMessage",
containsString("404 Vehicle with VIN (NON-EXISTING-ID77) not found"));
}
@Test
public void post_newVehicle_returnsCreatedVehicle_201() {
// Build new vehicle to post
Vehicle newVehicle = Vehicle.builder().vin("X0RF654S54A65E66E").make("Toyota").model("Supra").year(2020)
.is_older(false).build();
ValidatableResponse response = given().contentType(MediaType.APPLICATION_JSON_VALUE)
.accept(MediaType.APPLICATION_JSON_VALUE).body(newVehicle).when().post("/create/vehicle").then();
System.out.println("'post_Vehicle_returnsCreatedVehicle_201()' response:\n" + response.extract().asString());
response.assertThat().statusCode(HttpStatus.CREATED.value()).body("vin", equalTo("X0RF654S54A65E66E"))
.body("make", equalTo("Toyota")).body("model", equalTo("Supra")).body("year", equalTo(2020))
.body("is_older", equalTo(false));
}
@Test
public void post_newVehicle_Returns_BadRequest_400() {
// Create new vehicle with a bad VIN length for the declared model year
Vehicle newVehicle = Vehicle.builder().vin("BAD-LENGTH-VIN").make("Chevrolet").model("Camaro").year(2018)
.is_older(false).build();
ValidatableResponse response = given().contentType(MediaType.APPLICATION_JSON_VALUE)
.accept(MediaType.APPLICATION_JSON_VALUE).body(newVehicle).when().post("/create/vehicle").then();
System.out.println("'post_newVehicle_Returns_BadRequest_400()' response:\n" + response.extract().asString());
response.assertThat().statusCode(HttpStatus.BAD_REQUEST.value()).body("errorMessage",
containsString("VIN length is invalid for the declared year"));
}
@Test
public void put_updateVehicle_returnsUpdatedVehicle_202() {
// Update the year on the vehicle 1992 -> 1997
Vehicle updateVehicle = Vehicle.builder().vin("FR4EDED2150RFT5GE").make("Ford").model("Ranger").year(1997)
.is_older(false).build();
ValidatableResponse response = given().contentType(MediaType.APPLICATION_JSON_VALUE)
.accept(MediaType.APPLICATION_JSON_VALUE).body(updateVehicle).when()
.put("/update/vehicle/FR4EDED2150RFT5GE").then();
System.out
.println("'put_updateVehicle_returnsUpdatedVehicle_202()' response:\n" + response.extract().asString());
response.assertThat().statusCode(HttpStatus.ACCEPTED.value()).body("vin", equalTo("FR4EDED2150RFT5GE"))
.body("make", equalTo("Ford")).body("model", equalTo("Ranger")).body("year", equalTo(1997))
.body("is_older", equalTo(false));
}
@Test
public void delete_vehicle_returnsNoContent_204() {
ValidatableResponse response = given().contentType(MediaType.APPLICATION_JSON_VALUE)
.accept(MediaType.APPLICATION_JSON_VALUE).when().delete("/vehicles/XDFR64AE9F3A5R78S").then();
System.out.println("'delete_vehicle_returnsNoContent_204()' response:\n" + response.extract().asString());
response.assertThat().statusCode(HttpStatus.NO_CONTENT.value());
}
}
@Jet-C

Jet-C commented May 27, 2020

Copy link
Copy Markdown
Author

baseURI and port never declared, never used?

They are being used but these values are called internally by RestAssured library
import static io.restassured.RestAssured.baseURI;
import static io.restassured.RestAssured.port;
When you perform the http request [get, put, post...] they get called/used

@rehevkor5

Copy link
Copy Markdown

Ah, static imports, got it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment