package com.zenika.blog.mybatis;
import static junit.framework.Assert.assertEquals;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.sql.DataSource;
import org.dbunit.database.DatabaseDataSourceConnection;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSetBuilder;
import org.dbunit.operation.DatabaseOperation;
import org.junit.Before;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.core.io.Resource;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:/spring.xml")
public abstract class AbstractSessionDaoTest {
private static List<Session> expectedSessions = Arrays.asList(
newSession(1L, "MyBatis", "Dridi Boukelmoune", "Hugo", "Benjamin", "Louis"),
newSession(2L, "Scala", "Lucien Pereira", "Leo", "Axel", "Lucas")
);
@Autowired
private ApplicationContext context;
@Before
public void setupDatabase() throws Exception {
DataSource dataSource = context.getBean(DataSource.class);
IDatabaseConnection connection = new DatabaseDataSourceConnection(dataSource);
Resource resource = context.getResource("classpath:/dataset.xml");
IDataSet dataSet = new FlatXmlDataSetBuilder().build( resource.getFile() );
DatabaseOperation.CLEAN_INSERT.execute(connection, dataSet);
}
protected void checkSessions(List<Session> sessions) {
assertEquals(expectedSessions, sessions);
}
// méthode utilitaire pour construire le résultat attendu
private static long idInscription;
private static Session newSession(Long idSession, String nomSession, String nomFormateur, String... nomStagaires) {
Session session = new Session();
session.setIdFormation(idSession);
session.setNomCours(nomSession);
session.setNomFormateur(nomFormateur);
Set<Participant> participants = new HashSet<Participant>();
for (String nomStagiaire : nomStagaires) {
Participant participant = new Participant();
participant.setId(++idInscription);
participant.setNom(nomStagiaire);
participants.add(participant);
}
session.setParticipants(participants);
return session;
}
}