package com.adrian.reservapp.
model;
import java.sql.Date;
import java.util.List;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.MethodOrderer.OrderAnnotation;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.TestMethodOrder;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mapstruct.factory.Mappers;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import com.adrian.ReservAppPrueba;
import com.adrian.reservapp.model.dto.UserDTO;
import com.adrian.reservapp.model.mapper.Mapeador;
import com.adrian.reservapp.model.mapper.MapeadorConfig;
import com.adrian.reservapp.model.repositories.ReservationsTimeRepository;
import com.adrian.reservapp.model.repositories.UsersRepository;
import com.adrian.reservapp.model.serviceImpl.UsersServiceImpl;
import com.adrian.reservapp.model.test.utils.CommonLibTestUtils;
import com.adrian.reservapp.model.utils.CommonLibUtils;
@ExtendWith(SpringExtension.class)
@SpringBootTest(classes = {ReservAppPrueba.class, UsersServiceImpl.class,
Mapeador.class, MapeadorConfig.class, UsersRepository.class})
@ComponentScan(basePackages = "com.adrian.reservapp")
@TestInstance(TestInstance.Lifecycle.PER_CLASS) //Hace que @BeforeAll pueda
acceder a metodos no estáticos
@TestMethodOrder(OrderAnnotation.class)
public class UserServiceIntegrationTest {
@Autowired
private UsersServiceImpl usersService;
@Autowired
private ReservationsTimeRepository reservationTimeRepository;
@Autowired
private UsersRepository repo;
private Long numeroElementosBD;
Mapeador mapper = Mappers.getMapper(Mapeador.class);
@BeforeAll
public void contarElementosExistentesBBDD() {
numeroElementosBD = numeroActualUsuarios();
}
private long numeroActualUsuarios(){
return repo.count();
}
@Test
@Order(1)
public void runAppAndListAllTest() {
List<UserDTO> users = usersService.listAll();
Assertions.assertEquals(numeroElementosBD, users.size());
}
@Test
@Order(2)
public void altaUsuarioTest() throws Exception {
UserDTO datosNuevoUsuario = CommonLibUtils.crearUsuarioBD();
usersService.altaUsuario(datosNuevoUsuario);
Assertions.assertEquals(numeroElementosBD +1 , numeroActualUsuarios());
}
@Test
@Order(3)
public void obtenerUsuarioTest() {
UserDTO datosBD = CommonLibUtils.crearUsuarioBD();
UserDTO usuario = usersService.buscarUsuario("ruben");
CommonLibTestUtils.comprobarUserDTOs(datosBD, usuario);
}
@Test
@Order(4)
public void modificarUsuarioTest() throws Exception {
UserDTO datosNuevoUsuario = new UserDTO();
datosNuevoUsuario.setUsername("ruben");
datosNuevoUsuario.setPassword("perro20"); //modificamos la pass
datosNuevoUsuario.setFechaAlta(Date.valueOf("2024-08-02")); // y la
fecha
datosNuevoUsuario.setNombre("raul");
datosNuevoUsuario.setPrimerApellido("gimenez");
datosNuevoUsuario.setSegundoApellido("fernandez");
datosNuevoUsuario.setEmail("[email protected]");
datosNuevoUsuario.setTelefono("12321312321");
usersService.modificarUsuario(datosNuevoUsuario);
UserDTO obtenerUsuario = usersService.buscarUsuario("ruben");
CommonLibTestUtils.comprobarUserDTOs(datosNuevoUsuario,obtenerUsuario);
Assertions.assertEquals(numeroElementosBD +1 , numeroActualUsuarios());
}
@Test
@Order(5)
public void eliminarUsuarioTest() throws Exception{
usersService.eliminarUsuario("ruben");
Assertions.assertEquals(numeroElementosBD , numeroActualUsuarios());
}
@Test
@Order(6)
public void comprobarBDIgualTest() {
List<UserDTO> users = usersService.listAll();
Assertions.assertEquals(numeroElementosBD, users.size());
}