diff --git a/.gitignore b/.gitignore index c456c4a..7f760ca 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,6 @@ /nbdist/ /.nb-gradle/ /build/ +!/src/test/resources/application.properties +!/src/main/resources/application.properties +!/mvn-repository-exported.zip diff --git a/.travis.yml b/.travis.yml index cb263d8..6b58f72 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,14 +1,35 @@ env: global: - - CC_TEST_REPORTER_ID=19cd4efa77fdc8ca82e9308787980d32ec2282b88cd4d6f91d00528790b7fa09 - + - CC_TEST_REPORTER_ID=19cd4efa77fdc8ca82e9308787980d32ec2282b88cd4d6f91d00528790b7fa09 cache: directories: - - $HOME/.m2 - + - "$HOME/.m2" +before_install: +- sudo apt-get install -y tree +before_script: +- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 + > ./cc-test-reporter +- chmod +x ./cc-test-reporter +- "./cc-test-reporter before-build" language: java after_success: - - bash <(curl -s https://codecov.io/bash) +- bash <(curl -s https://codecov.io/bash) +- JACOCO_SOURCE_PATH=src/main/java +- cp target/jacoco-ut/jacoco.xml ./jacoco.xml +- "./cc-test-reporter format-coverage -t jacoco -d --exit-code $TRAVIS_TEST_RESULT" +- pwd +- tree -L 3 +- "./cc-test-reporter format-coverage -t jacoco target/jacoco-ut/jacoco.xml" +- "./cc-test-reporter upload-coverage" jdk: oraclejdk8 - - +deploy: + provider: releases + api_key: + secure: Yw6wgyCZF0ypJzFtEF75g9iaMNKPduhZiwOjUUuhPBu+fTkQP1nukORGZCE4FPcEnBA3Hu8iN6V5KujPJWduId6mduWUDIfZJwVINmnjLmWtLSeY5rxcA61dzJ789I3l9gtxlmxu/LRlDfntTEW9MSOBvRRIoggE0Vv1MnUyYZZWSmDgwGcrjkTCAp/Cbk/Fg6/+4uD9GOYYX45vwvHFbtCSNgBriWDpxJ5EeBNvhwcP9mVpZ3Mn5JkFQ2Q0MbK6kV8cFYQe0qag6rABrVR181zCaAFejDoiaKHrV7Qr7CYCOCRT45g6Vh2fMnyt0Z4y1kPV2zu2X0GWf6ePn/LGQE0tU/+pJXVILly2yjdkbV8eMfkgHe/X19ruZpQTVQDD6fIKYqZkZo8z32Pz+s++FV0usYGWF6OOmrG+dK2pFLSuQtYZFYvPa+zoCKUuAw0uI9cH+er7SL6nz5wIv6lpofhKsmcYLAhDtqicoLYqlSazPpJ3JM1u0duRIdxBzCczodKNctpNEWHVzMCU2zaQtkjZi3AZBWRDq5Cq6nCOgN0w4O0U4Tys6npKbiLD+EYWIpd21LbB1wj8f2nDxrsW7cE2ViHRedwSkJCdYvvNTnZeabh3C6fAqyNxes5ZCTokxj8al784CQxDI06jw6Hj+i71MwFxZgekMD/1Oqr0RK0= + file: "$HOME/target/*.jar" + on: + repo: tetofonta/academy-backend +notifications: + slack: + rooms: + - capitanovvio:OzupfbOHX15vJW4vJE1TOIA9#general diff --git a/pom.xml b/pom.xml index 8a94fce..6e876d5 100644 --- a/pom.xml +++ b/pom.xml @@ -1,5 +1,5 @@ - 4.0.0 @@ -8,9 +8,9 @@ 2.1.2.RELEASE - it.myti.accademy + it.myti.academy backend - 0.0.1-SNAPSHOT + 1.0-RELEASE backend Backend project for MyTi accademy @@ -18,21 +18,32 @@ 1.8 + + + myti-local + http://localhost:8081/ + + + org.springframework.boot spring-boot-starter-web + + org.springframework.security + spring-security-web + org.springframework.boot spring-boot-starter-data-jpa - - org.springframework.boot - spring-boot-devtools - runtime + org.springframework.security + spring-security-web + + com.h2database h2 @@ -43,12 +54,27 @@ lombok true + + io.jsonwebtoken + jjwt + 0.9.0 + + org.springframework.boot spring-boot-starter-test test + + org.springframework.boot + spring-boot-starter-security + + + org.springframework.security + spring-security-test + test + diff --git a/src/main/java/it/myti/academy/backend/BackendApplication.java b/src/main/java/it/myti/academy/backend/BackendApplication.java index 1e780f3..c21f4a7 100644 --- a/src/main/java/it/myti/academy/backend/BackendApplication.java +++ b/src/main/java/it/myti/academy/backend/BackendApplication.java @@ -1,5 +1,6 @@ package it.myti.academy.backend; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -8,6 +9,7 @@ public class BackendApplication { public static void main(String[] args) { SpringApplication.run(BackendApplication.class, args); + } } diff --git a/src/main/java/it/myti/academy/backend/config/CryptConfig.java b/src/main/java/it/myti/academy/backend/config/CryptConfig.java new file mode 100644 index 0000000..8df58b4 --- /dev/null +++ b/src/main/java/it/myti/academy/backend/config/CryptConfig.java @@ -0,0 +1,19 @@ +package it.myti.academy.backend.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; + +/** + * Created by david at 2019-03-20 + */ +@Configuration +public class CryptConfig { + + @Bean + public BCryptPasswordEncoder bCryptPasswordEncoder() { + return new BCryptPasswordEncoder(); + } + + +} diff --git a/src/main/java/it/myti/academy/backend/config/WebSecurity.java b/src/main/java/it/myti/academy/backend/config/WebSecurity.java new file mode 100644 index 0000000..bf749ab --- /dev/null +++ b/src/main/java/it/myti/academy/backend/config/WebSecurity.java @@ -0,0 +1,46 @@ +package it.myti.academy.backend.config; + +import it.myti.academy.backend.filter.JWTAuthenticationFilter; +import it.myti.academy.backend.filter.JWTAuthorizationFilter; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.http.HttpMethod; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; + + +/** + * Created by david at 2019-03-20 + */ +@EnableWebSecurity +public class WebSecurity extends WebSecurityConfigurerAdapter{ + private UserDetailsService userDetailsService; + private BCryptPasswordEncoder bCryptPasswordEncoder; + + @Autowired + public WebSecurity(@Qualifier("userDetailsServiceImpl") UserDetailsService userDetailsService, BCryptPasswordEncoder bCryptPasswordEncoder) { + this.userDetailsService = userDetailsService; + this.bCryptPasswordEncoder = bCryptPasswordEncoder; + } + + @Override + protected void configure(HttpSecurity http) throws Exception { + http.csrf().disable().authorizeRequests() + .antMatchers("/h2-console/**").permitAll() + .antMatchers(HttpMethod.POST, "/utenti/sign-up", "/unitalogistiche/*").permitAll() + .anyRequest().authenticated() + .and() + .addFilter(new JWTAuthenticationFilter(authenticationManager())) + .addFilter(new JWTAuthorizationFilter(authenticationManager())); + http.headers().frameOptions().disable(); + } + + @Override + public void configure(AuthenticationManagerBuilder auth) throws Exception { + auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder); + } +} diff --git a/src/main/java/it/myti/academy/backend/controller/ColliController.java b/src/main/java/it/myti/academy/backend/controller/ColliController.java new file mode 100644 index 0000000..f9e0990 --- /dev/null +++ b/src/main/java/it/myti/academy/backend/controller/ColliController.java @@ -0,0 +1,48 @@ +package it.myti.academy.backend.controller; + +import it.myti.academy.backend.model.Collo; +import it.myti.academy.backend.model.Utente; +import it.myti.academy.backend.repository.UtenteRepository; +import it.myti.academy.backend.service.ColloService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * Created by david at 2019-03-07 + */ +@RestController +@RequestMapping("/colli") +public class ColliController { + + private final ColloService colloService; + + private final UtenteRepository utenteRepository; + + @Autowired + public ColliController(ColloService colloService, UtenteRepository utenteRepository) { + this.colloService = colloService; + this.utenteRepository = utenteRepository; + } + + @GetMapping("/") + public List getByUtente() { + List returnValue = null; + + Authentication auth = SecurityContextHolder.getContext().getAuthentication(); + String username = auth.getName(); + final Utente utente = utenteRepository.findByUsername(username); + + if (utente != null) + returnValue = colloService.getSpedizioniAttiveByUtente(utente); + + return returnValue; + } + +} diff --git a/src/main/java/it/myti/academy/backend/controller/EventiController.java b/src/main/java/it/myti/academy/backend/controller/EventiController.java new file mode 100644 index 0000000..378e082 --- /dev/null +++ b/src/main/java/it/myti/academy/backend/controller/EventiController.java @@ -0,0 +1,50 @@ +package it.myti.academy.backend.controller; + +import it.myti.academy.backend.model.Evento; +import it.myti.academy.backend.model.Utente; +import it.myti.academy.backend.repository.UtenteRepository; +import it.myti.academy.backend.service.EventoService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.PropertySource; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping("/eventi") +public class EventiController { + + private final UtenteRepository utenteRepository; + private final EventoService eventi; + @Autowired + public EventiController(UtenteRepository utenteRepository, EventoService eventi) { + this.utenteRepository = utenteRepository; + this.eventi = eventi; + } + + @GetMapping("/") + public List getByUtente(@RequestParam Map params) { + Authentication auth = SecurityContextHolder.getContext().getAuthentication(); + String username = auth.getName(); + final Utente utente = utenteRepository.findByUsername(username); + if (utente != null) { + Long spedizione = null; + Long ul = null; + try { + spedizione = params.get("idSpedizione") != null ? Long.parseLong(params.get("idSpedizione")) : null; + ul = params.get("idUnitaLogistica") != null ? Long.parseLong(params.get("idUnitaLogistica")) : null; + } catch (NumberFormatException e) { + spedizione = null; + ul = null; + } + return eventi.getEventiByUtente(utente, spedizione, ul); + } + return null; + } + +} diff --git a/src/main/java/it/myti/academy/backend/controller/HelloWorldController.java b/src/main/java/it/myti/academy/backend/controller/HelloWorldController.java deleted file mode 100644 index a20eb27..0000000 --- a/src/main/java/it/myti/academy/backend/controller/HelloWorldController.java +++ /dev/null @@ -1,33 +0,0 @@ -package it.myti.academy.backend.controller; - -import it.myti.academy.backend.service.HelloWorldService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RestController; - -/** - * Created by david at 2019-02-19 - */ -@RestController -public class HelloWorldController { - - private HelloWorldService helloWorldService; - - @Autowired - public HelloWorldController(HelloWorldService helloWorldService) { - this.helloWorldService = helloWorldService; - } - - @GetMapping("hello") - public String hello() { - return helloWorldService.sayHello(); - } - - @PostMapping("hello") - public String helloAt(@RequestBody() String nome) { - return helloWorldService.sayHello(nome); - } - -} diff --git a/src/main/java/it/myti/academy/backend/controller/UnitaLogisticheController.java b/src/main/java/it/myti/academy/backend/controller/UnitaLogisticheController.java new file mode 100644 index 0000000..984dd2a --- /dev/null +++ b/src/main/java/it/myti/academy/backend/controller/UnitaLogisticheController.java @@ -0,0 +1,47 @@ +package it.myti.academy.backend.controller; + +import it.myti.academy.backend.model.UnitaLogistica; +import it.myti.academy.backend.model.Utente; +import it.myti.academy.backend.model.resp.UnitaLogisticaDettaglio; +import it.myti.academy.backend.repository.UtenteRepository; +import it.myti.academy.backend.service.UnitaLogisticaService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +@RequestMapping("/unitalogistiche") +public class UnitaLogisticheController { + + private final UtenteRepository utenteRepository; + private final UnitaLogisticaService uls; + + @Autowired + public UnitaLogisticheController(UtenteRepository utenteRepository, UnitaLogisticaService uls) { + this.utenteRepository = utenteRepository; + this.uls = uls; + } + + @GetMapping("/") + public List getByUtente() { + Authentication auth = SecurityContextHolder.getContext().getAuthentication(); + String username = auth.getName(); + final Utente utente = utenteRepository.findByUsername(username); + + if (utente != null) + return uls.getUnitaLogisticheInViaggioByUtente(utente); + return null; + } + + @GetMapping("/{id}") + public UnitaLogisticaDettaglio getById(@PathVariable("id") long id) { + return uls.getUnitaLogisticaDetail(id); + } + +} diff --git a/src/main/java/it/myti/academy/backend/controller/UtentiController.java b/src/main/java/it/myti/academy/backend/controller/UtentiController.java new file mode 100644 index 0000000..0b60c58 --- /dev/null +++ b/src/main/java/it/myti/academy/backend/controller/UtentiController.java @@ -0,0 +1,40 @@ +package it.myti.academy.backend.controller; + +import it.myti.academy.backend.model.Utente; +import it.myti.academy.backend.model.req.NewUtente; +import it.myti.academy.backend.repository.UtenteRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * Created by david at 2019-03-20 + */ + +@RestController +@RequestMapping("/utenti") +public class UtentiController { + + private UtenteRepository applicationUserRepository; + private BCryptPasswordEncoder bCryptPasswordEncoder; + + @Autowired + public UtentiController(UtenteRepository applicationUserRepository, + BCryptPasswordEncoder bCryptPasswordEncoder) { + this.applicationUserRepository = applicationUserRepository; + this.bCryptPasswordEncoder = bCryptPasswordEncoder; + } + + @PostMapping("/sign-up") + public String signUp(@RequestBody NewUtente newUtente) { + Utente utente = new Utente(); + utente.setNome(newUtente.getNome()); + utente.setUsername(newUtente.getUsername()); + utente.setPassword(bCryptPasswordEncoder.encode(newUtente.getPassword())); + applicationUserRepository.save(utente); + return "OK!"; + } +} diff --git a/src/main/java/it/myti/academy/backend/filter/JWTAuthenticationFilter.java b/src/main/java/it/myti/academy/backend/filter/JWTAuthenticationFilter.java new file mode 100644 index 0000000..00ed4dd --- /dev/null +++ b/src/main/java/it/myti/academy/backend/filter/JWTAuthenticationFilter.java @@ -0,0 +1,65 @@ +package it.myti.academy.backend.filter; + +import com.fasterxml.jackson.databind.ObjectMapper; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; +import it.myti.academy.backend.model.Utente; +import it.myti.academy.backend.model.req.LoginUser; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.PropertySource; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.core.userdetails.User; +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Date; + +/** + * Created by david at 2019-03-20 + */ + +public class JWTAuthenticationFilter extends UsernamePasswordAuthenticationFilter implements SecurityConstants { + + private AuthenticationManager authenticationManager; + + public JWTAuthenticationFilter(AuthenticationManager authenticationManager) { + this.authenticationManager = authenticationManager; + } + + @Override + public Authentication attemptAuthentication(HttpServletRequest req, + HttpServletResponse res) throws AuthenticationException { + try { + LoginUser creds = new ObjectMapper().readValue(req.getInputStream(), LoginUser.class); + return authenticationManager.authenticate( + new UsernamePasswordAuthenticationToken( + creds.getUsername(), + creds.getPassword(), + new ArrayList<>()) + ); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + @Override + protected void successfulAuthentication(HttpServletRequest req, + HttpServletResponse res, + FilterChain chain, + Authentication auth) throws IOException, ServletException { + String token = Jwts.builder() + .setSubject(((User) auth.getPrincipal()).getUsername()) + .setExpiration(new Date(System.currentTimeMillis() + EXPIRATION)) + .signWith(SignatureAlgorithm.HS512, SECRET) + .compact(); + res.addHeader(HEADER_STRING, TOKEN_PREFIX + token); + } +} diff --git a/src/main/java/it/myti/academy/backend/filter/JWTAuthorizationFilter.java b/src/main/java/it/myti/academy/backend/filter/JWTAuthorizationFilter.java new file mode 100644 index 0000000..2e73be1 --- /dev/null +++ b/src/main/java/it/myti/academy/backend/filter/JWTAuthorizationFilter.java @@ -0,0 +1,59 @@ +package it.myti.academy.backend.filter; + +import io.jsonwebtoken.Jwts; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.web.authentication.www.BasicAuthenticationFilter; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.ArrayList; + +/** + * Created by david at 2019-03-20 + */ +public class JWTAuthorizationFilter extends BasicAuthenticationFilter implements SecurityConstants { + + public JWTAuthorizationFilter(AuthenticationManager authManager) { + super(authManager); + } + + @Override + protected void doFilterInternal(HttpServletRequest req, + HttpServletResponse res, + FilterChain chain) throws IOException, ServletException { + String header = req.getHeader(HEADER_STRING); + if (header == null || !header.startsWith(TOKEN_PREFIX)) { + chain.doFilter(req, res); + return; + } + UsernamePasswordAuthenticationToken authentication = getAuthentication(req); + SecurityContextHolder.getContext().setAuthentication(authentication); + chain.doFilter(req, res); + } + + private UsernamePasswordAuthenticationToken getAuthentication(HttpServletRequest request) { + String token = request.getHeader(HEADER_STRING); + if (token != null) { + // parse the token. + String user = Jwts.parser() + .setSigningKey(SECRET) + .parseClaimsJws(token.replace(TOKEN_PREFIX, "")) + .getBody() + .getSubject(); + if (user != null) { + return new UsernamePasswordAuthenticationToken(user, null, new ArrayList<>()); + } + return null; + } + return null; + } +} \ No newline at end of file diff --git a/src/main/java/it/myti/academy/backend/filter/SecurityConstants.java b/src/main/java/it/myti/academy/backend/filter/SecurityConstants.java new file mode 100644 index 0000000..7421cee --- /dev/null +++ b/src/main/java/it/myti/academy/backend/filter/SecurityConstants.java @@ -0,0 +1,11 @@ +package it.myti.academy.backend.filter; + +/** + * Created by david at 2019-03-20 + */ +public interface SecurityConstants { + final static Long EXPIRATION = 3600000L; + final static String TOKEN_PREFIX = "Bearer "; + final static String HEADER_STRING = "Authorization"; + final static String SECRET = "this-is-a-secret"; +} diff --git a/src/main/java/it/myti/academy/backend/model/Collo.java b/src/main/java/it/myti/academy/backend/model/Collo.java index 85ec2b6..0e7ee26 100644 --- a/src/main/java/it/myti/academy/backend/model/Collo.java +++ b/src/main/java/it/myti/academy/backend/model/Collo.java @@ -1,16 +1,10 @@ package it.myti.academy.backend.model; +import com.fasterxml.jackson.annotation.JsonBackReference; +import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.OneToMany; -import javax.persistence.Table; +import javax.persistence.*; import java.util.List; /** @@ -28,14 +22,17 @@ public class Collo { @ManyToOne @JoinColumn(name = "unita_logistica_id") + @JsonIgnore protected UnitaLogistica unitaLogistica; @ManyToOne @JoinColumn(name = "spedizione_id") + @JsonIgnore protected Spedizione spedizione; @ManyToOne @JoinColumn(name = "utente_id") + @JsonIgnore protected Utente utente; @Column diff --git a/src/main/java/it/myti/academy/backend/model/Contenuto.java b/src/main/java/it/myti/academy/backend/model/Contenuto.java index f4a2c73..1f76e64 100644 --- a/src/main/java/it/myti/academy/backend/model/Contenuto.java +++ b/src/main/java/it/myti/academy/backend/model/Contenuto.java @@ -1,15 +1,10 @@ package it.myti.academy.backend.model; +import com.fasterxml.jackson.annotation.JsonBackReference; +import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.Table; +import javax.persistence.*; /** * Created by david at 2019-02-13 @@ -39,10 +34,11 @@ public class Contenuto { @Column(scale = 2) protected Double quantita; - @Column(length = 2) + @Column(length = 2, name = "unita_di_misura") protected String unitaDiMisura; @ManyToOne @JoinColumn(name = "collo_id") + @JsonIgnore protected Collo collo; } diff --git a/src/main/java/it/myti/academy/backend/model/Evento.java b/src/main/java/it/myti/academy/backend/model/Evento.java index 428f47a..3cced50 100644 --- a/src/main/java/it/myti/academy/backend/model/Evento.java +++ b/src/main/java/it/myti/academy/backend/model/Evento.java @@ -1,21 +1,10 @@ package it.myti.academy.backend.model; +import com.fasterxml.jackson.annotation.JsonBackReference; +import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; -import javax.persistence.Column; -import javax.persistence.DiscriminatorColumn; -import javax.persistence.DiscriminatorType; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.Inheritance; -import javax.persistence.InheritanceType; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.Table; -import javax.persistence.Temporal; -import javax.persistence.TemporalType; +import javax.persistence.*; import java.util.Date; /** @@ -42,10 +31,12 @@ public abstract class Evento { @ManyToOne @JoinColumn(name = "evento_tipo_id") + @JsonIgnore protected EventoTipo tipo; @ManyToOne @JoinColumn(name = "collo_id") + @JsonIgnore protected Collo collo; } diff --git a/src/main/java/it/myti/academy/backend/model/EventoTipo.java b/src/main/java/it/myti/academy/backend/model/EventoTipo.java index 4a0138d..dca6543 100644 --- a/src/main/java/it/myti/academy/backend/model/EventoTipo.java +++ b/src/main/java/it/myti/academy/backend/model/EventoTipo.java @@ -1,14 +1,9 @@ package it.myti.academy.backend.model; +import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.OneToMany; -import javax.persistence.Table; +import javax.persistence.*; import java.util.List; /** @@ -30,6 +25,7 @@ public class EventoTipo { @Column(length = 2048) protected String descrizione; + @JsonIgnore @OneToMany(mappedBy = "tipo") protected List eventi; } diff --git a/src/main/java/it/myti/academy/backend/model/Spedizione.java b/src/main/java/it/myti/academy/backend/model/Spedizione.java index 11abe00..af468e2 100644 --- a/src/main/java/it/myti/academy/backend/model/Spedizione.java +++ b/src/main/java/it/myti/academy/backend/model/Spedizione.java @@ -1,16 +1,9 @@ package it.myti.academy.backend.model; +import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.OneToMany; -import javax.persistence.Table; -import javax.persistence.Temporal; -import javax.persistence.TemporalType; +import javax.persistence.*; import java.util.Date; import java.util.List; @@ -45,6 +38,7 @@ public class Spedizione { protected String arrivoA; @Column + @JsonIgnore @OneToMany(mappedBy = "spedizione") protected List colliInviati; diff --git a/src/main/java/it/myti/academy/backend/model/StatoUnitaLogistica.java b/src/main/java/it/myti/academy/backend/model/StatoUnitaLogistica.java index cb5b755..032af0d 100644 --- a/src/main/java/it/myti/academy/backend/model/StatoUnitaLogistica.java +++ b/src/main/java/it/myti/academy/backend/model/StatoUnitaLogistica.java @@ -1,14 +1,9 @@ package it.myti.academy.backend.model; +import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.OneToMany; -import javax.persistence.Table; +import javax.persistence.*; import java.util.List; /** @@ -31,6 +26,7 @@ public class StatoUnitaLogistica { @Column(length = 2048) protected String descrizione; + @JsonIgnore @OneToMany(mappedBy = "stato") protected List unitaLogistiche; diff --git a/src/main/java/it/myti/academy/backend/model/UnitaLogistica.java b/src/main/java/it/myti/academy/backend/model/UnitaLogistica.java index 861bd7a..990df20 100644 --- a/src/main/java/it/myti/academy/backend/model/UnitaLogistica.java +++ b/src/main/java/it/myti/academy/backend/model/UnitaLogistica.java @@ -1,15 +1,9 @@ package it.myti.academy.backend.model; +import com.fasterxml.jackson.annotation.JsonBackReference; import lombok.Data; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.OneToMany; +import javax.persistence.*; import java.util.List; /** @@ -38,10 +32,11 @@ public class UnitaLogistica { @ManyToOne @JoinColumn(name = "stato_id") + @JsonBackReference protected StatoUnitaLogistica stato; @Column @OneToMany(mappedBy = "unitaLogistica") protected List spedizioniFatte; -} +} \ No newline at end of file diff --git a/src/main/java/it/myti/academy/backend/model/Utente.java b/src/main/java/it/myti/academy/backend/model/Utente.java index 32b4591..ee438be 100644 --- a/src/main/java/it/myti/academy/backend/model/Utente.java +++ b/src/main/java/it/myti/academy/backend/model/Utente.java @@ -2,13 +2,7 @@ import lombok.Data; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.OneToMany; -import javax.persistence.Table; +import javax.persistence.*; import java.util.List; /** @@ -21,13 +15,13 @@ public class Utente { @Id @Column(updatable = false) - @GeneratedValue(strategy = GenerationType.AUTO) + @GeneratedValue(strategy = GenerationType.IDENTITY) protected Long id; - @Column(unique = true, length = 64) + @Column(length = 64) protected String username; - @Column(unique = true, length = 64) + @Column(length = 64) protected String password; @Column(length = 64, nullable = false) diff --git a/src/main/java/it/myti/academy/backend/model/req/LoginUser.java b/src/main/java/it/myti/academy/backend/model/req/LoginUser.java new file mode 100644 index 0000000..155678b --- /dev/null +++ b/src/main/java/it/myti/academy/backend/model/req/LoginUser.java @@ -0,0 +1,11 @@ +package it.myti.academy.backend.model.req; + +import lombok.Data; + +@Data +public class LoginUser { + + public String username; + public String password; + +} diff --git a/src/main/java/it/myti/academy/backend/model/req/NewUtente.java b/src/main/java/it/myti/academy/backend/model/req/NewUtente.java new file mode 100644 index 0000000..41a1ced --- /dev/null +++ b/src/main/java/it/myti/academy/backend/model/req/NewUtente.java @@ -0,0 +1,13 @@ +package it.myti.academy.backend.model.req; + +import lombok.Data; + +/** + * Created by david at 2019-03-20 + */ +@Data +public class NewUtente { + private String nome; + private String username; + private String password; +} diff --git a/src/main/java/it/myti/academy/backend/model/resp/UnitaLogisticaDettaglio.java b/src/main/java/it/myti/academy/backend/model/resp/UnitaLogisticaDettaglio.java new file mode 100644 index 0000000..847016e --- /dev/null +++ b/src/main/java/it/myti/academy/backend/model/resp/UnitaLogisticaDettaglio.java @@ -0,0 +1,83 @@ +package it.myti.academy.backend.model.resp; + +import it.myti.academy.backend.model.Contenuto; +import it.myti.academy.backend.model.Spedizione; +import it.myti.academy.backend.model.StatoUnitaLogistica; +import it.myti.academy.backend.model.UnitaLogistica; + +import java.util.List; + +public class UnitaLogisticaDettaglio { + + public UnitaLogistica ref; + private List contenuto; + private Long id; + private String nome; + private StatoUnitaLogistica stato; + private Double temperatura; + private Double umidita; + private String longitudine; + private String latitudine; + private Spedizione spedizione; + + public UnitaLogisticaDettaglio( + UnitaLogistica ref, + List contenuto, + Long id, + String nome, + StatoUnitaLogistica stato, + Double temperatura, + Double umidita, + String longitudine, + String latitudine, + Spedizione spedizione + ) { + this.ref = ref; + this.contenuto = contenuto; + this.id = id; + this.nome = nome; + this.stato = stato; + this.temperatura = temperatura; + this.umidita = umidita; + this.longitudine = longitudine; + this.latitudine = latitudine; + this.spedizione = spedizione; + } + + public List getContenuto() { + return contenuto; + } + + public Long getId() { + return id; + } + + public String getNome() { + return nome; + } + + public StatoUnitaLogistica getStato() { + return stato; + } + + public Double getTemperatura() { + return temperatura; + } + + public Double getUmidita() { + return umidita; + } + + public String getLongitudine() { + return longitudine; + } + + public String getLatitudine() { + return latitudine; + } + + public Spedizione getSpedizione() { + return spedizione; + } + +} diff --git a/src/main/java/it/myti/academy/backend/repository/ColloRepository.java b/src/main/java/it/myti/academy/backend/repository/ColloRepository.java index 85d4171..bf218e8 100644 --- a/src/main/java/it/myti/academy/backend/repository/ColloRepository.java +++ b/src/main/java/it/myti/academy/backend/repository/ColloRepository.java @@ -1,7 +1,7 @@ package it.myti.academy.backend.repository; -import it.myti.academy.backend.model.Utente; import it.myti.academy.backend.model.Collo; +import it.myti.academy.backend.model.Utente; import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; diff --git a/src/main/java/it/myti/academy/backend/repository/EventiParticleRepository.java b/src/main/java/it/myti/academy/backend/repository/EventiParticleRepository.java new file mode 100644 index 0000000..26b13d8 --- /dev/null +++ b/src/main/java/it/myti/academy/backend/repository/EventiParticleRepository.java @@ -0,0 +1,13 @@ +package it.myti.academy.backend.repository; + +import it.myti.academy.backend.model.EventoParticle; +import org.springframework.data.jpa.repository.JpaRepository; + +/** + * Created by david at 2019-03-11 + */ +public interface EventiParticleRepository extends JpaRepository { + + EventoParticle findFirstByOrderByRicevutoIlDesc(); + +} diff --git a/src/main/java/it/myti/academy/backend/repository/EventoRepository.java b/src/main/java/it/myti/academy/backend/repository/EventoRepository.java new file mode 100644 index 0000000..48deafc --- /dev/null +++ b/src/main/java/it/myti/academy/backend/repository/EventoRepository.java @@ -0,0 +1,8 @@ +package it.myti.academy.backend.repository; + +import it.myti.academy.backend.model.Evento; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface EventoRepository extends JpaRepository { + Evento findTopByOrderByIdDesc(); +} diff --git a/src/main/java/it/myti/academy/backend/repository/UnitaLogisticaRepository.java b/src/main/java/it/myti/academy/backend/repository/UnitaLogisticaRepository.java new file mode 100644 index 0000000..83e378c --- /dev/null +++ b/src/main/java/it/myti/academy/backend/repository/UnitaLogisticaRepository.java @@ -0,0 +1,7 @@ +package it.myti.academy.backend.repository; + +import it.myti.academy.backend.model.UnitaLogistica; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface UnitaLogisticaRepository extends JpaRepository { +} diff --git a/src/main/java/it/myti/academy/backend/repository/UtenteRepository.java b/src/main/java/it/myti/academy/backend/repository/UtenteRepository.java index 2c31f15..2092801 100644 --- a/src/main/java/it/myti/academy/backend/repository/UtenteRepository.java +++ b/src/main/java/it/myti/academy/backend/repository/UtenteRepository.java @@ -7,4 +7,5 @@ * Created by david at 2019-02-20 */ public interface UtenteRepository extends JpaRepository { + Utente findByUsername(String username); } diff --git a/src/main/java/it/myti/academy/backend/service/ColloService.java b/src/main/java/it/myti/academy/backend/service/ColloService.java index a9aabd2..8547402 100644 --- a/src/main/java/it/myti/academy/backend/service/ColloService.java +++ b/src/main/java/it/myti/academy/backend/service/ColloService.java @@ -9,5 +9,7 @@ * Created by david at 2019-02-20 */ public interface ColloService { + List getSpedizioniAttiveByUtente(Long utenteId); + List getSpedizioniAttiveByUtente(Utente utente); } diff --git a/src/main/java/it/myti/academy/backend/service/EventoService.java b/src/main/java/it/myti/academy/backend/service/EventoService.java new file mode 100644 index 0000000..fa3374c --- /dev/null +++ b/src/main/java/it/myti/academy/backend/service/EventoService.java @@ -0,0 +1,10 @@ +package it.myti.academy.backend.service; + +import it.myti.academy.backend.model.Evento; +import it.myti.academy.backend.model.Utente; + +import java.util.List; + +public interface EventoService { + List getEventiByUtente(Utente utente, Long idSpedizione, Long idUL); +} diff --git a/src/main/java/it/myti/academy/backend/service/HelloWorldService.java b/src/main/java/it/myti/academy/backend/service/HelloWorldService.java deleted file mode 100644 index 2e65ead..0000000 --- a/src/main/java/it/myti/academy/backend/service/HelloWorldService.java +++ /dev/null @@ -1,9 +0,0 @@ -package it.myti.academy.backend.service; - -/** - * Created by david at 2019-02-19 - */ -public interface HelloWorldService { - String sayHello(); - String sayHello(String who); -} diff --git a/src/main/java/it/myti/academy/backend/service/UnitaLogisticaService.java b/src/main/java/it/myti/academy/backend/service/UnitaLogisticaService.java new file mode 100644 index 0000000..d21959f --- /dev/null +++ b/src/main/java/it/myti/academy/backend/service/UnitaLogisticaService.java @@ -0,0 +1,19 @@ +package it.myti.academy.backend.service; + +import it.myti.academy.backend.model.EventoParticle; +import it.myti.academy.backend.model.Spedizione; +import it.myti.academy.backend.model.UnitaLogistica; +import it.myti.academy.backend.model.Utente; +import it.myti.academy.backend.model.resp.UnitaLogisticaDettaglio; + +import java.util.List; + +public interface UnitaLogisticaService { + List getUnitaLogisticheInViaggioByUtente(Utente utente); + + UnitaLogisticaDettaglio getUnitaLogisticaDetail(Long id); + + Spedizione getSpedizioneCorrente(UnitaLogistica u); + + EventoParticle getLatestEvento(UnitaLogistica u); +} diff --git a/src/main/java/it/myti/academy/backend/service/impl/ColloServiceImpl.java b/src/main/java/it/myti/academy/backend/service/impl/ColloServiceImpl.java index ac6d87d..8f8d840 100644 --- a/src/main/java/it/myti/academy/backend/service/impl/ColloServiceImpl.java +++ b/src/main/java/it/myti/academy/backend/service/impl/ColloServiceImpl.java @@ -1,12 +1,14 @@ package it.myti.academy.backend.service.impl; +import it.myti.academy.backend.model.Collo; import it.myti.academy.backend.model.Utente; import it.myti.academy.backend.repository.ColloRepository; +import it.myti.academy.backend.repository.UtenteRepository; import it.myti.academy.backend.service.ColloService; -import it.myti.academy.backend.model.Collo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.stream.Collectors; @@ -16,8 +18,23 @@ */ @Service public class ColloServiceImpl implements ColloService { + + private final ColloRepository colloRepository; + @Autowired + private UtenteRepository utenteRepository; + @Autowired - private ColloRepository colloRepository; + public ColloServiceImpl(ColloRepository colloRepository) { + this.colloRepository = colloRepository; + } + + @Override + public List getSpedizioniAttiveByUtente(Long utenteId) { + final Utente utente = utenteRepository.findById(utenteId).get(); + if (utente != null) + return getSpedizioniAttiveByUtente(utente); + return new ArrayList<>(); + } @Override public List getSpedizioniAttiveByUtente(Utente utente) { diff --git a/src/main/java/it/myti/academy/backend/service/impl/EventoServiceImpl.java b/src/main/java/it/myti/academy/backend/service/impl/EventoServiceImpl.java new file mode 100644 index 0000000..96d28a6 --- /dev/null +++ b/src/main/java/it/myti/academy/backend/service/impl/EventoServiceImpl.java @@ -0,0 +1,36 @@ +package it.myti.academy.backend.service.impl; + +import it.myti.academy.backend.model.Collo; +import it.myti.academy.backend.model.Evento; +import it.myti.academy.backend.model.Utente; +import it.myti.academy.backend.repository.ColloRepository; +import it.myti.academy.backend.service.EventoService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; + +@Service +public class EventoServiceImpl implements EventoService { + + private final ColloRepository colli; + + @Autowired + public EventoServiceImpl(ColloRepository colli) { + this.colli = colli; + } + + @Override + public List getEventiByUtente(Utente utente, Long idSpedizione, Long idUL) { + final List allByUtente = colli.findAllByUtente(utente); + return allByUtente.stream() + .filter(collo -> idSpedizione == null || collo.getSpedizione().getId().equals(idSpedizione)) + .filter(collo -> idUL == null || collo.getUnitaLogistica().getId().equals(idUL)) + .map(Collo::getEventi) + .flatMap(Collection::stream) + .collect(Collectors.toList()); + } + +} diff --git a/src/main/java/it/myti/academy/backend/service/impl/HelloWorldServiceImpl.java b/src/main/java/it/myti/academy/backend/service/impl/HelloWorldServiceImpl.java deleted file mode 100644 index 17f4dea..0000000 --- a/src/main/java/it/myti/academy/backend/service/impl/HelloWorldServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package it.myti.academy.backend.service.impl; - -import it.myti.academy.backend.service.HelloWorldService; -import org.springframework.stereotype.Service; - -/** - * Created by david at 2019-02-19 - */ -@Service -public class HelloWorldServiceImpl implements HelloWorldService { - @Override - public String sayHello() { - return "Hello"; - } - - @Override - public String sayHello(String who) { - return String.format("Hello %s!", who); - } -} diff --git a/src/main/java/it/myti/academy/backend/service/impl/UnitaLogisticaServiceImpl.java b/src/main/java/it/myti/academy/backend/service/impl/UnitaLogisticaServiceImpl.java new file mode 100644 index 0000000..1c6c0b8 --- /dev/null +++ b/src/main/java/it/myti/academy/backend/service/impl/UnitaLogisticaServiceImpl.java @@ -0,0 +1,77 @@ +package it.myti.academy.backend.service.impl; + +import it.myti.academy.backend.model.*; +import it.myti.academy.backend.model.resp.UnitaLogisticaDettaglio; +import it.myti.academy.backend.repository.UnitaLogisticaRepository; +import it.myti.academy.backend.service.ColloService; +import it.myti.academy.backend.service.UnitaLogisticaService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +@Service +public class UnitaLogisticaServiceImpl implements UnitaLogisticaService { + + private final ColloService colli; + private final UnitaLogisticaRepository ulr; + + @Autowired + public UnitaLogisticaServiceImpl(ColloService colli, UnitaLogisticaRepository ulr) { + this.colli = colli; + this.ulr = ulr; + } + + @Override + public List getUnitaLogisticheInViaggioByUtente(Utente utente) { + return colli.getSpedizioniAttiveByUtente(utente).stream() + .map(Collo::getUnitaLogistica) + .collect(Collectors.toList()); + } + + @Override + public UnitaLogisticaDettaglio getUnitaLogisticaDetail(Long id) { + UnitaLogistica element = ulr.findById(id).get(); + EventoParticle e = this.getLatestEvento(element); + return new UnitaLogisticaDettaglio( + element, + element.getSpedizioniFatte() + .stream() + .filter(collo -> collo.getSpedizione().getArrivoIl().after(new Date())) + .map(collo -> collo.getContenuti()) + .flatMap(x -> x.stream()) + .collect(Collectors.toList()), + element.getId(), + element.getCodice(), + element.getStato(), + e.getTemperatura(), + e.getUmidita(), + e.getLatitudine().toString(), + e.getLongitudine().toString(), + this.getSpedizioneCorrente(element) + ); + } + + @Override + public Spedizione getSpedizioneCorrente(UnitaLogistica u) { + return ulr.findById(u.getId()).get().getSpedizioniFatte() + .stream() + .filter(collo -> collo.getSpedizione().getArrivoIl().after(new Date())) + .map(Collo::getSpedizione) + .findFirst().get(); + } + + @Override + public EventoParticle getLatestEvento(UnitaLogistica u) { + return (EventoParticle) u.getSpedizioniFatte() + .stream() + .filter(collo -> collo.getSpedizione().getArrivoIl().after(new Date())) + .map(collo -> collo.getEventi() + .stream() + .filter(element -> element instanceof EventoParticle) + .max((a, b) -> a.getRicevutoIl().compareTo(b.getRicevutoIl())).get() + ).findFirst().get(); + } +} diff --git a/src/main/java/it/myti/academy/backend/service/impl/UserDetailsServiceImpl.java b/src/main/java/it/myti/academy/backend/service/impl/UserDetailsServiceImpl.java new file mode 100644 index 0000000..3820863 --- /dev/null +++ b/src/main/java/it/myti/academy/backend/service/impl/UserDetailsServiceImpl.java @@ -0,0 +1,32 @@ +package it.myti.academy.backend.service.impl; + +import it.myti.academy.backend.model.Utente; +import it.myti.academy.backend.repository.UtenteRepository; +import org.springframework.security.core.userdetails.User; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.stereotype.Service; + +import static java.util.Collections.emptyList; + +/** + * Created by david at 2019-03-20 + */ +@Service +public class UserDetailsServiceImpl implements UserDetailsService { + private UtenteRepository applicationUserRepository; + + public UserDetailsServiceImpl(UtenteRepository applicationUserRepository) { + this.applicationUserRepository = applicationUserRepository; + } + + @Override + public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { + Utente applicationUser = applicationUserRepository.findByUsername(username); + if (applicationUser == null) { + throw new UsernameNotFoundException(username); + } + return new User(applicationUser.getUsername(), applicationUser.getPassword(), emptyList()); + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties new file mode 100644 index 0000000..33cdaaf --- /dev/null +++ b/src/main/resources/application.properties @@ -0,0 +1,14 @@ +spring.h2.console.enabled=true +spring.h2.console.path=/h2-console +spring.jpa.hibernate.ddl-auto=create-drop +spring.jpa.database-platform=org.hibernate.dialect.H2Dialect +spring.datasource.url=jdbc:h2:mem:academy +spring.datasource.driverClassName=org.h2.Driver +spring.datasource.username=sa +spring.datasource.password= +server.port=9090 +jwt.expiration=3600000L +jwt.token_prefix=Giorgio +test.jwt.header=Authorization +jwt.header_string=Authorization +jwt.secret=ErnestoEnricoLoannaMariaPeritia \ No newline at end of file diff --git a/src/main/resources/data-franco.sql b/src/main/resources/data-franco.sql deleted file mode 100644 index 7a6c681..0000000 --- a/src/main/resources/data-franco.sql +++ /dev/null @@ -1,15 +0,0 @@ -INSERT INTO utenti (`id`, `username`, `password`, `nome`) -VALUES - (1, 'logistic@galbanino.it', 'ciaociao123', 'Logistica Galbanino'); - -INSERT INTO tipologie_eventi (`id`, `nome`, `descrizione`) -VALUES - (1, 'EVENTO PRATICLE', 'Evento proveniente da Particle'), - (2, 'EVENTO HANNIBAL', 'Evento proveniente da Hannibal'); - -INSERT INTO stati_unita_logistiche (`id`, `nome`, `descrizione`) -VALUES - ( 1, 'NORMALE', 'Unità funzionante che può essere usata' ), - ( 2, 'ROTTA', 'Unità rotta' ), - ( 3, 'IN VIAGGIO', 'Unità in viaggio' ), - ( 4, 'IN ATTESA', 'Unità in attesa' ); \ 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..526c63b --- /dev/null +++ b/src/main/resources/data.sql @@ -0,0 +1,44 @@ +INSERT INTO utenti (`id`, `username`, `password`, `nome`) +VALUES (1, 'logistic@galbanino.it', 'ciaociao123', 'Logistica Galbanino'); + +INSERT INTO tipologie_eventi (`id`, `nome`, `descrizione`) +VALUES (1, 'EVENTO PRATICLE', 'Evento proveniente da Particle'), + (2, 'EVENTO HANNIBAL', 'Evento proveniente da Hannibal'); + +INSERT INTO stati_unita_logistiche (`id`, `nome`, `descrizione`) +VALUES (1, 'NORMALE', 'Unità funzionante che può essere usata'), + (2, 'ROTTA', 'Unità rotta'), + (3, 'IN VIAGGIO', 'Unità in viaggio'), + (4, 'IN ATTESA', 'Unità in attesa'); + +INSERT INTO unita_logistiche (`id`, `codice`, `id_esterno`, `temp_massima`, `temp_minima`, `stato_id`) +VALUES (1, 'AAAA', 'UL2', 12, -12, 1); + +INSERT INTO spedizioni (`id`, `codice_treno`, `partenza_il`, `partenza_da`, `arrivo_il`, `arrivo_a`) +VALUES (1, 'TRAIN_AAAA', '2019-02-01', 'BRESCIA', '2020-02-03', 'MILANO'); + +INSERT INTO colli (`id`, `unita_logistica_id`, `spedizione_id`, `utente_id`) +VALUES (1, 1, 1, 1); + +INSERT INTO eventi (`id`, `ricevuto_il`, `evento_tipo_id`, `collo_id`, `evento_tipo_dettaglio`) +VALUES (1, '2019-02-01 10:30:04', 2, 1, 2), + (2, '2019-02-01 10:30:34', 1, 1, 1), + (3, '2019-02-01 10:40:34', 1, 1, 1), + (4, '2019-02-01 10:50:34', 1, 1, 1), + (5, '2019-02-01 11:00:34', 1, 1, 1), + (6, '2019-02-01 11:10:34', 1, 1, 1); + +INSERT INTO eventi_hannibal (`id`, `codice_evento`, `codice_treno`) +VALUES (1, 'EPARTE', '0000010123'); + +INSERT INTO eventi_particle (`id`, `temperatura`, `umidita`, `porta_aperta`, `latitudine`, `longitudine`, `accuratezza`) +VALUES (2, 2.1, 80.6, 0, 45.556556, 10.216596, 100), + (3, 2.7, 81.0, 0, 45.556556, 10.216596, 100), + (4, 2.56, 80.8, 0, 45.556556, 10.216596, 100), + (5, 2.82, 80.3, 0, 45.556556, 10.216596, 100), + (6, 2.93, 79.9, 0, 45.556556, 10.216596, 100); + +INSERT INTO contenuti (`id`, `nome`, `descrizione`, `temperatura_minima_ricchiesta`, `temperatura_massima_ricchiesta`, + `quantita`, `unita_di_misura`, `collo_id`) +VALUES (1, 'CAVOLO CAPPUCCIO', 'Detto anche verza', 2, 5, 10, 'kg', 1), + (2, 'STRACCHINO', 'Detto anche robbiola', 2, 3, 20, 'kg', 1); \ No newline at end of file diff --git a/src/test/java/it/myti/academy/backend/BackendApplicationTests.java b/src/test/java/it/myti/academy/backend/BackendApplicationTests.java index e10beeb..35287f4 100644 --- a/src/test/java/it/myti/academy/backend/BackendApplicationTests.java +++ b/src/test/java/it/myti/academy/backend/BackendApplicationTests.java @@ -2,18 +2,16 @@ import org.junit.Test; import org.junit.runner.RunWith; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit4.SpringRunner; -//@RunWith(SpringRunner.class) -//@SpringBootTest() -//public class BackendApplicationTests { -// -// @Test -// public void contextLoads() { -// } -// -//} +@RunWith(SpringRunner.class) +@SpringBootTest() +public class BackendApplicationTests { + + @Test + public void contextLoads() { + } + +} diff --git a/src/test/java/it/myti/academy/backend/controller/ColliControllerTest.java b/src/test/java/it/myti/academy/backend/controller/ColliControllerTest.java new file mode 100644 index 0000000..3b1167b --- /dev/null +++ b/src/test/java/it/myti/academy/backend/controller/ColliControllerTest.java @@ -0,0 +1,27 @@ +package it.myti.academy.backend.controller; + +import org.junit.Before; +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.security.test.context.support.WithMockUser; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; + +import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +public class ColliControllerTest extends Controller_setup{ + + @Test + @WithMockUser("SPRINGTEST") + public void getByUtenteTest() throws Exception { + mvc.perform( + get("/eventi/") + ).andExpect(status().isOk()); + } +} diff --git a/src/test/java/it/myti/academy/backend/controller/Controller_setup.java b/src/test/java/it/myti/academy/backend/controller/Controller_setup.java new file mode 100644 index 0000000..4fc33b6 --- /dev/null +++ b/src/test/java/it/myti/academy/backend/controller/Controller_setup.java @@ -0,0 +1,29 @@ +package it.myti.academy.backend.controller; + +import org.junit.Before; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; + +import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity; + +@RunWith(SpringRunner.class) +@SpringBootTest +public abstract class Controller_setup { + @Autowired + private WebApplicationContext context; + + protected MockMvc mvc; + + @Before + public void setup() { + mvc = MockMvcBuilders + .webAppContextSetup(context) + .apply(springSecurity()) + .build(); + } +} diff --git a/src/test/java/it/myti/academy/backend/controller/EventiControllerTest.java b/src/test/java/it/myti/academy/backend/controller/EventiControllerTest.java new file mode 100644 index 0000000..8d0ba22 --- /dev/null +++ b/src/test/java/it/myti/academy/backend/controller/EventiControllerTest.java @@ -0,0 +1,28 @@ +package it.myti.academy.backend.controller; + +import org.junit.Before; +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.security.test.context.support.WithMockUser; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; + +import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + + +public class EventiControllerTest extends Controller_setup { + + @Test + @WithMockUser("SPRINGTEST") + public void getByUtenteTest() throws Exception { + mvc.perform( + get("/colli/") + ).andExpect(status().isOk()); + } +} diff --git a/src/test/java/it/myti/academy/backend/controller/HelloWorldControllerTest.java b/src/test/java/it/myti/academy/backend/controller/HelloWorldControllerTest.java deleted file mode 100644 index 3e688fb..0000000 --- a/src/test/java/it/myti/academy/backend/controller/HelloWorldControllerTest.java +++ /dev/null @@ -1,63 +0,0 @@ -package it.myti.academy.backend.controller; - -import it.myti.academy.backend.service.HelloWorldService; -import it.myti.academy.backend.service.impl.HelloWorldServiceImpl; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; -import org.springframework.boot.test.context.TestConfiguration; -import org.springframework.context.annotation.Bean; -import org.springframework.http.MediaType; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; - -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - -/** - * Created by david at 2019-02-19 - */ -@RunWith(SpringRunner.class) -@WebMvcTest(HelloWorldController.class) -public class HelloWorldControllerTest { - - @TestConfiguration - static class EmployeeServiceImplTestContextConfiguration { - - @Bean - public HelloWorldService employeeService() { - return new HelloWorldServiceImpl(); - } - } - - - @Autowired //2 - private MockMvc mockMvc; - - @Test - public void hello() throws Exception { - final String returnString = "Hello"; - - final MockHttpServletRequestBuilder requestBuilder = get("/hello").contentType(MediaType.TEXT_PLAIN); - mockMvc.perform(requestBuilder) - .andExpect(status().isOk()) - .andExpect(content().string(returnString)); - } - - @Test - public void helloPOST() throws Exception { - final String paramStr = "MESSGE"; - final String expected = "Hello " + paramStr + "!"; - - final MockHttpServletRequestBuilder requestBuilder = post("/hello") - .contentType(MediaType.APPLICATION_JSON) - .content(paramStr); - mockMvc.perform(requestBuilder) - .andExpect(status().isOk()) - .andExpect(content().string(expected)); - } -} \ No newline at end of file diff --git a/src/test/java/it/myti/academy/backend/controller/UnitaLogisticheControllerTest.java b/src/test/java/it/myti/academy/backend/controller/UnitaLogisticheControllerTest.java new file mode 100644 index 0000000..ff13f84 --- /dev/null +++ b/src/test/java/it/myti/academy/backend/controller/UnitaLogisticheControllerTest.java @@ -0,0 +1,33 @@ +package it.myti.academy.backend.controller; + +import org.junit.Test; +import org.springframework.security.test.context.support.WithMockUser; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +public class UnitaLogisticheControllerTest extends Controller_setup{ + + @Test + @WithMockUser("SPRINGTEST") + public void getByUtenteTest() throws Exception { + mvc.perform( + get("/unitalogistiche/") + ).andExpect(status().isOk()); + } + + @Test + public void getByUtenteTest_notlogged() throws Exception { + mvc.perform( + get("/unitalogistiche/") + ).andExpect(status().isForbidden()); + } + + @Test + @WithMockUser("SPRINGTEST") + public void getById() throws Exception { + mvc.perform( + get("/unitalogistiche/1") + ).andExpect(status().isOk()); + } +} diff --git a/src/test/java/it/myti/academy/backend/controller/UtentiControllerTest.java b/src/test/java/it/myti/academy/backend/controller/UtentiControllerTest.java new file mode 100644 index 0000000..ab6627c --- /dev/null +++ b/src/test/java/it/myti/academy/backend/controller/UtentiControllerTest.java @@ -0,0 +1,47 @@ +package it.myti.academy.backend.controller; + +import it.myti.academy.backend.model.req.NewUtente; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.MediaType; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; + +import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class UtentiControllerTest { + + @Autowired + private WebApplicationContext context; + + private MockMvc mvc; + + @Before + public void setup() { + mvc = MockMvcBuilders + .webAppContextSetup(context) + .apply(springSecurity()) + .build(); + } + + @Test + public void sign_up() throws Exception { + mvc.perform( + post("/utenti/sign-up") + .contentType(MediaType.APPLICATION_JSON) + .content("{\"nome\": \"Logistica Galbanino\", \"username\": \"logistic@galbanino.it\", \"password\": \"ciaociao123\"}")) + .andExpect(status().isOk()); + } +} \ No newline at end of file diff --git a/src/test/java/it/myti/academy/backend/model/UtenteTest.java b/src/test/java/it/myti/academy/backend/model/UtenteTest.java new file mode 100644 index 0000000..ebd943e --- /dev/null +++ b/src/test/java/it/myti/academy/backend/model/UtenteTest.java @@ -0,0 +1,92 @@ +package it.myti.academy.backend.model; + +import org.junit.Before; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; + +/** + * Created by david at 2019-02-21 + */ +public class UtenteTest { + public static final long ID = 1L; + public static final String USERNAME = "FFranchi"; + public static final String PASSWORD = "Franchi"; + public static final String NOME = "Franco"; + Utente u = new Utente(); + private List colli; + private Collo collo; + + @Before + public void setUp() throws Exception { + u.setId(ID); + u.setNome(NOME); + u.setPassword(PASSWORD); + u.setUsername(USERNAME); + + colli = new ArrayList<>(); + collo = new Collo(); + colli.add(collo); + u.setSpedizioniFatte(colli); + + } + + @Test + public void getId() { + assertEquals(1L, u.getId().longValue()); + } + + @Test + public void getUsername() { + assertEquals(USERNAME, u.getUsername()); + } + + @Test + public void getPassword() { + assertEquals(PASSWORD, u.getPassword()); + } + + @Test + public void getNome() { + assertEquals(NOME, u.getNome()); + } + + @Test + public void getSpedizioniFatte() { + assertEquals(colli, u.getSpedizioniFatte()); + } + + @Test + public void setId() { + u.setId(2L); + assertNotEquals(ID, u.getId().longValue()); + } + + @Test + public void setUsername() { + u.setUsername("RMario"); + assertNotEquals(USERNAME, u.getUsername()); + } + + @Test + public void setPassword() { + u.setPassword("Rossi"); + assertNotEquals(PASSWORD, u.getPassword()); + } + + @Test + public void setNome() { + u.setNome("Mario"); + assertNotEquals(NOME, u.getNome()); + } + + @Test + public void setSpedizioniFatte() { + u.setSpedizioniFatte(null); + assertNotEquals(colli, u.getSpedizioniFatte()); + } +} \ No newline at end of file diff --git a/src/test/java/it/myti/academy/backend/service/impl/ColloServiceImplTest.java b/src/test/java/it/myti/academy/backend/service/impl/ColloServiceImplTest.java index b410839..c030e6e 100644 --- a/src/test/java/it/myti/academy/backend/service/impl/ColloServiceImplTest.java +++ b/src/test/java/it/myti/academy/backend/service/impl/ColloServiceImplTest.java @@ -12,7 +12,8 @@ import java.util.List; -import static org.junit.Assert.*; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; /** * Created by david at 2019-02-20 diff --git a/src/test/java/it/myti/academy/backend/service/impl/EventoServiceImplTest.java b/src/test/java/it/myti/academy/backend/service/impl/EventoServiceImplTest.java new file mode 100644 index 0000000..be2d52a --- /dev/null +++ b/src/test/java/it/myti/academy/backend/service/impl/EventoServiceImplTest.java @@ -0,0 +1,56 @@ +package it.myti.academy.backend.service.impl; + +import it.myti.academy.backend.model.Evento; +import it.myti.academy.backend.model.Utente; +import it.myti.academy.backend.repository.ColloRepository; +import it.myti.academy.backend.repository.UtenteRepository; +import it.myti.academy.backend.service.EventoService; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.test.context.junit4.SpringRunner; + +import java.util.List; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; + +@DataJpaTest +@RunWith(SpringRunner.class) +public class EventoServiceImplTest { + + @Autowired + UtenteRepository utenti; + @Autowired + EventoService eventi; //It says it's an error but it works ¯\_(ツ)_/¯ + + @Test + public void getEventiByUtente() { + Utente u = utenti.findById(1L).get(); + assertNotNull(u); + List evt = eventi.getEventiByUtente(u, 1L, 1L); + assertNotNull(evt); + assertFalse(evt.isEmpty()); + + //TODO: Check contenuto + } + + @TestConfiguration + static class __ { + + private final ColloRepository collo; + + @Autowired + public __(ColloRepository collo) { + this.collo = collo; + } + + @Bean + public EventoService init() { + return new EventoServiceImpl(collo); + } + } +} \ No newline at end of file diff --git a/src/test/java/it/myti/academy/backend/service/impl/UnitaLogisticaServiceImplTest.java b/src/test/java/it/myti/academy/backend/service/impl/UnitaLogisticaServiceImplTest.java new file mode 100644 index 0000000..60eabdf --- /dev/null +++ b/src/test/java/it/myti/academy/backend/service/impl/UnitaLogisticaServiceImplTest.java @@ -0,0 +1,91 @@ +package it.myti.academy.backend.service.impl; + +import it.myti.academy.backend.model.Evento; +import it.myti.academy.backend.model.Spedizione; +import it.myti.academy.backend.model.UnitaLogistica; +import it.myti.academy.backend.model.Utente; +import it.myti.academy.backend.model.resp.UnitaLogisticaDettaglio; +import it.myti.academy.backend.repository.ColloRepository; +import it.myti.academy.backend.repository.UnitaLogisticaRepository; +import it.myti.academy.backend.repository.UtenteRepository; +import it.myti.academy.backend.service.ColloService; +import it.myti.academy.backend.service.UnitaLogisticaService; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.test.context.junit4.SpringRunner; + +import java.util.Date; +import java.util.List; + +import static org.junit.Assert.*; + +@DataJpaTest +@RunWith(SpringRunner.class) +public class UnitaLogisticaServiceImplTest { + + @Autowired + UtenteRepository utenti; + @Autowired + UnitaLogisticaService uls; //It says it's an error but it works ¯\_(ツ)_/¯ + + @Test + public void getUnitaLogisticheInViaggioByUtente() { + Utente u = utenti.findById(1L).get(); + assertNotNull(u); + List ul = uls.getUnitaLogisticheInViaggioByUtente(u); + assertNotNull(ul); + assertFalse(ul.isEmpty()); + + //TODO: Check contenuto + } + + @Test + public void getUnitaLogisticaDetail() { + UnitaLogisticaDettaglio ul = uls.getUnitaLogisticaDetail(1L); + assertNotNull(ul); + + //TODO: checks and co + } + + @Test + public void getSpedizioneCorrente() { + UnitaLogisticaDettaglio ul = uls.getUnitaLogisticaDetail(1L); + Spedizione s = uls.getSpedizioneCorrente(ul.ref); + assertNotNull(s); + assertTrue(s.getArrivoIl().after(new Date())); + } + + @Test + public void getLatestEvento() { + UnitaLogisticaDettaglio ul = uls.getUnitaLogisticaDetail(1L); + Evento e = uls.getLatestEvento(ul.ref); + assertNotNull(e); + } + + @TestConfiguration + static class __ { + + private final ColloRepository collo; + private final UnitaLogisticaRepository ulr; + + @Autowired + public __(ColloRepository collo, UnitaLogisticaRepository ulr) { + this.collo = collo; + this.ulr = ulr; + } + + @Bean + public ColloService collo_init() { + return new ColloServiceImpl(collo); + } + + @Bean + public UnitaLogisticaService ul_init() { + return new UnitaLogisticaServiceImpl(collo_init(), ulr); + } + } +} \ No newline at end of file diff --git a/src/test/resources/application.test.properties b/src/test/resources/application.test.properties new file mode 100644 index 0000000..97f88d9 --- /dev/null +++ b/src/test/resources/application.test.properties @@ -0,0 +1,9 @@ +spring.h2.console.enabled=true +spring.h2.console.path=/h2-console +spring.jpa.hibernate.ddl-auto=create-drop +spring.jpa.database-platform=org.hibernate.dialect.H2Dialect +spring.datasource.url=jdbc:h2:mem:accademy-test;DB_CLOSE_DELAY=-1 +spring.datasource.driverClassName=org.h2.Driver +spring.datasource.username=sa +spring.datasource.password= +jwt.secret=MY-SECRET-KEY \ No newline at end of file diff --git a/src/test/resources/data-test.sql b/src/test/resources/data-test.sql new file mode 100644 index 0000000..f9b2600 --- /dev/null +++ b/src/test/resources/data-test.sql @@ -0,0 +1,21 @@ +INSERT INTO utenti (`id`, `username`, `password`, `nome`) +VALUES (1, 'logistic@galbanino.it', 'ciaociao123', 'Logistica Galbanino'); + +INSERT INTO tipologie_eventi (`id`, `nome`, `descrizione`) +VALUES (1, 'EVENTO PRATICLE', 'Evento proveniente da Particle'), + (2, 'EVENTO HANNIBAL', 'Evento proveniente da Hannibal'); + +INSERT INTO stati_unita_logistiche (`id`, `nome`, `descrizione`) +VALUES (1, 'NORMALE', 'Unità funzionante che può essere usata'), + (2, 'ROTTA', 'Unità rotta'), + (3, 'IN VIAGGIO', 'Unità in viaggio'), + (4, 'IN ATTESA', 'Unità in attesa'); + +INSERT INTO unita_logistiche (`id`, `codice`, `id_esterno`, `temp_massima`, `temp_minima`, `stato_id`) +VALUES (1, 'AAAA', 'UL2', 12, -12, 1); + +INSERT INTO spedizioni (`id`, `codice_treno`, `partenza_il`, `partenza_da`, `arrivo_il`, `arrivo_a`) +VALUES (1, 'TRAIN_AAAA', '2019-02-01', 'BRESCIA', '2019-02-03', 'MILANO'); + +INSERT INTO colli (`id`, `unita_logistica_id`, `spedizione_id`, `utente_id`) +VALUES (1, 1, 1, 1); \ No newline at end of file diff --git a/src/test/resources/data.sql b/src/test/resources/data.sql deleted file mode 100644 index 887e8ea..0000000 --- a/src/test/resources/data.sql +++ /dev/null @@ -1,25 +0,0 @@ -INSERT INTO utenti (`id`, `username`, `password`, `nome`) -VALUES - (1, 'logistic@galbanino.it', 'ciaociao123', 'Logistica Galbanino'); - -INSERT INTO tipologie_eventi (`id`, `nome`, `descrizione`) -VALUES - (1, 'EVENTO PRATICLE', 'Evento proveniente da Particle'), - (2, 'EVENTO HANNIBAL', 'Evento proveniente da Hannibal'); - -INSERT INTO stati_unita_logistiche (`id`, `nome`, `descrizione`) -VALUES - ( 1, 'NORMALE', 'Unità funzionante che può essere usata' ), - ( 2, 'ROTTA', 'Unità rotta' ), - ( 3, 'IN VIAGGIO', 'Unità in viaggio' ), - ( 4, 'IN ATTESA', 'Unità in attesa' ); - -INSERT INTO unita_logistiche (`id`, `codice`, `id_esterno`, `temp_massima`, `temp_minima`, `stato_id`) -VALUES ( 1, 'AAAA', 'UL2', 12, -12, 1); - -INSERT INTO spedizioni (`id`, `codice_treno`, `partenza_il`, `partenza_da`, `arrivo_il`, `arrivo_a`) -VALUES - (1, 'TRAIN_AAAA', '2019-02-01', 'BRESCIA', '2019-02-03', 'MILANO'); - -INSERT INTO colli (`id`, `unita_logistica_id`, `spedizione_id`, `utente_id`) -VALUES ( 1, 1, 1, 1); \ No newline at end of file diff --git a/tmp/application-integrationtest.properties b/tmp/application-integrationtest.properties deleted file mode 100644 index e69de29..0000000