From ac6ac335b48f383b4e8a976729fe3ef522322d1d Mon Sep 17 00:00:00 2001 From: charlesdccti Date: Fri, 9 Aug 2019 01:25:51 -0300 Subject: [PATCH 1/6] add database h2 --- .vscode/launch.json | 11 +++ .vscode/settings.json | 3 + pom.xml | 12 ++++ src/main/resources/application.properties | 12 ++-- target/classes/META-INF/MANIFEST.MF | 9 +-- .../maven/com.produtos/apirest/pom.properties | 7 -- .../maven/com.produtos/apirest/pom.xml | 67 ------------------- target/classes/application.properties | 12 ++-- 8 files changed, 39 insertions(+), 94 deletions(-) create mode 100644 .vscode/launch.json create mode 100644 .vscode/settings.json delete mode 100644 target/classes/META-INF/maven/com.produtos/apirest/pom.properties delete mode 100644 target/classes/META-INF/maven/com.produtos/apirest/pom.xml diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..2894530 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,11 @@ +{ + "configurations": [ + { + "type": "java", + "name": "CodeLens (Launch) - ApirestApplication", + "request": "launch", + "mainClass": "com.produtos.apirest.ApirestApplication", + "projectName": "apirest" + } + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..e0f15db --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "java.configuration.updateBuildConfiguration": "automatic" +} \ No newline at end of file diff --git a/pom.xml b/pom.xml index 2541139..c0e7f11 100644 --- a/pom.xml +++ b/pom.xml @@ -19,10 +19,22 @@ + org.springframework.boot spring-boot-starter-data-jpa + + com.h2database + h2 + + + + + org.projectlombok + lombok + provided + org.springframework.boot spring-boot-starter-web diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 1f89ed9..0512320 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,8 +1,8 @@ spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true -#Banco local - localhost -spring.datasource.url= jdbc:postgresql://localhost:5432/produtos-apirest -spring.datasource.username=postgres -spring.datasource.password=postgres -#spring.datasource.password=123 -spring.jpa.hibernate.ddl-auto=update \ No newline at end of file +# #Banco local - localhost +# spring.datasource.url= jdbc:postgresql://localhost:5432/produtos-apirest +# spring.datasource.username=postgres +# spring.datasource.password=postgres +# #spring.datasource.password=123 +# spring.jpa.hibernate.ddl-auto=update \ No newline at end of file diff --git a/target/classes/META-INF/MANIFEST.MF b/target/classes/META-INF/MANIFEST.MF index 515664c..254272e 100644 --- a/target/classes/META-INF/MANIFEST.MF +++ b/target/classes/META-INF/MANIFEST.MF @@ -1,10 +1,3 @@ Manifest-Version: 1.0 -Implementation-Title: apirest -Implementation-Version: 0.0.1-SNAPSHOT -Built-By: charles -Implementation-Vendor-Id: com.produtos -Build-Jdk: 1.8.0_20 -Implementation-URL: https://projects.spring.io/spring-boot/#/spring-bo - ot-starter-parent/apirest -Created-By: Maven Integration for Eclipse +Class-Path: diff --git a/target/classes/META-INF/maven/com.produtos/apirest/pom.properties b/target/classes/META-INF/maven/com.produtos/apirest/pom.properties deleted file mode 100644 index be562b4..0000000 --- a/target/classes/META-INF/maven/com.produtos/apirest/pom.properties +++ /dev/null @@ -1,7 +0,0 @@ -#Generated by Maven Integration for Eclipse -#Sun Jan 20 20:35:58 BRT 2019 -version=0.0.1-SNAPSHOT -groupId=com.produtos -m2e.projectName=apirest -m2e.projectLocation=/Users/charles/projto_quebec/workspace/apirest -artifactId=apirest diff --git a/target/classes/META-INF/maven/com.produtos/apirest/pom.xml b/target/classes/META-INF/maven/com.produtos/apirest/pom.xml deleted file mode 100644 index 2541139..0000000 --- a/target/classes/META-INF/maven/com.produtos/apirest/pom.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 2.1.2.RELEASE - - - com.produtos - apirest - 0.0.1-SNAPSHOT - apirest - Demo project for Spring Boot - - - 1.8 - - - - - org.springframework.boot - spring-boot-starter-data-jpa - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework.boot - spring-boot-devtools - runtime - - - org.postgresql - postgresql - 42.2.2 - - - org.springframework.boot - spring-boot-starter-test - test - - - io.springfox - springfox-swagger2 - 2.7.0 - - - io.springfox - springfox-swagger-ui - 2.7.0 - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - diff --git a/target/classes/application.properties b/target/classes/application.properties index beab2de..0512320 100644 --- a/target/classes/application.properties +++ b/target/classes/application.properties @@ -1,8 +1,8 @@ spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true -#Banco local - localhost -spring.datasource.url= jdbc:postgresql://localhost:5432/produtos-apirest -spring.datasource.username=postgres -spring.datasource.password=123 -spring.jpa.hibernate.ddl-auto=update - \ No newline at end of file +# #Banco local - localhost +# spring.datasource.url= jdbc:postgresql://localhost:5432/produtos-apirest +# spring.datasource.username=postgres +# spring.datasource.password=postgres +# #spring.datasource.password=123 +# spring.jpa.hibernate.ddl-auto=update \ No newline at end of file From 9bbe76c6b19fb392f1edf0f3d4604ed81f39af24 Mon Sep 17 00:00:00 2001 From: Charles Ferreira Date: Sat, 10 Aug 2019 01:05:33 -0300 Subject: [PATCH 2/6] add serviceProduto --- src/main/java/com/produtos/.DS_Store | Bin 0 -> 8196 bytes .../com/produtos/apirest/models/Produto.java | 2 +- .../apirest/resources/ProdutoResource.java | 14 ++++--- .../apirest/service/ProdutoService.java | 38 ++++++++++++++++++ src/main/resources/application.properties | 14 ++++++- src/main/resources/data.sql | 4 ++ target/classes/application.properties | 14 ++++++- .../com/produtos/apirest/models/Produto.class | Bin 1848 -> 1845 bytes .../apirest/resources/ProdutoResource.class | Bin 2588 -> 2451 bytes 9 files changed, 75 insertions(+), 11 deletions(-) create mode 100644 src/main/java/com/produtos/.DS_Store create mode 100644 src/main/java/com/produtos/apirest/service/ProdutoService.java create mode 100644 src/main/resources/data.sql diff --git a/src/main/java/com/produtos/.DS_Store b/src/main/java/com/produtos/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..f84e6ce118c752a8808672b4ec9c7758985bf3da GIT binary patch literal 8196 zcmeHMTWl3Y824n0yTw*sXgEr@t}1Ixt{dY~9a>FRd(u)F6J ztR$60qsCyoBqpNK5Yz`ucp@>rm;hc9jhEOMHEK+J^U0X_V2qc4X0`+7HBM>7HBM>9-e?WlFY>~7n&V6N#%NT(efm;#*@qS2A7BU^lF(u`zg9>>CAStc@ zGEtrG0Wu~P$#f*gl$4>=r@B306pGOm164TLQ^K8OI+9~bs&GIR4j7G$(G3OV=oFWd z?tp0}<1$7dMqn}m;_;aQCKSL1|LXg@mm|xsxq@Q{VN=srSXN#!ZTbvNH)iU3rLG_9 z9r8wcLo+M}?WUh)3wv#g=S;uPw!)zdce@;3;%<+>(+s(PKsaYS&mjj@H*@=JK9Xf~ zJ3KcuZI}D9Kh?*T7mSBI+yj`W;jIsX!Yp_56kuFnwDiXqoZqETN_i& z>zYqArbb&@ni^B<*KIg)LesR`rCaw57Ehjf>Gavx-+1%lB^d=6y-A>2wXc+ysdgPC zPEhK|IRcWh7jFbfqI>%eBg^KLXi+_d(DvM5ANK>2SymO$;=A*nyW8i&-k0~B;;=N&!uz;a{Zq~fy z;yYJ1-L>i7&hgomRjhiBVeBU$-Ozr(=KkIhu_FU!kms&tyGQy;c3|fmo^j1#UX90f zeSG%(1vRy|ClXV+_7`*Z(V`t5XZ4yk&MK>B8+D00bap{IXwfWod6pQ-l9ohWqCwLR z2z`gosZ?rXSz?9GOf3`8LR1&4j5Rt7^vpxF*($WzSg$cl-|Lt;?kH7@u~B0?^uCfp zQzV4aF>P`tLv&uBnE`O&9b;fl&DWH zQ~NDps82VkmQJToEv%+9=RP<{PeTEY!_#mIo`KVF7S6*3co#l^kKt4J3_gc%;0O2# zeu3ZN5BL-QLJf7CiLWo_L^*6GAsZM=3t&3t2vk=Dhd#y|$^4M{`O|2YTGz&Usa-iMEfdtbu$@FV;T zzY*`IVHGYQ)-A*&F2bd_99Lo^uEGu2O8mQ<7}$l|up74%3p2P6`*8sGV;(tia0qSm ziGw8^!DIL+o|IgC0-wd_h>b508_(dm>$ulF!8#@Jt;yUg_4=;kxktz{!Pskq;?~Va zpj=I%M%@3qrvCna^Cue5AVwfY;9o-kD>{2S+o}7hUe#q}OHn>dStQ{%rlbs^LbwRM nypEH+@`oYSQ;{tl$uT9#Lg_#M5ODR6;Q0KH&wt6nTd(*V8|3|? literal 0 HcmV?d00001 diff --git a/src/main/java/com/produtos/apirest/models/Produto.java b/src/main/java/com/produtos/apirest/models/Produto.java index 9a17b56..ef26f09 100644 --- a/src/main/java/com/produtos/apirest/models/Produto.java +++ b/src/main/java/com/produtos/apirest/models/Produto.java @@ -15,7 +15,7 @@ * */ @Entity -@Table(name="TB_PRODUTO") +@Table(name="PRODUTO") public class Produto implements Serializable{ private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/produtos/apirest/resources/ProdutoResource.java b/src/main/java/com/produtos/apirest/resources/ProdutoResource.java index 1e4fc17..3b2bd94 100644 --- a/src/main/java/com/produtos/apirest/resources/ProdutoResource.java +++ b/src/main/java/com/produtos/apirest/resources/ProdutoResource.java @@ -20,6 +20,7 @@ import com.produtos.apirest.models.Produto; import com.produtos.apirest.repository.ProdutoRepository; +import com.produtos.apirest.service.ProdutoService; /** * @author charles * @@ -29,33 +30,34 @@ public class ProdutoResource { @Autowired - ProdutoRepository produtoRepository; + ProdutoService produtoService; + //ProdutoRepository produtoRepository; @GetMapping(value="/produtos", produces="application/json") public @ResponseBody List listaProdutos(){ - return produtoRepository.findAll(); + return produtoService.findAll(); } @GetMapping(value="/produto/{id}", produces="application/json") public @ResponseBody Produto listaProdutoUnico(@PathVariable(value="id") long id){ - return produtoRepository.findById(id); + return produtoService.findById(id); } @PostMapping(value="/produto", produces="application/json") public @ResponseBody Produto salvaProduto(@RequestBody @Valid Produto produto) { - return produtoRepository.save(produto); + return produtoService.save(produto); } @DeleteMapping("/produto") public void deletaProduto(@RequestBody @Valid Produto produto) { - produtoRepository.delete(produto); + produtoService.delete(produto); } @PutMapping("/produto") public @ResponseBody Produto atualizaProduto(@RequestBody @Valid Produto produto) { - return produtoRepository.save(produto); + return produtoService.save(produto); } diff --git a/src/main/java/com/produtos/apirest/service/ProdutoService.java b/src/main/java/com/produtos/apirest/service/ProdutoService.java new file mode 100644 index 0000000..e8aa9e6 --- /dev/null +++ b/src/main/java/com/produtos/apirest/service/ProdutoService.java @@ -0,0 +1,38 @@ +package com.produtos.apirest.service; + +import com.produtos.apirest.models.Produto; +import com.produtos.apirest.repository.ProdutoRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Service +@Transactional(readOnly = true) +public class ProdutoService { + + @Autowired + private ProdutoRepository produtoRepository; + + + + public List findAll() { + return produtoRepository.findAll(); + } + + public Produto findById(long id) { + Produto produto = produtoRepository.findById(id); + return produto; + } + + @Transactional(readOnly = false) + public Produto save(Produto entity) { + return produtoRepository.save(entity); + } + + @Transactional(readOnly = false) + public void delete(Produto entity) { + produtoRepository.delete(entity); + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 0512320..1ba1e5a 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,8 +1,18 @@ -spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true +# spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true # #Banco local - localhost # spring.datasource.url= jdbc:postgresql://localhost:5432/produtos-apirest # spring.datasource.username=postgres # spring.datasource.password=postgres # #spring.datasource.password=123 -# spring.jpa.hibernate.ddl-auto=update \ No newline at end of file +# spring.jpa.hibernate.ddl-auto=update + +# Enabling H2 Console +spring.h2.console.enabled=true + +spring.datasource.url=jdbc:h2:mem:testdb +spring.datasource.driverClassName=org.h2.Driver +spring.datasource.username=sa +spring.datasource.password= + +spring.jpa.database-platform=org.hibernate.dialect.H2Dialect \ No newline at end of file diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql new file mode 100644 index 0000000..691e7a4 --- /dev/null +++ b/src/main/resources/data.sql @@ -0,0 +1,4 @@ +INSERT INTO PRODUTO VALUES(1, 'CARRO', 2, 50000); +INSERT INTO PRODUTO VALUES(2, 'MOTO', 3, 10000); +INSERT INTO PRODUTO VALUES(3, 'CASA', 5, 99000); + diff --git a/target/classes/application.properties b/target/classes/application.properties index 0512320..1ba1e5a 100644 --- a/target/classes/application.properties +++ b/target/classes/application.properties @@ -1,8 +1,18 @@ -spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true +# spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true # #Banco local - localhost # spring.datasource.url= jdbc:postgresql://localhost:5432/produtos-apirest # spring.datasource.username=postgres # spring.datasource.password=postgres # #spring.datasource.password=123 -# spring.jpa.hibernate.ddl-auto=update \ No newline at end of file +# spring.jpa.hibernate.ddl-auto=update + +# Enabling H2 Console +spring.h2.console.enabled=true + +spring.datasource.url=jdbc:h2:mem:testdb +spring.datasource.driverClassName=org.h2.Driver +spring.datasource.username=sa +spring.datasource.password= + +spring.jpa.database-platform=org.hibernate.dialect.H2Dialect \ No newline at end of file diff --git a/target/classes/com/produtos/apirest/models/Produto.class b/target/classes/com/produtos/apirest/models/Produto.class index 88fc191e8bb7c65616f0f27de1ce6a482f817c5e..ee39f3ccfd8d3afab0782702136b2543e217cc85 100644 GIT binary patch delta 14 VcmdnNx0P?hI%Y=p&6}9pm;oq|1mpk! delta 17 YcmdnWw}WrPI%XEG5U2Rf>zUh_0XR4X+yDRo diff --git a/target/classes/com/produtos/apirest/resources/ProdutoResource.class b/target/classes/com/produtos/apirest/resources/ProdutoResource.class index 124ef67781c2adb7fb8db5525c5a99edf3383c9d..d3ae7900988c03393ffd5119101ac6d981dbdb7a 100644 GIT binary patch delta 582 zcmah^O-lk%6g^kd87J|xnKq#Y1=S#eOlqm6rMU?TTDA(EMGzQjLO-H~ylwr17K!1a zMbRp#U(&LEKy=^OCNt#0edm6hbMLvH6H)E;>){cAg<4PBj|9$J&BjHid1SY`r*)f< z6d!KGXphp=;jeE0=96YM#IdL#K`?tE{hvwk=6WV=aOI9uSQ6I#$RI_SX`gg$5%j!7 zWp&GsZR82whJ9vt>;ZW#qL|1iwPYH^4^Y?cu`opJjP1l2x0yi2~#~N6}jrvCD|Op8YibGlaWP^Z`cq|s;*~Qjvq%r1*d-_mpkh3WFk(t!&* UPTX}o$ORS7tL$a|7}UnzH>ccGasU7T delta 783 zcmb7BOD_Xa6#mZiF?5?a>nntB9V#C(9xt4xIL)cUh zRuVtQRwB+F(ljbTZqD5E`o8;}GotpQ&hzqq`v4$ zb3c{Y&8E`Fgx;8}`qRafvHHE~>im^74FR;MXeNYz1&BN4iL~nzTYx4cuFs8r3=r&@ z_@PM%w#O3j!?=-*@9h{Xn+bC(JKRy8QZYnmm5+%xMHhMdb4Zd+x-o@mf^*wUnpvjv z{zSKaeddS|HHv%Zyb%HM0bHFo@E6cTxa3HI&R?fh38IR9_h**~tFzH@*!TdN!~_cH zu$6&A7Rbj$+y)P-`DRb#)s@pJ&dR(l;h_Q|3LY`|{n?%p2EE9jBZ^^`GQ#*ukdLok zwk|dYaSdD>#TXn=+1EK5XRF@;We`S?bDB7+@SIM6X|P6M4HF8kxcE7@%aYdz7ylYL xd)XL&5HSPeOGFK`&6bF0U`AoD^!{-V(Gm&&*@J>PYoK{+6H>$i$BRWFOCJL{c{Tt5 From d9a7dce56d874486a000cc03e2174ee66f387f4a Mon Sep 17 00:00:00 2001 From: charlesdccti Date: Tue, 13 Aug 2019 18:36:49 -0300 Subject: [PATCH 3/6] Produto services --- pom.xml | 9 ++- .../com/produtos/apirest/models/Produto.java | 67 ++---------------- .../apirest/resources/ProdutoResource.java | 4 +- .../apirest/ProdutoRepositoryTest.java | 65 +++++++++++++++++ target/classes/META-INF/MANIFEST.MF | 13 +++- .../com/produtos/apirest/models/Produto.class | Bin 1845 -> 736 bytes .../apirest/resources/ProdutoResource.class | Bin 2451 -> 2451 bytes 7 files changed, 88 insertions(+), 70 deletions(-) create mode 100644 src/test/java/com/produtos/apirest/ProdutoRepositoryTest.java diff --git a/pom.xml b/pom.xml index c0e7f11..1b9f4ed 100644 --- a/pom.xml +++ b/pom.xml @@ -30,11 +30,14 @@ + - org.projectlombok - lombok - provided + org.projectlombok + lombok + 1.18.8 + provided + org.springframework.boot spring-boot-starter-web diff --git a/src/main/java/com/produtos/apirest/models/Produto.java b/src/main/java/com/produtos/apirest/models/Produto.java index ef26f09..136552f 100644 --- a/src/main/java/com/produtos/apirest/models/Produto.java +++ b/src/main/java/com/produtos/apirest/models/Produto.java @@ -1,88 +1,33 @@ package com.produtos.apirest.models; -import java.io.Serializable; import java.math.BigDecimal; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; -import javax.persistence.Table; import javax.validation.constraints.NotNull; +import lombok.Data; + /** * @author charles * */ -@Entity -@Table(name="PRODUTO") -public class Produto implements Serializable{ - - private static final long serialVersionUID = 1L; +//@Entity +@Data +public class Produto { + @Id @GeneratedValue(strategy=GenerationType.AUTO) private long id; - @NotNull private String nome; - @NotNull private BigDecimal quantidade; - @NotNull private BigDecimal valor; - - - - - - public long getId() { - return id; - } - - - public void setId(long id) { - this.id = id; - } - - - public String getNome() { - return nome; - } - - - public void setNome(String nome) { - this.nome = nome; - } - - - public BigDecimal getQuantidade() { - return quantidade; - } - - - public void setQuantidade(BigDecimal quantidade) { - this.quantidade = quantidade; - } - - - public BigDecimal getValor() { - return valor; - } - - - public void setValor(BigDecimal valor) { - this.valor = valor; - } - - - public static long getSerialversionuid() { - return serialVersionUID; - } - - - } \ No newline at end of file diff --git a/src/main/java/com/produtos/apirest/resources/ProdutoResource.java b/src/main/java/com/produtos/apirest/resources/ProdutoResource.java index 3b2bd94..24a1956 100644 --- a/src/main/java/com/produtos/apirest/resources/ProdutoResource.java +++ b/src/main/java/com/produtos/apirest/resources/ProdutoResource.java @@ -30,9 +30,7 @@ public class ProdutoResource { @Autowired - ProdutoService produtoService; - //ProdutoRepository produtoRepository; - + ProdutoService produtoService; @GetMapping(value="/produtos", produces="application/json") diff --git a/src/test/java/com/produtos/apirest/ProdutoRepositoryTest.java b/src/test/java/com/produtos/apirest/ProdutoRepositoryTest.java new file mode 100644 index 0000000..58bd031 --- /dev/null +++ b/src/test/java/com/produtos/apirest/ProdutoRepositoryTest.java @@ -0,0 +1,65 @@ +package com.produtos.apirest; + +import com.produtos.apirest.models.Produto; +import com.produtos.apirest.repository.ProdutoRepository; + +import org.assertj.core.api.Assertions; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; +import org.springframework.test.context.junit4.SpringRunner; + +import java.math.BigDecimal; +import java.util.List; + +@RunWith(SpringRunner.class) +@DataJpaTest +@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) +public class ProdutoRepositoryTest { + + @Autowired + private ProdutoRepository produtoRepository; + + @Rule + public ExpectedException thrown = ExpectedException.none(); + + @Test + public void create_Should_PersistData() { + // User user = new User("Charles", "charlesdccti@gmail.com"); + Produto produto = new Produto(); + this.produtoRepository.save(produto); +// Assertions.assertThat(produto.getNome()).isEqualTo("sapato"); +// Assertions.assertThat(produto.getValor()).isNull(); + } + + + +}; + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/target/classes/META-INF/MANIFEST.MF b/target/classes/META-INF/MANIFEST.MF index 254272e..8b885ed 100644 --- a/target/classes/META-INF/MANIFEST.MF +++ b/target/classes/META-INF/MANIFEST.MF @@ -1,3 +1,10 @@ -Manifest-Version: 1.0 -Class-Path: - +Manifest-Version: 1.0 +Implementation-Title: apirest +Implementation-Version: 0.0.1-SNAPSHOT +Built-By: charles +Implementation-Vendor-Id: com.produtos +Build-Jdk: 1.8.0_181 +Implementation-URL: https://projects.spring.io/spring-boot/#/spring-bo + ot-starter-parent/apirest +Created-By: Maven Integration for Eclipse + diff --git a/target/classes/com/produtos/apirest/models/Produto.class b/target/classes/com/produtos/apirest/models/Produto.class index ee39f3ccfd8d3afab0782702136b2543e217cc85..8b8f5f5d84cfef0225f8fafada1a8d95dc1362b6 100644 GIT binary patch delta 265 zcmaiuJrV&y5QSgQnzcLD`We6LXG6j2my3$h9*AP?oC1X9Yo--mWmhP1nNcS^+nWTFYg#1H-e zf0XgeZmFd#Xq%nsow@hibI-loU%!9+B%*0rj#7ZpOA46+$eLiWNaUuh=Phzgi()sDlKDQ*pip!XMR)`aCTfXFKkCz=HbQ~ zBeuz?ebq7@#Z8sx<(deChW;={0a;{}+^d;NRzzMp5-7{2X(_G{?=b4i>O`N6sz!8_ zFbl%iD9$q)@wr$Rrm(pZMK=wcVvf>w>Fid2WI8yj3iyYX4-dAnnN|hGbh#VOl-ks6I=6&6wu(F4<`tpP zDMnF5=3EtfQt9hDYOv=C>ZTsJ0?c#mOJ8~0J8~7YJeC3+(Sm)xc3JA)SK*@p4<4oRkI7?gVd9ssJ}B4dR`d~ z*2koIZr`Kb>I||beJ4+V0gB^6H(!g_C7oa=_c0-XsQ0;0WEIzhyxiTi1j|O4eShiIP;x` zzTroJhOz4O1Ue6~COijJHUbO(MDzr!7aZ{JGUqh<1((giY2V;yl!BKIUV=jUy zIlcDfG}Fpy-IvpxKc|^iPFZl;x`C6P&IYF>IJME6#ypL<;-h8p)?wOp;q+hxXx?2H R+}ET7_9E;hfWCF;-5*G#N5B98 diff --git a/target/classes/com/produtos/apirest/resources/ProdutoResource.class b/target/classes/com/produtos/apirest/resources/ProdutoResource.class index d3ae7900988c03393ffd5119101ac6d981dbdb7a..8f1f23dc9899277fe7c642ca49e71ffc7f73a069 100644 GIT binary patch delta 53 zcmbO%JXv^y3Ol3PWL5SeM(xS+9O9GLv*$A!09l=^rVJbmW Date: Tue, 13 Aug 2019 18:56:12 -0300 Subject: [PATCH 4/6] =?UTF-8?q?Come=C3=A7ando=20os=20testes=20na=20api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apirest/ProdutoRepositoryTest.java | 31 +++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/produtos/apirest/ProdutoRepositoryTest.java b/src/test/java/com/produtos/apirest/ProdutoRepositoryTest.java index 58bd031..1a17eeb 100644 --- a/src/test/java/com/produtos/apirest/ProdutoRepositoryTest.java +++ b/src/test/java/com/produtos/apirest/ProdutoRepositoryTest.java @@ -37,6 +37,35 @@ public void create_Should_PersistData() { } +// @Test +// public void update_Should_ChangeAndPersistData() { +// Produto produto = new Produto("sapato", BigDecimal.valueOf(1), BigDecimal.valueOf(1)); +// this.produtoRepository.save(produto); +// produto.setNome("sapatenis"); +// produto.setValor(BigDecimal.valueOf(500)); +// this.produtoRepository.save(produto); +// Assertions.assertThat(produto.getId()).isNotNull(); +// Assertions.assertThat(produto.getNome()).isEqualTo("sapatenis"); +// Assertions.assertThat(produto.getValor()).isNotNull(); +// } +// +// @Test +// public void delete() { +// Produto produto = new Produto("sapato", BigDecimal.valueOf(2), BigDecimal.valueOf(1000)); +// this.produtoRepository.save(produto); +// this.produtoRepository.delete(produto); +// Assertions.assertThat(produtoRepository.findById(produto.getId())).isNull(); +// } +// +// @Test +// public void sizeListAll() { +// Produto produto = new Produto("sapateste", BigDecimal.valueOf(1), BigDecimal.valueOf(1)); +// produtoRepository.save(produto); +// +// //Assertions.assertThat(produtoRepository.findAll().size()).isNotNull(); +// +// } + }; @@ -58,8 +87,6 @@ public void create_Should_PersistData() { - - From d6598c237ac88848d0998e7250179d7b77cfb8e2 Mon Sep 17 00:00:00 2001 From: charlesdccti Date: Wed, 14 Aug 2019 03:03:32 -0300 Subject: [PATCH 5/6] test listAll, update, delete Data --- pom.xml | 14 +-- .../com/produtos/apirest/models/Produto.java | 29 ++++-- .../apirest/ProdutoRepositoryTest.java | 90 +++++++++++------- .../com/produtos/apirest/models/Produto.class | Bin 736 -> 3584 bytes 4 files changed, 85 insertions(+), 48 deletions(-) diff --git a/pom.xml b/pom.xml index 1b9f4ed..ebe8f34 100644 --- a/pom.xml +++ b/pom.xml @@ -30,13 +30,13 @@ - - - org.projectlombok - lombok - 1.18.8 - provided - + + + org.projectlombok + lombok + 1.18.6 + provided + org.springframework.boot diff --git a/src/main/java/com/produtos/apirest/models/Produto.java b/src/main/java/com/produtos/apirest/models/Produto.java index 136552f..5ffc918 100644 --- a/src/main/java/com/produtos/apirest/models/Produto.java +++ b/src/main/java/com/produtos/apirest/models/Produto.java @@ -6,28 +6,41 @@ import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; +import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; +import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; /** * @author charles * */ -//@Entity +@Entity @Data +@NoArgsConstructor +@AllArgsConstructor public class Produto { @Id - @GeneratedValue(strategy=GenerationType.AUTO) - private long id; - @NotNull + @GeneratedValue(strategy=GenerationType.IDENTITY) + private Integer id; + + //@NotNull private String nome; - @NotNull - private BigDecimal quantidade; - @NotNull - private BigDecimal valor; + @NotEmpty + private Integer quantidade; + private Integer valor; + + + public Produto( String nome, Integer quantidade, Integer valor) { + super(); + this.nome = nome; + this.quantidade = quantidade; + this.valor = valor; + } } \ No newline at end of file diff --git a/src/test/java/com/produtos/apirest/ProdutoRepositoryTest.java b/src/test/java/com/produtos/apirest/ProdutoRepositoryTest.java index 1a17eeb..77d0692 100644 --- a/src/test/java/com/produtos/apirest/ProdutoRepositoryTest.java +++ b/src/test/java/com/produtos/apirest/ProdutoRepositoryTest.java @@ -4,6 +4,7 @@ import com.produtos.apirest.repository.ProdutoRepository; import org.assertj.core.api.Assertions; +import org.hibernate.exception.ConstraintViolationException; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @@ -11,10 +12,13 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; +import org.springframework.data.domain.Example; import org.springframework.test.context.junit4.SpringRunner; -import java.math.BigDecimal; -import java.util.List; +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.Optional; + @RunWith(SpringRunner.class) @DataJpaTest @@ -27,44 +31,64 @@ public class ProdutoRepositoryTest { @Rule public ExpectedException thrown = ExpectedException.none(); + + @Test + public void sizeListAll() { + int size = produtoRepository.findAll().size(); + + Produto produto = new Produto("sapateste", 1, 1); + produtoRepository.save(produto); + + assertThat(produtoRepository.findAll().size()).isEqualTo(size+1); + } + + @Test public void create_Should_PersistData() { // User user = new User("Charles", "charlesdccti@gmail.com"); - Produto produto = new Produto(); + Produto produto = new Produto(1, "sapato", 10, 400); this.produtoRepository.save(produto); -// Assertions.assertThat(produto.getNome()).isEqualTo("sapato"); -// Assertions.assertThat(produto.getValor()).isNull(); + Assertions.assertThat(produto.getNome()).isEqualTo("sapato"); + Assertions.assertThat(produto.getValor()).isNull(); } -// @Test -// public void update_Should_ChangeAndPersistData() { -// Produto produto = new Produto("sapato", BigDecimal.valueOf(1), BigDecimal.valueOf(1)); -// this.produtoRepository.save(produto); -// produto.setNome("sapatenis"); -// produto.setValor(BigDecimal.valueOf(500)); -// this.produtoRepository.save(produto); -// Assertions.assertThat(produto.getId()).isNotNull(); -// Assertions.assertThat(produto.getNome()).isEqualTo("sapatenis"); -// Assertions.assertThat(produto.getValor()).isNotNull(); -// } -// -// @Test -// public void delete() { -// Produto produto = new Produto("sapato", BigDecimal.valueOf(2), BigDecimal.valueOf(1000)); -// this.produtoRepository.save(produto); -// this.produtoRepository.delete(produto); -// Assertions.assertThat(produtoRepository.findById(produto.getId())).isNull(); -// } -// -// @Test -// public void sizeListAll() { -// Produto produto = new Produto("sapateste", BigDecimal.valueOf(1), BigDecimal.valueOf(1)); -// produtoRepository.save(produto); -// -// //Assertions.assertThat(produtoRepository.findAll().size()).isNotNull(); -// -// } + @Test + public void update_Should_ChangeAndPersistData() { + Produto produto = new Produto("sapato", 1, 1); + this.produtoRepository.save(produto); + + produto.setNome("sapatenis"); + produto.setValor(500); + this.produtoRepository.save(produto); + + Assertions.assertThat(produto.getId()).isNotNull(); + Assertions.assertThat(produto.getNome()).isEqualTo("sapatenis"); + Assertions.assertThat(produto.getValor()).isNotNull(); + } + + /** + * O resto é 3, pois é feito um carregamento de 3 produtos ao executar a aplicacao + */ + @Test + public void delete_should_removeData() { + Produto produto = new Produto("sapato", 2, 100); + + this.produtoRepository.save(produto); + assertThat(produtoRepository.findAll().size()).isEqualTo(4); + + this.produtoRepository.delete(produto); + assertThat(produtoRepository.findAll().size()).isEqualTo(3); // removido com sucesso + } + + + // public void save_WhenNameIsNull_Should_Throw_ConstraintViolationException() { + // + // thrown.expect(ConstraintViolationException.class); + // thrown.expectMessage("O campo nome do produto é obrigatório"); + // + // this.produtoRepository.save(new Produto()); + // } }; diff --git a/target/classes/com/produtos/apirest/models/Produto.class b/target/classes/com/produtos/apirest/models/Produto.class index 8b8f5f5d84cfef0225f8fafada1a8d95dc1362b6..f5f0d7009a9e5daba682867511743d63cfe44ed3 100644 GIT binary patch literal 3584 zcma)8TW=dx5dPNQ^=_OENs}h+CM|?EEs2xVK+Dapo8Ho5XhJU`kaFwR-X`1nhP^>l z;u-OT#1j${uT(;PfQqIPNC;j);x_^1o3m?Y-I^*=P-!)<9^K#PH4zaKYn{m)6QTI)yyg*I74F6NMetT5$x5FoSs?jgNAV%19(cLeKrP> z66t9h!$@fuyx`Zo<<07Kuesuq49P&fB$a!{ROn6rRQ%f1RCI|I)I$@_XCuc1F`J=1=%7`+G`t$qGao0pO;oJ@x{T*7@Q67#DUK@3 zH^kohBWBvQ@&q$J%V=(LJI;cITjXkPQU%LZl_?_mYpC0J7c&}`>+#SJgVn?~E@T>E?JM#cznc4erGIRGa zk(s}b{XbHlz%%?EqZ8mu(J{lzGrVz@Hs&x%Z6-WVmk)47OUffnNuf`ole?2RNbNw9 z0C59Ug3jiV6@+$|8%uhJ{1BLK*i3bEs^4AUl(QTT%UTPja?Ck6?AAFC)6FWQ1 z9?|3Q{+%73!+bKyS^jL`Kq&OATgrw8pb0@zVjxc>8r(GtUotl(7 z;y)Xq$pK~Z`QBbm?9`;t-!VC;Ouo?DWUSVn9Jtg`$Ky%71 zaS}yJ7QUk0Hz@VtYfRuxN@-l6A1`CjwEo6ZCbWMrW+KTyi{jo;?E4?FT{@>oiZ0_f zs>avouoSovNjP+R0y9kLvwy|s`_sjXCJi;VNszTPCg9{LhF zpF|axaG9POq~Qvs1k-v0D-1~b-xA)Yq~iqt16ieHaQf`QJCsr?`QO8ONQKViYZ?>I z&qMxhuM?seh0zAIF?zQuf~8`xZRDfc2yAwPxA8qTc!V)>Xoj3%U0fw6gPo~;+%Ao5(nN*Zd0~ff$?3=9k=4Du7X+?W`>CZ_bTvN(o@_)q*P$EY@0l~Iw!uQVrTvNxl$ z4_9GnVqQsRN@7YXBZHVvR$^JAer{q(hQ3o~x=U(uW^Q7RH6sISSz=Cp5hDYeO=ezZ zi5(*Yvxa6EBLj Date: Wed, 14 Aug 2019 03:56:18 -0300 Subject: [PATCH 6/6] Add novos testes --- .../com/produtos/apirest/models/Produto.java | 9 ++- .../apirest/ProdutoRepositoryTest.java | 62 +++++++++++++++--- .../com/produtos/apirest/models/Produto.class | Bin 3584 -> 3998 bytes 3 files changed, 60 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/produtos/apirest/models/Produto.java b/src/main/java/com/produtos/apirest/models/Produto.java index 5ffc918..57c4cb5 100644 --- a/src/main/java/com/produtos/apirest/models/Produto.java +++ b/src/main/java/com/produtos/apirest/models/Produto.java @@ -6,6 +6,7 @@ import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; +import javax.validation.constraints.Min; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; @@ -28,11 +29,15 @@ public class Produto { @GeneratedValue(strategy=GenerationType.IDENTITY) private Integer id; - //@NotNull + @NotNull(message = "O campo nome do produto é obrigatório") private String nome; - @NotEmpty + @NotNull(message = "O campo quantidade do produto é obrigatório") + @Min(value = 0, message = "Quantidade deve ser um valor positivo") private Integer quantidade; + + @NotNull(message = "O campo valor do produto é obrigatório") + @Min(value = 0, message = "Valor deve ser um numero positivo") private Integer valor; diff --git a/src/test/java/com/produtos/apirest/ProdutoRepositoryTest.java b/src/test/java/com/produtos/apirest/ProdutoRepositoryTest.java index 77d0692..2a526ac 100644 --- a/src/test/java/com/produtos/apirest/ProdutoRepositoryTest.java +++ b/src/test/java/com/produtos/apirest/ProdutoRepositoryTest.java @@ -4,7 +4,6 @@ import com.produtos.apirest.repository.ProdutoRepository; import org.assertj.core.api.Assertions; -import org.hibernate.exception.ConstraintViolationException; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @@ -19,6 +18,9 @@ import java.util.Optional; +import javax.validation.ConstraintViolationException; +import javax.validation.UnexpectedTypeException; + @RunWith(SpringRunner.class) @DataJpaTest @@ -81,16 +83,58 @@ public void delete_should_removeData() { assertThat(produtoRepository.findAll().size()).isEqualTo(3); // removido com sucesso } - - // public void save_WhenNameIsNull_Should_Throw_ConstraintViolationException() { - // - // thrown.expect(ConstraintViolationException.class); - // thrown.expectMessage("O campo nome do produto é obrigatório"); - // - // this.produtoRepository.save(new Produto()); - // } + @Test + public void save_WhenNameIsNull_Should_Throw_ConstraintViolationException() { + + thrown.expect(ConstraintViolationException.class); + thrown.expectMessage("O campo nome do produto é obrigatório"); + + this.produtoRepository.save(new Produto()); + + } + + + @Test + public void save_WhenValorIsNull_Should_Throw_ConstraintViolationException() { + + thrown.expect(ConstraintViolationException.class); + thrown.expectMessage("O campo valor do produto é obrigatório"); + + this.produtoRepository.save(new Produto()); + + } + + + @Test + public void save_WhenQuantidadeIsNull_Should_Throw_ConstraintViolationException() { + + thrown.expect(ConstraintViolationException.class); + thrown.expectMessage("O campo quantidade do produto é obrigatório"); + + this.produtoRepository.save(new Produto()); + + } + + @Test + public void save_WhenQuantidadeIsNegative_Should_Throw_ConstraintViolationException() { + + thrown.expect(ConstraintViolationException.class); + thrown.expectMessage("Quantidade deve ser um valor positivo"); + + this.produtoRepository.save(new Produto("sapato", -2, 2)); + + } + @Test + public void save_WhenValorIsNegative_Should_Throw_ConstraintViolationException() { + + thrown.expect(ConstraintViolationException.class); + thrown.expectMessage("Valor deve ser um numero positivo"); + + this.produtoRepository.save(new Produto("sapato", 2, -2)); + + } }; diff --git a/target/classes/com/produtos/apirest/models/Produto.class b/target/classes/com/produtos/apirest/models/Produto.class index f5f0d7009a9e5daba682867511743d63cfe44ed3..c246bf4fbcdd5456562b77e12acfb679ada50db6 100644 GIT binary patch literal 3998 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