Commit 6e80b2d4 by Rubén Ramírez

feat: [TestServicioSeguimiento]: Testeadas las funciones para la red social

parent 1023e0e5
package com.ujaen.tfg.mangaffinity.servicios;
import com.ujaen.tfg.mangaffinity.MangAffinityApplication;
import com.ujaen.tfg.mangaffinity.config.JpaTestConfig;
import com.ujaen.tfg.mangaffinity.entidades.Usuario;
import com.ujaen.tfg.mangaffinity.excepciones.SeguimientoExiste;
import com.ujaen.tfg.mangaffinity.excepciones.SeguimientoNoExiste;
import com.ujaen.tfg.mangaffinity.excepciones.UsuarioNoExiste;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ActiveProfiles;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.*;
@SpringBootTest(classes = {MangAffinityApplication.class, JpaTestConfig.class}, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ActiveProfiles("test")
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
public class TestServicioSeguimiento {
@Autowired
private ServicioSeguimiento servicioSeguimiento;
@Autowired
private ServicioUsuarios servicioUsuarios;
@Test
@DirtiesContext
void testSeguir() {
// Creo usuarios de prueba
Usuario juan = new Usuario("juan@test.com", "juan", "clave123");
Usuario pedro = new Usuario("pedro@test.com", "pedro", "clave456");
servicioUsuarios.crearUsuario(juan);
servicioUsuarios.crearUsuario(pedro);
// Caso 1: Seguir con éxito
assertDoesNotThrow(() -> servicioSeguimiento.seguir("juan", "pedro"));
// Verifico que pedro aparece en la lista de seguidos por juan
List<Usuario> seguidos = servicioSeguimiento.obtenerSeguidos("juan");
assertThat(seguidos).extracting(Usuario::getNombreUsuario).contains("pedro");
// Verifico que juan aparece en la lista de seguidores de pedro
List<Usuario> seguidores = servicioSeguimiento.obtenerSeguidores("pedro");
assertThat(seguidores).extracting(Usuario::getNombreUsuario).contains("juan");
// Caso 2: Intentar seguirse a sí mismo
Exception ex = assertThrows(IllegalArgumentException.class,
() -> servicioSeguimiento.seguir("juan", "juan"));
assertThat(ex.getMessage()).isEqualTo("No puedes seguirte a ti mismo.");
// Caso 3: Intentar seguir a un usuario inexistente
Exception ex2 = assertThrows(UsuarioNoExiste.class,
() -> servicioSeguimiento.seguir("juan", "noexiste"));
// Caso 4: Intentar seguir de nuevo al mismo usuario (ya existe)
Exception ex3 = assertThrows(SeguimientoExiste.class,
() -> servicioSeguimiento.seguir("juan", "pedro"));
}
@Test
@DirtiesContext
void testDejarDeSeguir() {
// Creo usuarios
Usuario juan = new Usuario("juan@test.com", "juan", "clave123");
Usuario pedro = new Usuario("pedro@test.com", "pedro", "clave456");
Usuario maria = new Usuario("maria@test.com", "maria", "clave789");
servicioUsuarios.crearUsuario(juan);
servicioUsuarios.crearUsuario(pedro);
servicioUsuarios.crearUsuario(maria);
// Caso 1: seguimiento existente -> dejar de seguir
servicioSeguimiento.seguir("juan", "pedro");
assertThat(servicioSeguimiento.estaSiguiendo("juan", "pedro")).isTrue();
assertDoesNotThrow(() -> servicioSeguimiento.dejarDeSeguir("juan", "pedro"));
assertThat(servicioSeguimiento.estaSiguiendo("juan", "pedro")).isFalse();
// Caso 2: dejar de seguir cuando no existe relación
Exception ex1 = assertThrows(SeguimientoNoExiste.class,
() -> servicioSeguimiento.dejarDeSeguir("juan", "pedro"));
// Caso 3: usuario seguidor no existe
Exception ex2 = assertThrows(UsuarioNoExiste.class,
() -> servicioSeguimiento.dejarDeSeguir("noexiste", "maria"));
// Caso 4: usuario seguido no existe
Exception ex3 = assertThrows(UsuarioNoExiste.class,
() -> servicioSeguimiento.dejarDeSeguir("juan", "noexiste"));
}
@Test
@DirtiesContext
void testObtenerSeguidos() {
// Creo usuarios
Usuario juan = new Usuario("juan@test.com", "juan", "clave123");
Usuario pedro = new Usuario("pedro@test.com", "pedro", "clave456");
Usuario maria = new Usuario("maria@test.com", "maria", "clave789");
servicioUsuarios.crearUsuario(juan);
servicioUsuarios.crearUsuario(pedro);
servicioUsuarios.crearUsuario(maria);
// Caso 1: juan sigue a pedro y maria
servicioSeguimiento.seguir("juan", "pedro");
servicioSeguimiento.seguir("juan", "maria");
List<Usuario> seguidos = servicioSeguimiento.obtenerSeguidos("juan");
assertThat(seguidos).extracting(Usuario::getNombreUsuario).containsExactlyInAnyOrder("pedro", "maria");
// Caso 2: usuario que existe pero no sigue a nadie
List<Usuario> seguidosMaria = servicioSeguimiento.obtenerSeguidos("maria");
assertThat(seguidosMaria).isEmpty();
// Caso 3: usuario no existe
assertThrows(UsuarioNoExiste.class, () -> servicioSeguimiento.obtenerSeguidos("inexistente"));
}
@Test
@DirtiesContext
void testEstaSiguiendo() {
// Creo usuarios
Usuario juan = new Usuario("juan@test.com", "juan", "clave123");
Usuario pedro = new Usuario("pedro@test.com", "pedro", "clave456");
Usuario maria = new Usuario("maria@test.com", "maria", "clave789");
servicioUsuarios.crearUsuario(juan);
servicioUsuarios.crearUsuario(pedro);
servicioUsuarios.crearUsuario(maria);
// Caso 1: juan sigue a pedro
servicioSeguimiento.seguir("juan", "pedro");
boolean resultado1 = servicioSeguimiento.estaSiguiendo("juan", "pedro");
assertEquals(true, resultado1);
// Caso 2: juan NO sigue a maria
boolean resultado2 = servicioSeguimiento.estaSiguiendo("juan", "maria");
assertEquals(false, resultado2);
// Caso 3: usuario seguidor no existe
assertThrows(UsuarioNoExiste.class, () -> {
servicioSeguimiento.estaSiguiendo("noexiste", "pedro");
});
// Caso 4: usuario seguido no existe
assertThrows(UsuarioNoExiste.class, () -> {
servicioSeguimiento.estaSiguiendo("juan", "noexiste");
});
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment