diff --git a/src/main/java/br/com/projeto/peletronico/modelo/Cargo.java b/src/main/java/br/com/projeto/peletronico/modelo/Cargo.java deleted file mode 100644 index c6fee54..0000000 --- a/src/main/java/br/com/projeto/peletronico/modelo/Cargo.java +++ /dev/null @@ -1,24 +0,0 @@ -package br.com.projeto.peletronico.modelo; - -public class Cargo { - - private Long id; - private String nome; - - 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; - } - -} diff --git a/src/main/java/br/com/projeto/peletronico/modelo/Formulario.java b/src/main/java/br/com/projeto/peletronico/modelo/Formulario.java deleted file mode 100644 index ec82cd8..0000000 --- a/src/main/java/br/com/projeto/peletronico/modelo/Formulario.java +++ /dev/null @@ -1,68 +0,0 @@ -package br.com.projeto.peletronico.modelo; - -import java.time.LocalDate; -import java.time.LocalTime; - -public class Formulario { - - private String nome; - private String cpf; - private LocalDate data; - private LocalTime horaEntrada_1; - private LocalTime horaSaida_1; - private LocalTime horaEntrada_2; - private LocalTime horaSaida_2; - private String nomeCargo; - - public Formulario(String nome, String cpf, LocalDate data, LocalTime horaEntrada_1, LocalTime horaSaida_1, - LocalTime horaEntrada_2, LocalTime horaSaida_2, String nomeCargo) { - this.data = data; - this.horaEntrada_1 = horaEntrada_1; - this.horaSaida_1 = horaSaida_1; - this.horaEntrada_2 = horaEntrada_2; - this.horaSaida_2 = horaSaida_2; - this.nome = nome; - this.cpf = cpf; - this.nomeCargo = nomeCargo; - } - - public String getNome() { - return nome; - } - - public String getCpf() { - return cpf; - } - - public LocalDate getData() { - return data; - } - - public LocalTime getHoraEntrada_1() { - return horaEntrada_1; - } - - public LocalTime getHoraSaida_1() { - return horaSaida_1; - } - - public LocalTime getHoraEntrada_2() { - return horaEntrada_2; - } - - public LocalTime getHoraSaida_2() { - return horaSaida_2; - } - - public String getNomeCargo() { - return nomeCargo; - } - - @Override - public String toString() { - return "Formulario [nome = " + nome + ", cpf = " + cpf + ", data = " + data + ", horaEntrada_1 = " + horaEntrada_1 - + ", horaSaida_1 = " + horaSaida_1 + ", horaEntrada_2 = " + horaEntrada_2 + ", horaSaida_2 = " + horaSaida_2 - + ", nomeCargo = " + nomeCargo + "]"; - } - -} diff --git a/src/main/java/br/com/projeto/peletronico/modelo/Funcionario.java b/src/main/java/br/com/projeto/peletronico/modelo/Funcionario.java deleted file mode 100644 index 20c2f82..0000000 --- a/src/main/java/br/com/projeto/peletronico/modelo/Funcionario.java +++ /dev/null @@ -1,68 +0,0 @@ -package br.com.projeto.peletronico.modelo; - -import java.time.LocalDate; -import java.util.List; - -import javax.persistence.CascadeType; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.ManyToOne; -import javax.persistence.OneToMany; -import javax.persistence.Table; - -public class Funcionario { - - private Long id; - private String nome; - private LocalDate dataNascimento; - private String cpf; - @ManyToOne - private Cargo cargo; - @OneToMany(mappedBy = "funcionario", cascade = CascadeType.ALL) - private List pontos; - - public void cadastrar(Ponto ponto) { - ponto.setFuncionario(this); - this.pontos.add(ponto); - - } - - 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 LocalDate getDataNascimento() { - return dataNascimento; - } - - public void setDataNascimento(LocalDate dataNascimento) { - this.dataNascimento = dataNascimento; - } - - public String getCpf() { - return cpf; - } - - public void setCpf(String cpf) { - this.cpf = cpf; - } - - public void setCargo(Cargo cargo) { - this.cargo = cargo; - } - -} diff --git a/src/main/java/br/com/projeto/peletronico/modelo/Ponto.java b/src/main/java/br/com/projeto/peletronico/modelo/Ponto.java deleted file mode 100644 index dbb415a..0000000 --- a/src/main/java/br/com/projeto/peletronico/modelo/Ponto.java +++ /dev/null @@ -1,77 +0,0 @@ -package br.com.projeto.peletronico.modelo; - -import java.time.LocalDate; -import java.time.LocalTime; - -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.ManyToOne; -import javax.persistence.Table; -public class Ponto { - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - private LocalDate data; - private LocalTime horaEntrada_1; - private LocalTime horaSaida_1; - private LocalTime horaEntrada_2; - private LocalTime horaSaida_2; - @ManyToOne - private Funcionario funcionario; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public LocalDate getData() { - return data; - } - - public void setData(LocalDate data) { - this.data = data; - } - - public LocalTime getHoraEntrada_1() { - return horaEntrada_1; - } - - public void setHoraEntrada_1(LocalTime horaEntrada_1) { - this.horaEntrada_1 = horaEntrada_1; - } - - public LocalTime getHoraSaida_1() { - return horaSaida_1; - } - - public void setHoraSaida_1(LocalTime horaSaida_1) { - this.horaSaida_1 = horaSaida_1; - } - - public LocalTime getHoraEntrada_2() { - return horaEntrada_2; - } - - public void setHoraEntrada_2(LocalTime horaEntrada_2) { - this.horaEntrada_2 = horaEntrada_2; - } - - public LocalTime getHoraSaida_2() { - return horaSaida_2; - } - - public void setHoraSaida_2(LocalTime horaSaida_2) { - this.horaSaida_2 = horaSaida_2; - } - - public void setFuncionario(Funcionario funcionario) { - this.funcionario = funcionario; - } - -} diff --git a/src/main/java/br/com/projeto/peletronico/service/AssinarPonto.java b/src/main/java/br/com/projeto/peletronico/service/AssinarPonto.java deleted file mode 100644 index b68b9e6..0000000 --- a/src/main/java/br/com/projeto/peletronico/service/AssinarPonto.java +++ /dev/null @@ -1,85 +0,0 @@ -package br.com.projeto.peletronico.service; - -import java.time.LocalDate; -import java.time.LocalTime; -import java.util.Scanner; - -import org.springframework.stereotype.Service; - -import br.com.projeto.peletronico.modelo.Funcionario; -import br.com.projeto.peletronico.modelo.Ponto; -import br.com.projeto.peletronico.repository.FuncionarioRepository; -import br.com.projeto.peletronico.repository.PontoRepository; - -@Service -public class AssinarPonto { - // Injetei dependência; - private PontoRepository pontoRepository; - private FuncionarioRepository funcionarioRepository; - private boolean system = true; - private Ponto ponto; - - public AssinarPonto(PontoRepository pontoRepository, FuncionarioRepository funcionarioRepository) { - this.pontoRepository = pontoRepository; - this.funcionarioRepository = funcionarioRepository; - this.ponto = new Ponto(); - } - - - public void inserirInformacoes() { - Scanner scn = new Scanner(System.in); - - while (this.system) { - - System.out.println("1 - Marcar Hora de Entrada(Turno Matutino)"); - System.out.println("2 - Marcar Hora de Saida(Turno Matutino)"); - System.out.println("3 - Marcar Hora de Entrada(Turno Verpertino)"); - System.out.println("4 - Marcar Hora de Saida(Turno Verpertino)"); - System.out.println("0 - Sair"); - System.out.println(); - System.out.println("5 - Registrar no Sistema"); - - - int action = scn.nextInt(); - - switch (action) { - case 1: - this.ponto.setData(LocalDate.now()); - this.ponto.setHoraEntrada_1(LocalTime.now()); - System.out.println("Inserido! Agora aperte 5 para Registrar no Sistema."); - break; - - case 2: - this.ponto.setHoraSaida_1(LocalTime.now().plusHours(3L)); - System.out.println("Inserido! Agora aperte 5 para Registrar no Sistema."); - break; - - case 3: - this.ponto.setHoraEntrada_2(LocalTime.now().plusHours(4L)); - System.out.println("Inserido! Agora aperte 5 para Registrar no Sistema."); - break; - - case 4: - this.ponto.setHoraSaida_2(LocalTime.now().plusHours(8L)); - System.out.println("Inserido! Agora aperte 5 para Registrar no Sistema."); - break; - - case 5: - /*System.out.println("Digite Primeiro Nome: "); - String nomeFuncionario = scn.next(); - Funcionario funcionario = this.funcionarioRepository.procurarPorNome(nomeFuncionario); - this.ponto.setFuncionario(funcionario); - this.pontoRepository.save(this.ponto); - System.out.println("Registrado.");*/ - break; - - default: - this.system = false; - break; - } - - } - - } - -} diff --git a/src/main/java/br/com/projeto/peletronico/service/CadastrarFuncionario.java b/src/main/java/br/com/projeto/peletronico/service/CadastrarFuncionario.java deleted file mode 100644 index 67267ae..0000000 --- a/src/main/java/br/com/projeto/peletronico/service/CadastrarFuncionario.java +++ /dev/null @@ -1,66 +0,0 @@ -package br.com.projeto.peletronico.service; - -import java.time.LocalDate; -import java.util.Scanner; - -import org.springframework.stereotype.Service; - -import br.com.projeto.peletronico.modelo.Cargo; -import br.com.projeto.peletronico.modelo.Funcionario; -import br.com.projeto.peletronico.repository.CargoRepository; -import br.com.projeto.peletronico.repository.FuncionarioRepository; - -@Service -public class CadastrarFuncionario { - // Injetei dependência; - private final CargoRepository cargoRepository; - private final FuncionarioRepository funcionarioRepository; - private boolean system = true; - - public CadastrarFuncionario(CargoRepository cargoRepository, FuncionarioRepository funcionarioRepository) { - this.cargoRepository = cargoRepository; - this.funcionarioRepository = funcionarioRepository; - } - - public void cadastrar() { - Scanner scn = new Scanner(System.in); - - while(this.system) { - - System.out.println("Digite o nome: "); - String nome = scn.next(); - - System.out.println("Digite o CPF: "); - String cpf = scn.next(); - - System.out.println("Digite o Data Nascimento (yyyy-MM-dd): "); - String dataNascimento = scn.next(); - - System.out.println("Digite o Cargo: "); - String cargo = scn.next(); - - Cargo funcao = new Cargo(); - funcao.setNome(cargo.toString()); - - Funcionario funcionario = new Funcionario(); - funcionario.setCargo(funcao); - funcionario.setNome(nome.toString()); - funcionario.setCpf(cpf.toString()); - String dataString = dataNascimento.toString(); - LocalDate data = LocalDate.parse(dataString); - funcionario.setDataNascimento(data); - - /*this.cargoRepository.save(funcao); - this.funcionarioRepository.save(funcionario);*/ - - System.out.println("1 - Continuar"); - System.out.println("0 - Sair"); - int action = scn.nextInt(); - - if(action != 1) { - this.system = false; - - } - } - } -} diff --git a/src/main/java/br/com/projeto/peletronico/service/PontoService.java b/src/main/java/br/com/projeto/peletronico/service/PontoService.java index d8c63c7..4ae8a1e 100644 --- a/src/main/java/br/com/projeto/peletronico/service/PontoService.java +++ b/src/main/java/br/com/projeto/peletronico/service/PontoService.java @@ -19,11 +19,15 @@ @Service public class PontoService { - @Autowired private PontoRepository pontoRepository; - @Autowired private FuncionarioRepository funcionarioRepository; + @Autowired + public PontoService(PontoRepository pontoRepository,FuncionarioRepository funcionarioRepository ) { + this.pontoRepository = pontoRepository; + this.funcionarioRepository = funcionarioRepository; + } + public Optional localizarPonto(Long id) { Optional optionalPonto = this.pontoRepository.findById(id); @@ -38,10 +42,11 @@ public List localizarListaDePontos(Long funcionario_id) { public Ponto baterPonto(Long idFuncionario) { LocalDate data = LocalDate.now(); Optional optionalFuncionario = this.funcionarioRepository.findById(idFuncionario); - Funcionario funcionario = optionalFuncionario.get(); + if (optionalFuncionario.isPresent()) { List pontosDeHoje = this.pontoRepository.existePontoDeEntradaHoje(idFuncionario, data); + Funcionario funcionario = optionalFuncionario.get(); // Salvar if (pontosDeHoje.isEmpty()) { diff --git a/src/test/java/br/com/projeto/peletronico/service/CargoServiceTest.java b/src/test/java/br/com/projeto/peletronico/service/CargoServiceTest.java new file mode 100644 index 0000000..6b81e1f --- /dev/null +++ b/src/test/java/br/com/projeto/peletronico/service/CargoServiceTest.java @@ -0,0 +1,107 @@ +package br.com.projeto.peletronico.service; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import java.util.ArrayList; +import java.util.List; + +import org.assertj.core.api.Assertions; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; + +import br.com.projeto.peletronico.controller.dto.CargoForm; +import br.com.projeto.peletronico.domain.Cargo; +import br.com.projeto.peletronico.exception.NotFoundException; +import br.com.projeto.peletronico.repository.CargoRepository; + +class CargoServiceTest { + + private CargoService cargoService; + + @Mock + private CargoRepository cargoRepository; + + @BeforeEach + void inicializacao() { + MockitoAnnotations.openMocks(this); + this.cargoService = new CargoService(this.cargoRepository); + + } + + @Test + @DisplayName("Dado um cargoForm, ao passar como parâmetro um cargo já cadastrado, deve me entregar um exception") + void test001() { + + CargoForm cargoForm = new CargoForm(); + cargoForm.setNome("NomeDeCargo"); + + Mockito.when(this.cargoRepository.existsByNome(cargoForm.getNome())).thenReturn(true); + assertThatThrownBy(() -> { + throw new Exception("Cargo já cadastrado"); + }).hasMessage("Cargo já cadastrado"); + + } + + @Test + @DisplayName("Dado um cargoForm, ao passar como parâmetro um cargo não cadastrado, deve me entregar cargo cadastrado") + void test002() { + CargoForm cargoForm = new CargoForm(); + cargoForm.setNome("NomeDeCargo"); + + Cargo cargo = cargoForm.criarCargo(); + + Mockito.when(this.cargoRepository.existsByNome(cargoForm.getNome())).thenReturn(false); + Mockito.when(this.cargoRepository.save(cargo)).thenReturn(cargo); + + Cargo cargoCadastrado = this.cargoService.cadastrarCargo(cargoForm); + + Assertions.assertThat(cargoCadastrado).as("Deveria Cadastrar Cargo no BD").usingRecursiveComparison() + .isEqualTo(cargoCadastrado); + } + + @Test + @DisplayName("Dado que um cargo não existe no BD, deve me entregar um exception") + void test003() { + Mockito.when(this.cargoRepository.existsById(Long.parseLong("1"))).thenReturn(false); + assertThatThrownBy(() -> { + throw new NotFoundException("Cargo não existe"); + }).hasMessage("Cargo não existe"); + + } + + @Test + @DisplayName("Dado que um cargo existe no BD, deve deletá-lo") + void test004() { + CargoService cargoServiceMockito = Mockito.mock(CargoService.class); + Mockito.doNothing().when(cargoServiceMockito).deletarById(Long.parseLong("1")); + + } + + @Test + @DisplayName("Deveria devolver todos os cargos cadastrados") + void test005() { + List listaCargos = listaCargos(); + Mockito.when(this.cargoRepository.findAll()).thenReturn(listaCargos); + + List lista = this.cargoService.visualizar(); + Assertions.assertThat(lista).as("Cargos Visualizados").isEqualTo(listaCargos); + } + + //método privado + private List listaCargos() { + Cargo cargo = new Cargo(); + cargo.setNome("ENFERMEIRO"); + cargo.setId(Long.parseLong("1")); + + ArrayList lista = new ArrayList<>(); + lista.add(cargo); + return lista; + + } + +} diff --git a/src/test/java/br/com/projeto/peletronico/service/FuncionarioServiceTest.java b/src/test/java/br/com/projeto/peletronico/service/FuncionarioServiceTest.java new file mode 100644 index 0000000..10ad6ac --- /dev/null +++ b/src/test/java/br/com/projeto/peletronico/service/FuncionarioServiceTest.java @@ -0,0 +1,62 @@ +package br.com.projeto.peletronico.service; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import java.util.Optional; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; + +import br.com.projeto.peletronico.controller.dto.InserirFuncionarioForm; +import br.com.projeto.peletronico.domain.Cargo; +import br.com.projeto.peletronico.domain.Funcionario; +import br.com.projeto.peletronico.exception.CadastrarException; +import br.com.projeto.peletronico.repository.CargoRepository; +import br.com.projeto.peletronico.repository.FuncionarioRepository; + +class FuncionarioServiceTest { + + private FuncionarioService funcionarioService; + @Mock + private FuncionarioRepository funcionarioRepository; + @Mock + private CargoRepository cargoRepository; + + @BeforeEach + void inicializacao() { + MockitoAnnotations.openMocks(this); + this.funcionarioService = new FuncionarioService(this.cargoRepository, this.funcionarioRepository); + + } + + @Test + @DisplayName("Dado um funcionarioDto, e ele já estiver cadastrado no BD, deve me devolver uma Exception") + void test001() { + + Cargo cargo = new Cargo(); + cargo.setId(Long.parseLong("1")); + cargo.setNome("TESTECARGO"); + + InserirFuncionarioForm funcionarioForm = new InserirFuncionarioForm(); + funcionarioForm.setCpf("1234"); + funcionarioForm.setIdCargo(cargo.getId()); + + this.funcionarioService.cadastrar(funcionarioForm); + Funcionario funcionario = new Funcionario(); + + Mockito.when(this.cargoRepository.findById(funcionarioForm.getIdCargo())).thenReturn(Optional.of(cargo)); + funcionario.setCargo(cargo); + + Mockito.when(this.funcionarioRepository.existsByCpf(funcionarioForm.getCpf())).thenReturn(true); + + assertThatThrownBy(() -> { + throw new CadastrarException("Cpf já foi cadastrado"); + }).hasMessageContaining("Cpf já foi cadastrado"); + + } + +} diff --git a/src/test/java/br/com/projeto/peletronico/service/PontoServiceTest.java b/src/test/java/br/com/projeto/peletronico/service/PontoServiceTest.java new file mode 100644 index 0000000..24da415 --- /dev/null +++ b/src/test/java/br/com/projeto/peletronico/service/PontoServiceTest.java @@ -0,0 +1,116 @@ +package br.com.projeto.peletronico.service; + + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; + +import br.com.projeto.peletronico.domain.Cargo; +import br.com.projeto.peletronico.domain.Funcionario; +import br.com.projeto.peletronico.domain.Ponto; +import br.com.projeto.peletronico.exception.NotFoundException; +import br.com.projeto.peletronico.repository.FuncionarioRepository; +import br.com.projeto.peletronico.repository.PontoRepository; + +class PontoServiceTest { + + private PontoService pontoService; + @Mock + private PontoRepository pontoRepository; + @Mock + private FuncionarioRepository funcionarioRepository; + + @BeforeEach + void inicializacao() { + MockitoAnnotations.openMocks(this); + this.pontoService = new PontoService(this.pontoRepository, this.funcionarioRepository); + } + + @Test + @DisplayName("Dado um idLong, ao passar como parâmetro, deve entregar um Optional.of(ponto)") + void testarLocalizacaoDePonto() { + // setup + Cargo cargo = new Cargo(); + cargo.setNome("nomeCargo"); + + Funcionario funcionario = new Funcionario(); + funcionario.setNome("nomeFuncionario"); + funcionario.setCargo(cargo); + + Ponto ponto = new Ponto(); + ponto.setFuncionario(funcionario); + + Long parseLong = Long.parseLong("1"); + // execute + this.pontoService.localizarPonto(parseLong); + // assert + Mockito.when(this.pontoRepository.findById(parseLong)).thenReturn(Optional.of(ponto)); + + } + + @Test + @DisplayName("Dado um funcionarioId, ao passar como parâmetro, deve entregar uma lista de Funcionario") + void testarLocalizarListaDePonto() { + // setup + List listaDePontos = listaDePontos(); + Long funcionarioId = Long.parseLong("1"); + // execute + this.pontoService.localizarListaDePontos(funcionarioId); + // assert + Mockito.when(this.pontoRepository.localizarListaDePontos(funcionarioId)).thenReturn(listaDePontos); + + } + + @Test + @DisplayName("Dado um funcionarioId que não existe no BD, ao passar como parâmetro, deve entregar NotFoundException") + void testarBaterPonto() { + // setup + Cargo cargo = new Cargo(); + cargo.setNome("nomeCargo"); + + Funcionario funcionario = new Funcionario(); + funcionario.setNome("nomeFuncionario"); + funcionario.setCargo(cargo); + + Long funcionarioId = Long.parseLong("1"); + LocalDate data = LocalDate.now(); + + // execute & assert + this.pontoService.baterPonto(funcionarioId); + Optional optionalFuncionario = Optional.of(funcionario); +// Optional optionalFuncionario = this.funcionarioRepository.findById(funcionarioId); +// Mockito.when(this.funcionarioRepository.findById(Long.parseLong("1"))).thenReturn(optionalFuncionario); + if(!optionalFuncionario.isPresent()) { + Assertions.assertThatThrownBy(() -> { throw new NotFoundException("Funcionario não existe"); }).hasMessage("Funcionario não existe"); + } + + + } + + private List listaDePontos() { + Cargo cargo = new Cargo(); + cargo.setNome("nomeCargo"); + + Funcionario funcionario = new Funcionario(); + funcionario.setNome("nomeFuncionario"); + funcionario.setCargo(cargo); + + Ponto ponto = new Ponto(); + ponto.setFuncionario(funcionario); + + List pontos = new ArrayList<>(); + pontos.add(ponto); + return pontos; + + } + +}