From bb7216980e05e45f3c65facbd224be835981594f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20G=C3=BCnther?= Date: Mon, 3 Jan 2022 14:45:28 +0100 Subject: [PATCH 1/4] replaces tkit test extension --- pom.xml | 22 +- .../model/ApplicationPersistenceEntity.java | 87 +++--- .../domain/model/ItemEntity.java | 26 +- .../ordermanagement/logic/UcManageOrder.java | 6 +- src/main/resources/application.properties | 7 +- .../resources/product-service-openapi.yaml | 283 +++--------------- .../rest/v1/OrderRestServiceTest.java | 98 +++--- .../rest/v1/PostgresResource.java | 27 ++ src/test/resources/data/order.xls | Bin 36864 -> 0 bytes src/test/resources/docker-compose.yml | 31 -- 10 files changed, 205 insertions(+), 382 deletions(-) create mode 100644 src/test/java/com/devonfw/quarkus/ordermanagement/rest/v1/PostgresResource.java delete mode 100644 src/test/resources/data/order.xls delete mode 100644 src/test/resources/docker-compose.yml diff --git a/pom.xml b/pom.xml index 6f2b19a..13ba4f9 100644 --- a/pom.xml +++ b/pom.xml @@ -108,6 +108,21 @@ rest-assured test + + org.testcontainers + testcontainers + test + + + org.testcontainers + junit-jupiter + test + + + org.testcontainers + postgresql + test + io.quarkus @@ -122,13 +137,6 @@ io.quarkus quarkus-logging-json - - - org.tkit.quarkus - tkit-quarkus-test - 1.12.0 - test - diff --git a/src/main/java/com/devonfw/quarkus/general/domain/model/ApplicationPersistenceEntity.java b/src/main/java/com/devonfw/quarkus/general/domain/model/ApplicationPersistenceEntity.java index 5bb4799..51e7550 100644 --- a/src/main/java/com/devonfw/quarkus/general/domain/model/ApplicationPersistenceEntity.java +++ b/src/main/java/com/devonfw/quarkus/general/domain/model/ApplicationPersistenceEntity.java @@ -8,7 +8,7 @@ import javax.persistence.Version; /** - * Abstract base class for all persistence entities with an {@link #getId() id} and a + * Abstract base class for all {@link PersistenceEntity persistence entities} with an {@link #getId() id} and a * {@link #getModificationCounter() modificationCounter} (version) field. All persistence entities of this application * should inherit from this class. It is using JPA annotations at the getters what has several advantages but also * implies that you have to annotate transient getter methods with the {@link Transient} annotation. @@ -16,61 +16,64 @@ @MappedSuperclass public abstract class ApplicationPersistenceEntity { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; - @Id - @GeneratedValue(strategy = GenerationType.AUTO) - private Long id; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; - private Integer modificationCounter; + @Version + private Integer modificationCounter; - public ApplicationPersistenceEntity() { + /** + * The constructor. + */ + public ApplicationPersistenceEntity() { - super(); - } + super(); + } - public Long getId() { + public Long getId() { - return this.id; - } + return this.id; + } - public void setId(Long id) { + public void setId(Long id) { - this.id = id; - } + this.id = id; + } - @Version - public Integer getModificationCounter() { + public Integer getModificationCounter() { - return this.modificationCounter; - } + return this.modificationCounter; + } - public void setModificationCounter(Integer version) { + public void setModificationCounter(Integer version) { - this.modificationCounter = version; - } + this.modificationCounter = version; + } - @Override - public String toString() { + @Override + public String toString() { - StringBuilder buffer = new StringBuilder(); - toString(buffer); - return buffer.toString(); - } + StringBuilder buffer = new StringBuilder(); + toString(buffer); + return buffer.toString(); + } + + /** + * Method to extend {@link #toString()} logic. + * + * @param buffer is the {@link StringBuilder} where to {@link StringBuilder#append(Object) append} the string + * representation. + */ + protected void toString(StringBuilder buffer) { - /** - * Method to extend {@link #toString()} logic. - * - * @param buffer is the {@link StringBuilder} where to {@link StringBuilder#append(Object) append} the string - * representation. - */ - protected void toString(StringBuilder buffer) { - - buffer.append(getClass().getSimpleName()); - if (this.id != null) { - buffer.append("[id="); - buffer.append(this.id); - buffer.append("]"); - } + buffer.append(getClass().getSimpleName()); + if (this.id != null) { + buffer.append("[id="); + buffer.append(this.id); + buffer.append("]"); } + } } diff --git a/src/main/java/com/devonfw/quarkus/ordermanagement/domain/model/ItemEntity.java b/src/main/java/com/devonfw/quarkus/ordermanagement/domain/model/ItemEntity.java index 547b722..40d50ee 100644 --- a/src/main/java/com/devonfw/quarkus/ordermanagement/domain/model/ItemEntity.java +++ b/src/main/java/com/devonfw/quarkus/ordermanagement/domain/model/ItemEntity.java @@ -1,16 +1,18 @@ package com.devonfw.quarkus.ordermanagement.domain.model; -import com.devonfw.quarkus.general.domain.model.ApplicationPersistenceEntity; -import lombok.Getter; -import lombok.Setter; +import java.math.BigDecimal; +import java.time.Instant; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; -import java.math.BigDecimal; -import java.time.Instant; + +import com.devonfw.quarkus.general.domain.model.ApplicationPersistenceEntity; + +import lombok.Getter; +import lombok.Setter; @Getter @Setter @@ -18,15 +20,15 @@ @Table(name = "ITEM") public class ItemEntity extends ApplicationPersistenceEntity { - private String title; + private String title; - private BigDecimal price; + private BigDecimal price; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "productorder", referencedColumnName = "id") - private OrderEntity productorder; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "productorder", referencedColumnName = "id") + private OrderEntity productorder; - private Instant creationDate; + private Instant creationDate; - private Long productId; + private Long productId; } diff --git a/src/main/java/com/devonfw/quarkus/ordermanagement/logic/UcManageOrder.java b/src/main/java/com/devonfw/quarkus/ordermanagement/logic/UcManageOrder.java index 442bd29..e4f6d3a 100644 --- a/src/main/java/com/devonfw/quarkus/ordermanagement/logic/UcManageOrder.java +++ b/src/main/java/com/devonfw/quarkus/ordermanagement/logic/UcManageOrder.java @@ -14,7 +14,7 @@ import org.eclipse.microprofile.rest.client.inject.RestClient; -import com.devonfw.quarkus.general.restclient.product.ProductsRestClient; +import com.devonfw.quarkus.general.restclient.product.ProductRestClient; import com.devonfw.quarkus.general.restclient.product.models.ProductDto; import com.devonfw.quarkus.ordermanagement.domain.model.ItemEntity; import com.devonfw.quarkus.ordermanagement.domain.model.OrderEntity; @@ -36,7 +36,7 @@ public class UcManageOrder { @Inject @RestClient - ProductsRestClient productsRestClient; + ProductRestClient productsRestClient; public void saveOrder(NewOrderDto dto) { @@ -48,7 +48,7 @@ public void saveOrder(NewOrderDto dto) { List listItems = new ArrayList<>(); BigDecimal totalPrice = new BigDecimal(0.0); for (Long id : dto.getOrderedProductIds()) { - Response response = this.productsRestClient.getProductById(String.valueOf(id)); + Response response = this.productsRestClient.productV1IdGet(String.valueOf(id)); ProductDto productDto = response.readEntity(ProductDto.class); ItemEntity itemEntity = new ItemEntity(); itemEntity.setTitle(productDto.title); diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index a04ae32..aea4785 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -17,9 +17,10 @@ quarkus.datasource.password=demo %dev.quarkus.log.console.format=%d{HH:mm:ss} %-5p traceId=%X{traceId}, parentId=%X{parentId}, spanId=%X{spanId}, sampled=%X{sampled} [%c{2.}] (%t) %s%e%n # TEST profile -%test.quarkus.datasource.password=demo +%test.quarkus.datasource.jdbc.driver=org.testcontainers.jdbc.ContainerDatabaseDriver +%test.quarkus.datasource.jdbc.url=jdbc:tc:postgresql:11.5://demo_db %test.quarkus.datasource.username=demo +%test.quarkus.datasource.password=demo %test.quarkus.hibernate-orm.database.generation=drop-and-create -%test.quarkus.hibernate-orm.log.sql=true - +ryuk.container.image=testcontainersofficial/ryuk diff --git a/src/main/resources/product-service-openapi.yaml b/src/main/resources/product-service-openapi.yaml index ad3b775..1625262 100644 --- a/src/main/resources/product-service-openapi.yaml +++ b/src/main/resources/product-service-openapi.yaml @@ -11,227 +11,39 @@ tags: - name: product description: Product API. paths: - /products: + /product/v1: get: - description: "Returns list of Products matching given criteria, uses pagination" - operationId: Get Products - parameters: - - name: page - in: query - schema: - format: int32 - default: 0 - type: integer - - name: price - in: query - schema: - type: number - - name: priceMax - in: query - schema: - type: number - - name: priceMin - in: query - schema: - type: number - - name: size - in: query - schema: - format: int32 - default: 10 - type: integer - - name: title - in: query - schema: - type: string responses: "200": description: OK content: application/json: schema: - $ref: '#/components/schemas/PagedProductResponse' - "500": {} + $ref: '#/components/schemas/PageProductDto' post: - description: Stores new Product in DB - operationId: createNewProduct requestBody: content: application/json: schema: - $ref: '#/components/schemas/NewProductDto' - responses: - "201": - description: "OK, New Product created" - content: - application/json: - schema: - $ref: '#/components/schemas/NewProductDto' - "400": - description: "Client side error, invalid request" - "500": {} - /products/criteriaApi: - get: - parameters: - - name: page - in: query - schema: - format: int32 - default: 0 - type: integer - - name: price - in: query - schema: - type: number - - name: priceMax - in: query - schema: - type: number - - name: priceMin - in: query - schema: - type: number - - name: size - in: query - schema: - format: int32 - default: 10 - type: integer - - name: title - in: query - schema: - type: string + $ref: '#/components/schemas/ProductDto' responses: "200": description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/PageImplProductDto' - /products/nativeQuery: - get: - parameters: - - name: page - in: query - schema: - format: int32 - default: 0 - type: integer - - name: price - in: query - schema: - type: number - - name: priceMax - in: query - schema: - type: number - - name: priceMin - in: query - schema: - type: number - - name: size - in: query - schema: - format: int32 - default: 10 - type: integer - - name: title - in: query - schema: - type: string - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/PageImplProductDto' - /products/ordered: - get: - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/PageImplProductDto' - /products/query: - get: - parameters: - - name: page - in: query - schema: - format: int32 - default: 0 - type: integer - - name: price - in: query - schema: - type: number - - name: priceMax - in: query - schema: - type: number - - name: priceMin - in: query - schema: - type: number - - name: size - in: query - schema: - format: int32 - default: 10 - type: integer - - name: title - in: query - schema: - type: string - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/PageImplProductDto' - /products/queryDsl: - get: - parameters: - - name: page - in: query - schema: - format: int32 - default: 0 - type: integer - - name: price - in: query - schema: - type: number - - name: priceMax - in: query - schema: - type: number - - name: priceMin - in: query - schema: - type: number - - name: size - in: query - schema: - format: int32 - default: 10 - type: integer - - name: title - in: query - schema: - type: string + /product/v1/search: + post: + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ProductSearchCriteriaDto' responses: "200": description: OK content: application/json: schema: - $ref: '#/components/schemas/PageImplProductDto' - /products/title/{title}: + $ref: '#/components/schemas/PageProductDto' + /product/v1/title/{title}: get: parameters: - name: title @@ -246,10 +58,8 @@ paths: application/json: schema: $ref: '#/components/schemas/ProductDto' - /products/{id}: + /product/v1/{id}: get: - description: Returns Product with given id - operationId: getProductById parameters: - name: id in: path @@ -264,12 +74,7 @@ paths: application/json: schema: $ref: '#/components/schemas/ProductDto' - "404": - description: Product not found - "500": {} delete: - description: Deletes the Product with given id - operationId: deleteProductById parameters: - name: id in: path @@ -280,18 +85,21 @@ paths: responses: "200": description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/ProductDto' - "404": - description: Product not found - "500": {} components: schemas: - NewProductDto: + PageProductDto: + type: array + items: + $ref: '#/components/schemas/ProductDto' + ProductDto: type: object properties: + id: + format: int64 + type: integer + modificationCounter: + format: int32 + type: integer description: description: Product description maxLength: 500 @@ -306,38 +114,31 @@ components: minLength: 3 type: string nullable: false - PageImplProductDto: - type: array - items: - $ref: '#/components/schemas/ProductDto' - PagedProductResponse: + ProductSearchCriteriaDto: type: object properties: - number: + determineTotal: + description: determine total + type: boolean + pageNumber: format: int32 + description: Page Number + default: "0" type: integer - size: + pageSize: format: int32 - type: integer - stream: - type: array - items: - $ref: '#/components/schemas/ProductDto' - totalElements: - format: int64 - type: integer - totalPages: - format: int64 - type: integer - ProductDto: - type: object - properties: - description: - type: string - id: - format: int64 + description: Page Size + default: "10" type: integer price: + description: Product price + type: number + priceMax: + description: Product Max price + type: number + priceMin: + description: Product Min price type: number title: + description: Product title type: string \ No newline at end of file diff --git a/src/test/java/com/devonfw/quarkus/ordermanagement/rest/v1/OrderRestServiceTest.java b/src/test/java/com/devonfw/quarkus/ordermanagement/rest/v1/OrderRestServiceTest.java index 31ea83d..8202dd2 100644 --- a/src/test/java/com/devonfw/quarkus/ordermanagement/rest/v1/OrderRestServiceTest.java +++ b/src/test/java/com/devonfw/quarkus/ordermanagement/rest/v1/OrderRestServiceTest.java @@ -11,16 +11,19 @@ import java.util.List; import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; import org.eclipse.microprofile.rest.client.inject.RestClient; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.MethodOrderer.OrderAnnotation; +import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; +import org.junit.jupiter.api.TestInstance.Lifecycle; +import org.junit.jupiter.api.TestMethodOrder; import org.mockito.Mockito; import org.springframework.data.domain.PageRequest; -import org.tkit.quarkus.test.WithDBData; -import org.tkit.quarkus.test.docker.DockerComposeTestResource; -import com.devonfw.quarkus.general.restclient.product.ProductsRestClient; +import com.devonfw.quarkus.general.restclient.product.ProductRestClient; import com.devonfw.quarkus.general.restclient.product.models.ProductDto; import com.devonfw.quarkus.ordermanagement.rest.v1.model.NewOrderDto; import com.devonfw.quarkus.ordermanagement.rest.v1.model.OrderSearchCriteriaDto; @@ -28,23 +31,47 @@ import io.quarkus.test.common.QuarkusTestResource; import io.quarkus.test.junit.QuarkusTest; import io.quarkus.test.junit.mockito.InjectMock; +import io.restassured.response.Response; -/** - * Before you run this test, tkit-test extension starts docker containers from resources/docker-compose.yaml. We get a - * real postgresdb for our tests which will be stopped after tests. No manual test setup is needed. - */ @QuarkusTest -@QuarkusTestResource(DockerComposeTestResource.class) +@QuarkusTestResource(PostgresResource.class) +@TestMethodOrder(OrderAnnotation.class) +@TestInstance(Lifecycle.PER_CLASS) public class OrderRestServiceTest { private static String BASE_PATH = "/ordermanagement/v1/order"; @InjectMock @RestClient - private ProductsRestClient productsRestClient; + private ProductRestClient productRestClient; + + @BeforeAll + private void setup() { + + mockRestClient(); + } + + @Test + @Order(1) + public void createNewOrder() { + + NewOrderDto order = new NewOrderDto(); + order.setPaymentDate(Instant.now()); + order.setOrderedProductIds(Arrays.asList(10L, 20L)); + + given().when().body(order).contentType(MediaType.APPLICATION_JSON).post(BASE_PATH).then().statusCode(204); + + // get items of created order + Response response_items = given().when().contentType(MediaType.APPLICATION_JSON).get(BASE_PATH + "/item/1").then() + .statusCode(200).extract().response(); + List> items = response_items.jsonPath().getList("content"); + assertEquals(items.size(), 2); + assertEquals(items.get(0).get("title"), "new product 1"); + assertEquals(items.get(1).get("title"), "new product 2"); + } @Test - @WithDBData(value = { "data/order.xls" }, deleteBeforeInsert = true, deleteAfterTest = true) + @Order(2) public void getOrderByCriteria() { OrderSearchCriteriaDto cto = new OrderSearchCriteriaDto(); @@ -52,27 +79,28 @@ public void getOrderByCriteria() { cto.setPriceMax(BigDecimal.valueOf(100)); cto.setPageable(PageRequest.of(0, 10)); - given().when().contentType(MediaType.APPLICATION_JSON).body(cto).post(BASE_PATH + "/search").then().statusCode(200) - .body("totalElements", equalTo(2)); + io.restassured.response.Response r = given().when().contentType(MediaType.APPLICATION_JSON).body(cto) + .post(BASE_PATH + "/search"); + + r.then().statusCode(200).body("totalElements", equalTo(1)); cto.setPriceMax(BigDecimal.valueOf(20)); given().when().contentType(MediaType.APPLICATION_JSON).body(cto).post(BASE_PATH + "/search").then().statusCode(200) - .body("totalElements", equalTo(1)); + .body("totalElements", equalTo(0)); } @Test - @WithDBData(value = { "data/order.xls" }, deleteBeforeInsert = true, deleteAfterTest = true) + @Order(3) public void getOrderById() { given().when().contentType(MediaType.APPLICATION_JSON).get(BASE_PATH + "/1").then().statusCode(200) - .body("price", equalTo(38.5F)).body("status", equalTo("OPEN")); + .body("price", equalTo(28.5F)).body("status", equalTo("OPEN")); - given().when().contentType(MediaType.APPLICATION_JSON).get(BASE_PATH + "/2").then().statusCode(200) - .body("price", equalTo(10.0F)).body("status", equalTo("OPEN")); + given().when().contentType(MediaType.APPLICATION_JSON).get(BASE_PATH + "/2").then().statusCode(204); } @Test - @WithDBData(value = { "data/order.xls" }, deleteBeforeInsert = true, deleteAfterTest = true) + @Order(4) public void editOrder() { given().when().contentType(MediaType.APPLICATION_JSON).put(BASE_PATH + "/edit-status/1/paid").then() @@ -86,30 +114,12 @@ public void editOrder() { } @Test - public void createNewOrder() { - - mockRestClient(); + @Order(5) + public void deleteOrder() { - NewOrderDto order = new NewOrderDto(); - order.setPaymentDate(Instant.now()); - order.setOrderedProductIds(Arrays.asList(10L, 20L)); - - given().when().body(order).contentType(MediaType.APPLICATION_JSON).post(BASE_PATH).then().statusCode(204); - - // re-get the created order - given().when().contentType(MediaType.APPLICATION_JSON).get(BASE_PATH + "/1").then().statusCode(200).body("price", - equalTo(28.5F)); - - // get items of created order - io.restassured.response.Response response_items = given().when().contentType(MediaType.APPLICATION_JSON) - .get(BASE_PATH + "/item/1").then().statusCode(200).extract().response(); - List> items = response_items.jsonPath().getList("content"); - assertEquals(items.size(), 2); - assertEquals(items.get(0).get("title"), "new product 1"); - assertEquals(items.get(1).get("title"), "new product 2"); - - // deleting created order to reset db state given().when().contentType(MediaType.APPLICATION_JSON).delete(BASE_PATH + "/1").then().statusCode(204); + + given().when().contentType(MediaType.APPLICATION_JSON).get(BASE_PATH + "/1").then().statusCode(204); } private void mockRestClient() { @@ -126,7 +136,9 @@ private void mockRestClient() { product_2.setTitle("new product 2"); product_2.setDescription("description of product 2"); - Mockito.when(this.productsRestClient.getProductById("10")).thenReturn(Response.ok().entity(product_1).build()); - Mockito.when(this.productsRestClient.getProductById("20")).thenReturn(Response.ok().entity(product_2).build()); + Mockito.when(this.productRestClient.productV1IdGet("10")) + .thenReturn(javax.ws.rs.core.Response.ok().entity(product_1).build()); + Mockito.when(this.productRestClient.productV1IdGet("20")) + .thenReturn(javax.ws.rs.core.Response.ok().entity(product_2).build()); } } diff --git a/src/test/java/com/devonfw/quarkus/ordermanagement/rest/v1/PostgresResource.java b/src/test/java/com/devonfw/quarkus/ordermanagement/rest/v1/PostgresResource.java new file mode 100644 index 0000000..20853a5 --- /dev/null +++ b/src/test/java/com/devonfw/quarkus/ordermanagement/rest/v1/PostgresResource.java @@ -0,0 +1,27 @@ +package com.devonfw.quarkus.ordermanagement.rest.v1; + +import java.util.Collections; +import java.util.Map; + +import org.testcontainers.containers.PostgreSQLContainer; + +import io.quarkus.test.common.QuarkusTestResourceLifecycleManager; + +public class PostgresResource implements QuarkusTestResourceLifecycleManager { + + static PostgreSQLContainer database = new PostgreSQLContainer<>("postgres:11.5").withDatabaseName("demo_db") + .withUsername("demo").withPassword("demo"); + + @Override + public Map start() { + + database.start(); + return Collections.singletonMap("quarkus.datasource.url", database.getJdbcUrl()); + } + + @Override + public void stop() { + + database.stop(); + } +} \ No newline at end of file diff --git a/src/test/resources/data/order.xls b/src/test/resources/data/order.xls deleted file mode 100644 index 229536f4f66794f8f82b839ab38b0f8b19aa0bd0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36864 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 AlK=n! diff --git a/src/test/resources/docker-compose.yml b/src/test/resources/docker-compose.yml deleted file mode 100644 index f6c41fc..0000000 --- a/src/test/resources/docker-compose.yml +++ /dev/null @@ -1,31 +0,0 @@ -version: '3.9' -services: - demo-db: - container_name: demo-db - image: postgres:latest - environment: - POSTGRES_DB: "demo" - POSTGRES_USER: "demo" - POSTGRES_PASSWORD: "demo" - POSTGRES_HOST_AUTH_METHOD: trust - labels: - - "test.priority=90" - - "test.Wait.forLogMessage.regex=.*database system is ready to accept connections.*\\s" - - "test.Wait.forLogMessage.times=2" - - "test.log=true" - # we can modify Quarkus test profile apps using labels in form `test.property.` - - "test.property.quarkus.datasource.jdbc.url=jdbc:postgresql://$${host:demo-db}:$${port:demo-db:5432}/demo?sslmode=disable" - # simple DB import app, that allows import of data from Excel files - dbimport: - container_name: dbimport - image: quay.io/tkit/dbimport:master - environment: - DB_URL: "jdbc:postgresql://demo-db:5432/demo?sslmode=disable" - DB_USERNAME: "demo" - DB_PASSWORD: "demo" - labels: - - "test.Wait.forLogMessage.regex=.*Installed features:.*" - - "test.Wait.forLogMessage.times=1" - - "test.log=true" - - "test.property.tkit.test.dbimport.url=$${url:dbimport:8080}" - From eeb7eaa762786bfba9de4606a0051cbf3923d0d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20G=C3=BCnther?= Date: Tue, 4 Jan 2022 14:33:56 +0100 Subject: [PATCH 2/4] replaced tkit restclient --- pom.xml | 31 +++++++------------ .../ordermanagement/logic/UcManageOrder.java | 14 ++++----- .../restclient/product/ProductRestClient.java | 15 +++++++++ .../rest/v1/OrderRestServiceTest.java | 10 +++--- 4 files changed, 36 insertions(+), 34 deletions(-) create mode 100644 src/main/java/com/devonfw/quarkus/ordermanagement/restclient/product/ProductRestClient.java diff --git a/pom.xml b/pom.xml index 13ba4f9..e5f612c 100644 --- a/pom.xml +++ b/pom.xml @@ -195,34 +195,25 @@ - org.tkit.maven - tkit-mp-restclient-plugin - 0.11.0 + org.openapitools + openapi-generator-maven-plugin + 5.1.0 - test - codegen + generate src/main/resources/product-service-openapi.yaml - ${project.build.directory}/generated-sources/ - com.devonfw.quarkus.general.restclient.product - com.devonfw.quarkus.general.restclient.product.models - false - false - LOMBOK - JACKSON - - org.eclipse.microprofile.rest.client.inject.RegisterRestClient(configKey="product-service-key") - javax.enterprise.context.ApplicationScoped - - - lombok.ToString - io.quarkus.runtime.annotations.RegisterForReflection - + jaxrs-spec + com.devonfw.quarkus.ordermanagement.restclient.product + com.devonfw.quarkus.ordermanagement.restclient.product.models restclient + false + true + true + false diff --git a/src/main/java/com/devonfw/quarkus/ordermanagement/logic/UcManageOrder.java b/src/main/java/com/devonfw/quarkus/ordermanagement/logic/UcManageOrder.java index e4f6d3a..4ffb55c 100644 --- a/src/main/java/com/devonfw/quarkus/ordermanagement/logic/UcManageOrder.java +++ b/src/main/java/com/devonfw/quarkus/ordermanagement/logic/UcManageOrder.java @@ -10,18 +10,17 @@ import javax.inject.Inject; import javax.inject.Named; import javax.transaction.Transactional; -import javax.ws.rs.core.Response; import org.eclipse.microprofile.rest.client.inject.RestClient; -import com.devonfw.quarkus.general.restclient.product.ProductRestClient; -import com.devonfw.quarkus.general.restclient.product.models.ProductDto; import com.devonfw.quarkus.ordermanagement.domain.model.ItemEntity; import com.devonfw.quarkus.ordermanagement.domain.model.OrderEntity; import com.devonfw.quarkus.ordermanagement.domain.model.OrderStatus; import com.devonfw.quarkus.ordermanagement.domain.repo.ItemRepository; import com.devonfw.quarkus.ordermanagement.domain.repo.OrderRepository; import com.devonfw.quarkus.ordermanagement.rest.v1.model.NewOrderDto; +import com.devonfw.quarkus.ordermanagement.restclient.product.ProductRestClient; +import com.devonfw.quarkus.ordermanagement.restclient.product.models.ProductDto; @Named @Transactional @@ -48,13 +47,12 @@ public void saveOrder(NewOrderDto dto) { List listItems = new ArrayList<>(); BigDecimal totalPrice = new BigDecimal(0.0); for (Long id : dto.getOrderedProductIds()) { - Response response = this.productsRestClient.productV1IdGet(String.valueOf(id)); - ProductDto productDto = response.readEntity(ProductDto.class); + ProductDto productDto = this.productsRestClient.productV1IdGet(String.valueOf(id)); ItemEntity itemEntity = new ItemEntity(); - itemEntity.setTitle(productDto.title); - itemEntity.setProductId(productDto.id); + itemEntity.setTitle(productDto.getTitle()); + itemEntity.setProductId(productDto.getId()); itemEntity.setCreationDate(Instant.now()); - itemEntity.setPrice(productDto.price); + itemEntity.setPrice(productDto.getPrice()); totalPrice = totalPrice.add(itemEntity.getPrice()); listItems.add(itemEntity); } diff --git a/src/main/java/com/devonfw/quarkus/ordermanagement/restclient/product/ProductRestClient.java b/src/main/java/com/devonfw/quarkus/ordermanagement/restclient/product/ProductRestClient.java new file mode 100644 index 0000000..3816c9a --- /dev/null +++ b/src/main/java/com/devonfw/quarkus/ordermanagement/restclient/product/ProductRestClient.java @@ -0,0 +1,15 @@ +package com.devonfw.quarkus.ordermanagement.restclient.product; + +import javax.enterprise.context.ApplicationScoped; +import javax.ws.rs.Path; + +import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; + +import com.devonfw.quarkus.ordermanagement.restclient.product.DefaultApi; + +@Path("/product/v1") +@RegisterRestClient(configKey = "product-service-key") +@ApplicationScoped +public interface ProductRestClient extends DefaultApi { + +} diff --git a/src/test/java/com/devonfw/quarkus/ordermanagement/rest/v1/OrderRestServiceTest.java b/src/test/java/com/devonfw/quarkus/ordermanagement/rest/v1/OrderRestServiceTest.java index 8202dd2..8da2998 100644 --- a/src/test/java/com/devonfw/quarkus/ordermanagement/rest/v1/OrderRestServiceTest.java +++ b/src/test/java/com/devonfw/quarkus/ordermanagement/rest/v1/OrderRestServiceTest.java @@ -23,10 +23,10 @@ import org.mockito.Mockito; import org.springframework.data.domain.PageRequest; -import com.devonfw.quarkus.general.restclient.product.ProductRestClient; -import com.devonfw.quarkus.general.restclient.product.models.ProductDto; import com.devonfw.quarkus.ordermanagement.rest.v1.model.NewOrderDto; import com.devonfw.quarkus.ordermanagement.rest.v1.model.OrderSearchCriteriaDto; +import com.devonfw.quarkus.ordermanagement.restclient.product.ProductRestClient; +import com.devonfw.quarkus.ordermanagement.restclient.product.models.ProductDto; import io.quarkus.test.common.QuarkusTestResource; import io.quarkus.test.junit.QuarkusTest; @@ -136,9 +136,7 @@ private void mockRestClient() { product_2.setTitle("new product 2"); product_2.setDescription("description of product 2"); - Mockito.when(this.productRestClient.productV1IdGet("10")) - .thenReturn(javax.ws.rs.core.Response.ok().entity(product_1).build()); - Mockito.when(this.productRestClient.productV1IdGet("20")) - .thenReturn(javax.ws.rs.core.Response.ok().entity(product_2).build()); + Mockito.when(this.productRestClient.productV1IdGet("10")).thenReturn(product_1); + Mockito.when(this.productRestClient.productV1IdGet("20")).thenReturn(product_2); } } From 922cd4275ad6b04ec37c770eb5ffbc410900c4fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20G=C3=BCnther?= Date: Tue, 4 Jan 2022 14:49:36 +0100 Subject: [PATCH 3/4] changed openapi yaml file --- src/main/resources/product-service-openapi.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/product-service-openapi.yaml b/src/main/resources/product-service-openapi.yaml index 1625262..ffbd225 100644 --- a/src/main/resources/product-service-openapi.yaml +++ b/src/main/resources/product-service-openapi.yaml @@ -1,5 +1,5 @@ # OpenAPI specification of devon4quarkus product service https://github.com/devonfw-sample/devon4quarkus-reference -# Used by tkit-mp-restclient-plugin to generate the corresponding rest client +# Used by openapi-generator-maven-plugin to generate the corresponding API for the rest client --- openapi: 3.0.3 info: From 0326627c3cb565c53fac592e917d77ff08c7efcc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20G=C3=BCnther?= Date: Wed, 5 Jan 2022 10:35:09 +0100 Subject: [PATCH 4/4] changed javadoc --- .../general/domain/model/ApplicationPersistenceEntity.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/devonfw/quarkus/general/domain/model/ApplicationPersistenceEntity.java b/src/main/java/com/devonfw/quarkus/general/domain/model/ApplicationPersistenceEntity.java index 51e7550..5a3389f 100644 --- a/src/main/java/com/devonfw/quarkus/general/domain/model/ApplicationPersistenceEntity.java +++ b/src/main/java/com/devonfw/quarkus/general/domain/model/ApplicationPersistenceEntity.java @@ -4,14 +4,12 @@ import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.MappedSuperclass; -import javax.persistence.Transient; import javax.persistence.Version; /** * Abstract base class for all {@link PersistenceEntity persistence entities} with an {@link #getId() id} and a * {@link #getModificationCounter() modificationCounter} (version) field. All persistence entities of this application - * should inherit from this class. It is using JPA annotations at the getters what has several advantages but also - * implies that you have to annotate transient getter methods with the {@link Transient} annotation. + * should inherit from this class. */ @MappedSuperclass public abstract class ApplicationPersistenceEntity { @@ -19,7 +17,7 @@ public abstract class ApplicationPersistenceEntity { private static final long serialVersionUID = 1L; @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) + @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @Version