diff --git a/spring-cloud/spring-cloud-bootstrap/gateway/pom.xml b/spring-cloud/spring-cloud-bootstrap/gateway/pom.xml index 97c440c249..13ae6b4050 100644 --- a/spring-cloud/spring-cloud-bootstrap/gateway/pom.xml +++ b/spring-cloud/spring-cloud-bootstrap/gateway/pom.xml @@ -51,6 +51,13 @@ spring-boot-starter-test test + + + io.rest-assured + rest-assured + test + 3.0.2 + diff --git a/spring-cloud/spring-cloud-bootstrap/gateway/src/test/java/com/baeldung/spring/cloud/bootstrap/gateway/LiveTest.java b/spring-cloud/spring-cloud-bootstrap/gateway/src/test/java/com/baeldung/spring/cloud/bootstrap/gateway/LiveTest.java new file mode 100644 index 0000000000..71ed2cd709 --- /dev/null +++ b/spring-cloud/spring-cloud-bootstrap/gateway/src/test/java/com/baeldung/spring/cloud/bootstrap/gateway/LiveTest.java @@ -0,0 +1,198 @@ +package com.baeldung.spring.cloud.bootstrap.gateway; + +import static io.restassured.RestAssured.config; +import io.restassured.RestAssured; +import io.restassured.authentication.FormAuthConfig; +import io.restassured.config.RedirectConfig; +import io.restassured.http.ContentType; +import io.restassured.response.Response; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.springframework.http.HttpStatus; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +public class LiveTest { + + private final String ROOT_URI = "http://localhost:8080"; + private final FormAuthConfig formConfig = new FormAuthConfig("/login", "username", "password"); + + @Before + public void setup() { + RestAssured.config = config().redirect(RedirectConfig.redirectConfig() + .followRedirects(false)); + } + + @Test + public void whenGetAllBooks_thenSuccess() { + final Response response = RestAssured.get(ROOT_URI + "/book-service/books"); + Assert.assertEquals(HttpStatus.OK.value(), response.getStatusCode()); + Assert.assertNotNull(response.getBody()); + } + + @Test + public void whenAccessProtectedResourceWithoutLogin_thenRedirectToLogin() { + final Response response = RestAssured.get(ROOT_URI + "/book-service/books/1"); + Assert.assertEquals(HttpStatus.FOUND.value(), response.getStatusCode()); + Assert.assertEquals("http://localhost:8080/login", response.getHeader("Location")); + } + + @Test + public void whenAccessProtectedResourceAfterLogin_thenSuccess() { + final Response response = RestAssured.given() + .auth() + .form("user", "password", formConfig) + .get(ROOT_URI + "/book-service/books/1"); + Assert.assertEquals(HttpStatus.OK.value(), response.getStatusCode()); + Assert.assertNotNull(response.getBody()); + } + + @Test + public void whenAccessAdminProtectedResource_thenForbidden() { + final Response response = RestAssured.given() + .auth() + .form("user", "password", formConfig) + .get(ROOT_URI + "/rating-service/ratings"); + Assert.assertEquals(HttpStatus.FORBIDDEN.value(), response.getStatusCode()); + + } + + @Test + public void whenAdminAccessProtectedResource_thenSuccess() { + final Response response = RestAssured.given() + .auth() + .form("admin", "admin", formConfig) + .get(ROOT_URI + "/rating-service/ratings"); + Assert.assertEquals(HttpStatus.OK.value(), response.getStatusCode()); + Assert.assertNotNull(response.getBody()); + } + + @Test + public void whenAdminAccessDiscoveryResource_thenSuccess() { + final Response response = RestAssured.given() + .auth() + .form("admin", "admin", formConfig) + .get(ROOT_URI + "/discovery"); + Assert.assertEquals(HttpStatus.OK.value(), response.getStatusCode()); + } + + @Test + public void whenAddnewRating_thenSuccess() { + + final Rating rating = new Rating(1L, 4); + + // request the protected resource + final Response ratingResponse = RestAssured.given() + .auth() + .form("admin", "admin", formConfig) + .and() + .contentType(ContentType.JSON) + .body(rating) + .post(ROOT_URI + "/rating-service/ratings"); + final Rating result = ratingResponse.as(Rating.class); + Assert.assertEquals(HttpStatus.OK.value(), ratingResponse.getStatusCode()); + Assert.assertEquals(rating.getBookId(), result.getBookId()); + Assert.assertEquals(rating.getStars(), result.getStars()); + } + + @Test + public void whenAddnewBook_thenSuccess() { + final Book book = new Book("Baeldung", "How to spring cloud"); + + // request the protected resource + final Response bookResponse = RestAssured.given() + .auth() + .form("admin", "admin", formConfig) + .and() + .contentType(ContentType.JSON) + .body(book) + .post(ROOT_URI + "/book-service/books"); + final Book result = bookResponse.as(Book.class); + Assert.assertEquals(HttpStatus.OK.value(), bookResponse.getStatusCode()); + Assert.assertEquals(book.getAuthor(), result.getAuthor()); + Assert.assertEquals(book.getTitle(), result.getTitle()); + + } + + @JsonIgnoreProperties(ignoreUnknown = true) + public static class Book { + + private Long id; + private String author; + private String title; + + public Book() { + } + + public Book(String author, String title) { + this.author = author; + this.title = title; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + } + + @JsonIgnoreProperties(ignoreUnknown = true) + public static class Rating { + private Long id; + private Long bookId; + private int stars; + + public Rating() { + } + + public Rating(Long bookId, int stars) { + this.bookId = bookId; + this.stars = stars; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getBookId() { + return bookId; + } + + public void setBookId(Long bookId) { + this.bookId = bookId; + } + + public int getStars() { + return stars; + } + + public void setStars(int stars) { + this.stars = stars; + } + } + +} \ No newline at end of file