Commit 63651ab7 by Rubén Ramírez

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

parent 88f01d4a
package com.ujaen.tfg.mangaffinity.rest;
import com.ujaen.tfg.mangaffinity.MangAffinityApplication;
import com.ujaen.tfg.mangaffinity.config.JpaTestConfig;
import com.ujaen.tfg.mangaffinity.rest.DTO.DTOLoginRespuesta;
import com.ujaen.tfg.mangaffinity.rest.DTO.DTOUsuario;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.http.*;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ActiveProfiles;
import java.util.List;
import java.util.Map;
import static org.assertj.core.api.Assertions.assertThat;
@SpringBootTest(classes = {MangAffinityApplication.class, JpaTestConfig.class}, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ActiveProfiles("test")
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
public class TestSeguimientoController {
@Autowired
private TestRestTemplate restTemplate;
@Test
@DirtiesContext
void testSeguirUsuario() {
// Registro de los usuarios: seguidor y seguido
restTemplate.postForEntity("/usuarios/", Map.of(
"email", "seguidor@example.com",
"nombreUsuario", "seguidor",
"contrasenia", "clave123"
), Void.class);
restTemplate.postForEntity("/usuarios/", Map.of(
"email", "seguido@example.com",
"nombreUsuario", "seguido",
"contrasenia", "clave456"
), Void.class);
// Inicio de sesión con el seguidor
var authResponse = restTemplate.postForEntity("/usuarios/seguidor@example.com", Map.of(
"clave", "clave123"
), DTOLoginRespuesta.class);
assertThat(authResponse.getStatusCode()).isEqualTo(HttpStatus.OK);
String token = authResponse.getBody().getToken();
// Petición para seguir al otro usuario
HttpHeaders headers = new HttpHeaders();
headers.setBearerAuth(token);
headers.set("nombreUsuario", "seguidor");
HttpEntity<Void> request = new HttpEntity<>(headers);
// Seguir correctamente
var seguirResponse = restTemplate.exchange(
"/seguimientos/seguido", HttpMethod.POST, request, Void.class
);
assertThat(seguirResponse.getStatusCode()).isEqualTo(HttpStatus.CREATED);
// Intento volver a seguirlo → debe dar CONFLICT
var conflicto = restTemplate.exchange(
"/seguimientos/seguido", HttpMethod.POST, request, Void.class
);
assertThat(conflicto.getStatusCode()).isEqualTo(HttpStatus.CONFLICT);
// Intento seguir a un usuario inexistente → NOT_FOUND
var noExiste = restTemplate.exchange(
"/seguimientos/inexistente", HttpMethod.POST, request, Void.class
);
assertThat(noExiste.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
// Cabecera con nombre vacío → NOT_FOUND (por IllegalArgumentException)
headers.set("nombreUsuario", " ");
var vacioRequest = new HttpEntity<>(headers);
var vacioResponse = restTemplate.exchange(
"/seguimientos/seguido", HttpMethod.POST, vacioRequest, Void.class
);
assertThat(vacioResponse.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
}
@Test
@DirtiesContext
void testDejarDeSeguirUsuario() {
// Registro de los usuarios: seguidor y seguido
restTemplate.postForEntity("/usuarios/", Map.of(
"email", "seguidor@example.com",
"nombreUsuario", "seguidor",
"contrasenia", "clave123"
), Void.class);
restTemplate.postForEntity("/usuarios/", Map.of(
"email", "seguido@example.com",
"nombreUsuario", "seguido",
"contrasenia", "clave456"
), Void.class);
// Inicio de sesión con el seguidor
var authResponse = restTemplate.postForEntity("/usuarios/seguidor@example.com", Map.of(
"clave", "clave123"
), DTOLoginRespuesta.class);
assertThat(authResponse.getStatusCode()).isEqualTo(HttpStatus.OK);
String token = authResponse.getBody().getToken();
// Cabeceras con el nombre del seguidor
HttpHeaders headers = new HttpHeaders();
headers.setBearerAuth(token);
headers.set("nombreUsuario", "seguidor");
HttpEntity<Void> request = new HttpEntity<>(headers);
// Primero seguir al usuario para luego poder dejar de seguirlo
var seguirResponse = restTemplate.exchange(
"/seguimientos/seguido", HttpMethod.POST, request, Void.class
);
assertThat(seguirResponse.getStatusCode()).isEqualTo(HttpStatus.CREATED);
// Dejar de seguir correctamente
var dejarResponse = restTemplate.exchange(
"/seguimientos/seguido", HttpMethod.DELETE, request, Void.class
);
assertThat(dejarResponse.getStatusCode()).isEqualTo(HttpStatus.NO_CONTENT);
// Intentar dejar de seguir otra vez → ya no hay seguimiento → NOT_FOUND
var yaNoSigueResponse = restTemplate.exchange(
"/seguimientos/seguido", HttpMethod.DELETE, request, Void.class
);
assertThat(yaNoSigueResponse.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
// Intentar dejar de seguir a un usuario que no existe → NOT_FOUND
var inexistenteResponse = restTemplate.exchange(
"/seguimientos/noexiste", HttpMethod.DELETE, request, Void.class
);
assertThat(inexistenteResponse.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
}
@Test
@DirtiesContext
void testObtenerSeguidos() {
// Registro de dos usuarios: seguidor y seguido
restTemplate.postForEntity("/usuarios/", Map.of(
"email", "seguidor@example.com",
"nombreUsuario", "seguidor",
"contrasenia", "clave123"
), Void.class);
restTemplate.postForEntity("/usuarios/", Map.of(
"email", "seguido@example.com",
"nombreUsuario", "seguido",
"contrasenia", "clave456"
), Void.class);
// Inicio de sesión del seguidor
var authResponse = restTemplate.postForEntity("/usuarios/seguidor@example.com", Map.of(
"clave", "clave123"
), DTOLoginRespuesta.class);
assertThat(authResponse.getStatusCode()).isEqualTo(HttpStatus.OK);
String token = authResponse.getBody().getToken();
// Cabeceras con token y nombreUsuario
HttpHeaders headers = new HttpHeaders();
headers.setBearerAuth(token);
headers.set("nombreUsuario", "seguidor");
HttpEntity<Void> request = new HttpEntity<>(headers);
// Seguir al usuario
var seguirResponse = restTemplate.exchange(
"/seguimientos/seguido", HttpMethod.POST, request, Void.class
);
assertThat(seguirResponse.getStatusCode()).isEqualTo(HttpStatus.CREATED);
// Obtener seguidos del usuario seguidor
ResponseEntity<DTOUsuario[]> seguidosResponse = restTemplate.exchange(
"/seguimientos/seguidos/seguidor", HttpMethod.GET, request, DTOUsuario[].class
);
assertThat(seguidosResponse.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(seguidosResponse.getBody()).isNotNull();
assertThat(seguidosResponse.getBody().length).isEqualTo(1);
assertThat(seguidosResponse.getBody()[0].getNombreUsuario()).isEqualTo("seguido");
// Registro de un usuario que no sigue a nadie
restTemplate.postForEntity("/usuarios/", Map.of(
"email", "nuevo@example.com",
"nombreUsuario", "nuevo",
"contrasenia", "clave789"
), Void.class);
// Inicio de sesión para "nuevo"
var nuevoLogin = restTemplate.postForEntity("/usuarios/nuevo@example.com", Map.of(
"clave", "clave789"
), DTOLoginRespuesta.class);
String nuevoToken = nuevoLogin.getBody().getToken();
HttpHeaders nuevoHeaders = new HttpHeaders();
nuevoHeaders.setBearerAuth(nuevoToken);
HttpEntity<Void> nuevoRequest = new HttpEntity<>(nuevoHeaders);
// El usuario "nuevo" no sigue a nadie
var vacioResponse = restTemplate.exchange(
"/seguimientos/seguidos/nuevo", HttpMethod.GET, nuevoRequest, DTOUsuario[].class
);
assertThat(vacioResponse.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(vacioResponse.getBody()).isEmpty();
// Intento acceder a los seguidos de un usuario inexistente
var inexistenteResponse = restTemplate.exchange(
"/seguimientos/seguidos/inexistente", HttpMethod.GET, request, Void.class
);
assertThat(inexistenteResponse.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
}
@Test
@DirtiesContext
void testObtenerSeguidores() {
// Registro de dos usuarios: seguidor y seguido
restTemplate.postForEntity("/usuarios/", Map.of(
"email", "seguidor@example.com",
"nombreUsuario", "seguidor",
"contrasenia", "clave123"
), Void.class);
restTemplate.postForEntity("/usuarios/", Map.of(
"email", "seguido@example.com",
"nombreUsuario", "seguido",
"contrasenia", "clave456"
), Void.class);
// Inicio de sesión con el seguidor
var authResponse = restTemplate.postForEntity("/usuarios/seguidor@example.com", Map.of(
"clave", "clave123"
), DTOLoginRespuesta.class);
assertThat(authResponse.getStatusCode()).isEqualTo(HttpStatus.OK);
String token = authResponse.getBody().getToken();
// Cabeceras con token y nombreUsuario
HttpHeaders headers = new HttpHeaders();
headers.setBearerAuth(token);
headers.set("nombreUsuario", "seguidor");
HttpEntity<Void> request = new HttpEntity<>(headers);
// El seguidor sigue al seguido
var seguirResponse = restTemplate.exchange(
"/seguimientos/seguido", HttpMethod.POST, request, Void.class
);
assertThat(seguirResponse.getStatusCode()).isEqualTo(HttpStatus.CREATED);
// Obtener los seguidores de "seguido"
var seguidoresResponse = restTemplate.exchange(
"/seguimientos/seguidores/seguido", HttpMethod.GET, request, DTOUsuario[].class
);
assertThat(seguidoresResponse.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(seguidoresResponse.getBody()).isNotNull();
assertThat(seguidoresResponse.getBody().length).isEqualTo(1);
assertThat(seguidoresResponse.getBody()[0].getNombreUsuario()).isEqualTo("seguidor");
// Usuario que no tiene seguidores
restTemplate.postForEntity("/usuarios/", Map.of(
"email", "nuevo@example.com",
"nombreUsuario", "nuevo",
"contrasenia", "clave789"
), Void.class);
// Inicio de sesión de "nuevo"
var nuevoLogin = restTemplate.postForEntity("/usuarios/nuevo@example.com", Map.of(
"clave", "clave789"
), DTOLoginRespuesta.class);
String nuevoToken = nuevoLogin.getBody().getToken();
HttpHeaders nuevoHeaders = new HttpHeaders();
nuevoHeaders.setBearerAuth(nuevoToken);
HttpEntity<Void> nuevoRequest = new HttpEntity<>(nuevoHeaders);
// Obtener seguidores del usuario "nuevo"
var vacioResponse = restTemplate.exchange(
"/seguimientos/seguidores/nuevo", HttpMethod.GET, nuevoRequest, DTOUsuario[].class
);
assertThat(vacioResponse.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(vacioResponse.getBody()).isEmpty();
// Usuario inexistente
var inexistenteResponse = restTemplate.exchange(
"/seguimientos/seguidores/inexistente", HttpMethod.GET, request, Void.class
);
assertThat(inexistenteResponse.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
}
@Test
@DirtiesContext
void testEstaSiguiendo() {
// Registro de dos usuarios: seguidor y seguido
restTemplate.postForEntity("/usuarios/", Map.of(
"email", "seguidor@example.com",
"nombreUsuario", "seguidor",
"contrasenia", "clave123"
), Void.class);
restTemplate.postForEntity("/usuarios/", Map.of(
"email", "seguido@example.com",
"nombreUsuario", "seguido",
"contrasenia", "clave456"
), Void.class);
// Inicio de sesión con el seguidor
var authResponse = restTemplate.postForEntity("/usuarios/seguidor@example.com", Map.of(
"clave", "clave123"
), DTOLoginRespuesta.class);
assertThat(authResponse.getStatusCode()).isEqualTo(HttpStatus.OK);
String token = authResponse.getBody().getToken();
// Cabeceras con token y nombreUsuario
HttpHeaders headers = new HttpHeaders();
headers.setBearerAuth(token);
headers.set("nombreUsuario", "seguidor");
HttpEntity<Void> request = new HttpEntity<>(headers);
// Seguidor sigue a seguido
var seguirResponse = restTemplate.exchange(
"/seguimientos/seguido", HttpMethod.POST, request, Void.class
);
assertThat(seguirResponse.getStatusCode()).isEqualTo(HttpStatus.CREATED);
// Verifico que seguidor sigue a seguido → true
var seguirSi = restTemplate.exchange(
"/seguimientos/existe?seguidor=seguidor&seguido=seguido", HttpMethod.GET, request, Boolean.class
);
assertThat(seguirSi.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(seguirSi.getBody()).isTrue();
// Registro de un nuevo usuario que no sigue a nadie
restTemplate.postForEntity("/usuarios/", Map.of(
"email", "otro@example.com",
"nombreUsuario", "otro",
"contrasenia", "clave789"
), Void.class);
// Inicio de sesión de "otro"
var otroLogin = restTemplate.postForEntity("/usuarios/otro@example.com", Map.of(
"clave", "clave789"
), DTOLoginRespuesta.class);
String otroToken = otroLogin.getBody().getToken();
HttpHeaders otroHeaders = new HttpHeaders();
otroHeaders.setBearerAuth(otroToken);
HttpEntity<Void> otroRequest = new HttpEntity<>(otroHeaders);
// "otro" no sigue a nadie → false
var seguirNo = restTemplate.exchange(
"/seguimientos/existe?seguidor=otro&seguido=seguido", HttpMethod.GET, otroRequest, Boolean.class
);
assertThat(seguirNo.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(seguirNo.getBody()).isFalse();
// Usuario inexistente → NOT_FOUND
var inexistente = restTemplate.exchange(
"/seguimientos/existe?seguidor=inexistente&seguido=seguido", HttpMethod.GET, request, Void.class
);
assertThat(inexistente.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
}
}
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