package org.transgalactica.management.rest.hr.mapper;
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
import java.time.LocalDate;
import java.util.Arrays;
import org.junit.Assert;
import org.junit.Test;
import org.springframework.beans.BeanInstantiationException;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.util.ReflectionTestUtils;
import org.transgalactica.management.data.materiel.bo.VaisseauEntity;
import org.transgalactica.management.data.materiel.bo.impl.JpaVaisseauEntity;
import org.transgalactica.management.data.people.bo.BasicEmployeSummary;
import org.transgalactica.management.data.people.bo.EmployeEntity;
import org.transgalactica.management.data.people.bo.EmployeSearchCriteria;
import org.transgalactica.management.data.people.bo.EmployeSummary;
import org.transgalactica.management.data.people.bo.MecanicienEntity;
import org.transgalactica.management.data.people.bo.PiloteEntity;
import org.transgalactica.management.data.people.bo.impl.JpaMecanicienEntity;
import org.transgalactica.management.data.people.bo.impl.JpaPiloteEntity;
import org.transgalactica.management.data.referentiel.bo.EmployeType;
import org.transgalactica.management.data.referentiel.bo.MecanicienSpecialiteEntity;
import org.transgalactica.management.data.referentiel.bo.impl.JpaMecanicienSpecialiteEntity;
import org.transgalactica.management.rest.AbstractWebTest;
import org.transgalactica.management.rest.hr.data.EmployeCommand;
import org.transgalactica.management.rest.hr.data.EmployeDetailDto;
import org.transgalactica.management.rest.hr.data.EmployeDtos;
import org.transgalactica.management.rest.hr.data.MecanicienDetailDto;
import org.transgalactica.management.rest.hr.data.PiloteCommand;
import org.transgalactica.management.rest.hr.data.PiloteDetailDto;
import org.transgalactica.management.rest.hr.data.VaisseauDto;
import org.transgalactica.management.rest.hr.data.impl.JaxbEmployeCommand;
import org.transgalactica.management.rest.hr.data.impl.JaxbPiloteCommand;
/**
* Classe de tests pour le mapper relatif aux employes.
*
* @author Thierry
*/
public class EmployeMapperTest extends AbstractWebTest {
@Autowired
private EmployeMapper mapper;
@Test
public void testMapEmployeCommandToEntity_Mecanicien() {
EmployeCommand command = BeanUtils.instantiateClass(JaxbEmployeCommand.class);
command.setNom("Nom");
LocalDate dateEmbauche = LocalDate.now();
command.setDateEmbauche(dateEmbauche);
EmployeEntity entity = mapper.mapEmployeCommandToEntity(command);
assertNotNull(entity);
assertEquals("Nom", entity.getNom());
assertEquals(dateEmbauche, entity.getDateEmbauche());
assertEquals(EmployeType.MECANICIEN, entity.getType());
}
@Test
public void testMapEmployeCommandToEntity_Pilote() {
PiloteCommand command = BeanUtils.instantiateClass(JaxbPiloteCommand.class);
command.setNom("Nom");
LocalDate dateEmbauche = LocalDate.now();
command.setDateEmbauche(dateEmbauche);
command.setNombreHeuresVol(50);
EmployeEntity entity = mapper.mapEmployeCommandToEntity(command);
assertNotNull(entity);
assertEquals("Nom", entity.getNom());
assertEquals(dateEmbauche, entity.getDateEmbauche());
assertEquals(EmployeType.PILOTE, entity.getType());
assertThat(entity, instanceOf(PiloteEntity.class));
assertEquals(50, ((PiloteEntity) entity).getNombreHeuresVol());
}
@Test
public void testMapToRechercheEmployeCriteres() {
LocalDate dateEmbaucheDebut = LocalDate.now();
LocalDate dateEmbaucheFin = LocalDate.now().plusDays(1);
EmployeSearchCriteria criteres = mapper.mapToRechercheEmployeCriteres("Nom%", dateEmbaucheDebut,
dateEmbaucheFin, "immatriculation");
assertNotNull(criteres);
assertEquals("Nom%", criteres.getNomEmploye());
assertEquals(dateEmbaucheDebut, criteres.getDateEmbaucheEmployeDebut());
assertEquals(dateEmbaucheFin, criteres.getDateEmbaucheEmployeFin());
assertEquals("immatriculation", criteres.getImmatriculationVaisseau());
}
@Test
public void testMapToEmployeDtos() throws BeanInstantiationException, NoSuchMethodException, SecurityException {
LocalDate dateEmbauche = LocalDate.now();
EmployeSummary projection = BeanUtils.instantiateClass(
BasicEmployeSummary.class.getConstructor(Long.class, String.class, LocalDate.class, EmployeType.class),
10L, "Nom", dateEmbauche, EmployeType.PILOTE);
EmployeDtos dtos = mapper.mapToEmployeDtos(Arrays.asList(projection));
assertNotNull(dtos);
assertEquals(1, dtos.getEmployes().size());
assertEquals(new Long(10), dtos.getEmployes().get(0).getMatricule());
assertEquals("Nom", dtos.getEmployes().get(0).getNom());
assertEquals(dateEmbauche, dtos.getEmployes().get(0).getDateEmbauche());
assertEquals(EmployeType.PILOTE, dtos.getEmployes().get(0).getTypeEmploye());
}
@Test
public void testMapToEmployeDetailDto_Pilote() {
LocalDate dateEmbauche = LocalDate.now();
PiloteEntity entity = BeanUtils.instantiateClass(JpaPiloteEntity.class);
((JpaPiloteEntity) entity).setMatricule(new Long(10));
entity.setNom("Nom");
entity.setDateEmbauche(dateEmbauche);
entity.setNombreHeuresVol(20);
VaisseauEntity vaisseau = BeanUtils.instantiateClass(JpaVaisseauEntity.class);
vaisseau.setCapaciteDeFret(1);
vaisseau.setImmatriculation("immatriculation");
vaisseau.setModele("modele");
vaisseau.setNombreDePassagers((short) 10);
vaisseau.setAutonomie(100);
vaisseau.setVitesse(1000);
entity.addVaisseau(vaisseau);
EmployeDetailDto dto = mapper.mapToEmployeDetailDto(entity);
assertNotNull(dto);
Assert.assertThat(dto, instanceOf(PiloteDetailDto.class));
assertEquals(new Long(10), dto.getMatricule());
assertEquals("Nom", dto.getNom());
assertEquals(dateEmbauche, dto.getDateEmbauche());
assertEquals(20, ((PiloteDetailDto) dto).getNombreHeuresVol());
assertEquals(1, dto.getVaisseaux().size());
VaisseauDto vaisseauDto = dto.getVaisseaux().iterator().next();
assertEquals(1, vaisseauDto.getCapaciteDeFret());
assertEquals("immatriculation", vaisseauDto.getImmatriculation());
assertEquals("modele", vaisseauDto.getModele());
assertEquals((short) 10, vaisseauDto.getNombreDePassagers());
assertEquals(100, vaisseauDto.getAutonomie());
assertEquals(1000, vaisseauDto.getVitesse());
}
@Test
public void testMapToEmployeDetailDto_Mecanicien() {
LocalDate dateEmbauche = LocalDate.now();
MecanicienEntity entity = BeanUtils.instantiateClass(JpaMecanicienEntity.class);
((JpaMecanicienEntity) entity).setMatricule(new Long(10));
entity.setNom("Nom");
entity.setDateEmbauche(dateEmbauche);
MecanicienSpecialiteEntity specialiteEntity = BeanUtils.instantiateClass(JpaMecanicienSpecialiteEntity.class);
ReflectionTestUtils.setField(specialiteEntity, "nomSpecialite", "nomSpecialite");
entity.addSpecialite(specialiteEntity);
VaisseauEntity vaisseau = BeanUtils.instantiateClass(JpaVaisseauEntity.class);
vaisseau.setCapaciteDeFret(1);
vaisseau.setImmatriculation("immatriculation");
vaisseau.setModele("modele");
vaisseau.setNombreDePassagers((short) 10);
vaisseau.setAutonomie(100);
vaisseau.setVitesse(1000);
entity.addVaisseau(vaisseau);
EmployeDetailDto dto = mapper.mapToEmployeDetailDto(entity);
assertNotNull(dto);
Assert.assertThat(dto, instanceOf(MecanicienDetailDto.class));
assertEquals(new Long(10), dto.getMatricule());
assertEquals("Nom", dto.getNom());
assertEquals(dateEmbauche, dto.getDateEmbauche());
assertNotNull(((MecanicienDetailDto) dto).getSpecialites());
assertEquals(1, ((MecanicienDetailDto) dto).getSpecialites().size());
assertEquals("nomSpecialite", ((MecanicienDetailDto) dto).getSpecialites().iterator().next());
assertEquals(1, dto.getVaisseaux().size());
VaisseauDto vaisseauDto = dto.getVaisseaux().iterator().next();
assertEquals(1, vaisseauDto.getCapaciteDeFret());
assertEquals("immatriculation", vaisseauDto.getImmatriculation());
assertEquals("modele", vaisseauDto.getModele());
assertEquals((short) 10, vaisseauDto.getNombreDePassagers());
assertEquals(100, vaisseauDto.getAutonomie());
assertEquals(1000, vaisseauDto.getVitesse());
}
}