java-tutorials/spring-boot-angular-ecommerce/src/test/java/com/baeldung/ecommerce/EcommerceApplicationIntegrationTest.java

101 lines
4.1 KiB
Java
Raw Normal View History

package com.baeldung.ecommerce;
import com.baeldung.ecommerce.controller.OrderController;
import com.baeldung.ecommerce.controller.ProductController;
import com.baeldung.ecommerce.dto.OrderProductDto;
import com.baeldung.ecommerce.model.Order;
import com.baeldung.ecommerce.model.Product;
import org.assertj.core.api.Assertions;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.boot.web.server.LocalServerPort;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.Collections;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.hasItem;
import static org.hamcrest.Matchers.hasProperty;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = { EcommerceApplication.class }, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class EcommerceApplicationIntegrationTest {
@Autowired private TestRestTemplate restTemplate;
@LocalServerPort private int port;
@Autowired private ProductController productController;
@Autowired private OrderController orderController;
@Test
public void contextLoads() {
Assertions
.assertThat(productController)
.isNotNull();
Assertions
.assertThat(orderController)
.isNotNull();
}
@Test
public void givenGetProductsApiCall_whenProductListRetrieved_thenSizeMatchAndListContainsProductNames() {
ResponseEntity<Iterable<Product>> responseEntity = restTemplate.exchange("http://localhost:" + port + "/api/products", HttpMethod.GET, null, new ParameterizedTypeReference<Iterable<Product>>() {
});
Iterable<Product> products = responseEntity.getBody();
Assertions
.assertThat(products)
.hasSize(7);
assertThat(products, hasItem(hasProperty("name", is("TV Set"))));
assertThat(products, hasItem(hasProperty("name", is("Game Console"))));
assertThat(products, hasItem(hasProperty("name", is("Sofa"))));
assertThat(products, hasItem(hasProperty("name", is("Icecream"))));
assertThat(products, hasItem(hasProperty("name", is("Beer"))));
assertThat(products, hasItem(hasProperty("name", is("Phone"))));
assertThat(products, hasItem(hasProperty("name", is("Watch"))));
}
@Test
public void givenGetOrdersApiCall_whenProductListRetrieved_thenSizeMatchAndListContainsProductNames() {
ResponseEntity<Iterable<Order>> responseEntity = restTemplate.exchange("http://localhost:" + port + "/api/orders", HttpMethod.GET, null, new ParameterizedTypeReference<Iterable<Order>>() {
});
Iterable<Order> orders = responseEntity.getBody();
Assertions
.assertThat(orders)
.hasSize(0);
}
@Test
public void givenPostOrder_whenBodyRequestMatcherJson_thenResponseContainsEqualObjectProperties() {
final ResponseEntity<Order> postResponse = restTemplate.postForEntity("http://localhost:" + port + "/api/orders", prepareOrderForm(), Order.class);
Order order = postResponse.getBody();
Assertions
.assertThat(postResponse.getStatusCode())
.isEqualByComparingTo(HttpStatus.CREATED);
assertThat(order, hasProperty("status", is("PAID")));
assertThat(order.getOrderProducts(), hasItem(hasProperty("quantity", is(2))));
}
private OrderController.OrderForm prepareOrderForm() {
OrderController.OrderForm orderForm = new OrderController.OrderForm();
OrderProductDto productDto = new OrderProductDto();
productDto.setProduct(new Product(1L, "TV Set", 300.00, "http://placehold.it/200x100"));
productDto.setQuantity(2);
orderForm.setProductOrders(Collections.singletonList(productDto));
return orderForm;
}
}