Files
BackendFocusAgenda/src/test/java/com/agendaestudantil/servico/TarefaServicoTest.java

124 lines
4.2 KiB
Java

package com.agendaestudantil.servico;
import com.agendaestudantil.dto.RequisicaoTarefaDTO;
import com.agendaestudantil.dto.RespostaTarefaDTO;
import com.agendaestudantil.entidade.Tarefa;
import com.agendaestudantil.excecao.ExcecaoRecursoNaoEncontrado;
import com.agendaestudantil.repositorio.TarefaRepositorio;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.server.ResponseStatusException;
import java.time.LocalDate;
import java.util.List;
import java.util.Optional;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.*;
@ExtendWith(MockitoExtension.class)
public class TarefaServicoTest {
@Mock
private TarefaRepositorio tarefaRepositorio;
@Mock
private SecurityContext securityContext;
@Mock
private Authentication authentication;
@InjectMocks
private TarefaServico tarefaServico;
private RequisicaoTarefaDTO requisicaoTarefa;
private Tarefa tarefa;
private final String estudanteId = "estudante123";
@BeforeEach
void setUp() {
requisicaoTarefa = new RequisicaoTarefaDTO(
"Estudar Spring",
"Aprender Spring Boot 3",
Tarefa.Prioridade.ALTA,
Tarefa.StatusTarefa.PENDENTE,
LocalDate.now(),
null,
estudanteId);
tarefa = new Tarefa();
tarefa.setId("tarefa1");
tarefa.setTitulo("Estudar Spring");
tarefa.setDescricao("Aprender Spring Boot 3");
tarefa.setPrioridade(Tarefa.Prioridade.ALTA);
tarefa.setStatus(Tarefa.StatusTarefa.PENDENTE);
tarefa.setDataEntrega(LocalDate.now());
tarefa.setEstudanteId(estudanteId);
}
private void mockAuthentication(String user) {
when(securityContext.getAuthentication()).thenReturn(authentication);
when(authentication.getName()).thenReturn(user);
SecurityContextHolder.setContext(securityContext);
}
@Test
void deveCriarTarefaComSucesso() {
mockAuthentication(estudanteId);
when(tarefaRepositorio.save(any(Tarefa.class))).thenReturn(tarefa);
RespostaTarefaDTO resposta = tarefaServico.criarTarefa(requisicaoTarefa);
assertNotNull(resposta);
assertEquals("Estudar Spring", resposta.titulo());
verify(tarefaRepositorio, times(1)).save(any(Tarefa.class));
}
@Test
void deveLancarExcecaoAoCriarTarefaParaOutroUsuario() {
mockAuthentication("outroEstudante");
assertThrows(ResponseStatusException.class, () -> tarefaServico.criarTarefa(requisicaoTarefa));
verify(tarefaRepositorio, never()).save(any(Tarefa.class));
}
@Test
void deveListarTarefasPorEstudanteComSucesso() {
mockAuthentication(estudanteId);
when(tarefaRepositorio.findByEstudanteId(estudanteId)).thenReturn(List.of(tarefa));
List<RespostaTarefaDTO> tarefas = tarefaServico.listarTarefasPorEstudante(estudanteId);
assertFalse(tarefas.isEmpty());
assertEquals(1, tarefas.size());
assertEquals("Estudar Spring", tarefas.get(0).titulo());
}
@Test
void deveMudarStatusTarefaParaConcluidoComSucesso() {
mockAuthentication(estudanteId);
when(tarefaRepositorio.findById(anyString())).thenReturn(Optional.of(tarefa));
when(tarefaRepositorio.save(any(Tarefa.class))).thenReturn(tarefa);
RespostaTarefaDTO resposta = tarefaServico.marcarConcluida("tarefa1");
assertNotNull(resposta);
verify(tarefaRepositorio, times(1)).save(any(Tarefa.class));
}
@Test
void deveLancarExcecaoQuandoTarefaNaoEncontrada() {
when(tarefaRepositorio.findById(anyString())).thenReturn(Optional.empty());
assertThrows(ExcecaoRecursoNaoEncontrado.class, () -> tarefaServico.buscarTarefaPorId("tarefaNaoExistente"));
}
}