package fr.keemto.provider.exchange;
import com.google.common.collect.Lists;
import fr.keemto.config.CoreConfig;
import fr.keemto.config.ProviderConfig;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.support.AnnotationConfigContextLoader;
import java.util.List;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.hasItem;
import static org.hamcrest.MatcherAssert.assertThat;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {CoreConfig.class, ProviderConfig.class}, loader = AnnotationConfigContextLoader.class)
public class JdbcMailRepositoryIT {
@Autowired
private JdbcTemplate jdbcTemplate;
private MailRepository mailRepository;
@Before
public void setUp() throws Exception {
mailRepository = new JdbcMailRepository(jdbcTemplate);
}
@Test
public void shouldFindMailsBySenderAddress() throws Exception {
List<Email> emails = mailRepository.getMails("stnevex@gmail.com", 0);
assertThat(emails.size(), equalTo(2));
Email email = emails.get(0);
assertThat(email.getId(), equalTo("1"));
assertThat(email.getFrom(), equalTo("stnevex@gmail.com"));
assertThat(email.getSubject(), equalTo("subject"));
assertThat(email.getBody(), equalTo("body"));
assertThat(email.getRecipientsAsString(), equalTo("to@xebia.fr,stnevex@xebia.fr"));
assertThat(email.getTimestamp(), equalTo(1322076312000L));
}
@Test
public void shouldFindMailsNewerThanATime() throws Exception {
List<Email> emails = mailRepository.getMails("stnevex@gmail.com", 100L);
assertThat(emails.size(), equalTo(2));
}
@Test
public void shouldPersistMails() throws Exception {
List<String> recipients = Lists.newArrayList("to@xebia.fr");
Email email = new Email("id", "user@gmail.com", "subject", "body", System.currentTimeMillis(), recipients);
mailRepository.persist(Lists.newArrayList(email));
List<Email> emails = mailRepository.getMails("user@gmail.com", 0);
assertThat(emails.size(), equalTo(1));
assertThat(emails, hasItem(email));
}
@Test
public void shouldReturnMostRecentMails() throws Exception {
List<String> recipients = Lists.newArrayList("to@xebia.fr");
Email oldEmail = new Email("id21", "stnevex@gmail.com", "subject", "body", 20, recipients);
long expectedMostRecentTime = System.currentTimeMillis();
Email recentEmail = new Email("id22", "stnevex@gmail.com", "subject", "body", expectedMostRecentTime, recipients);
mailRepository.persist(Lists.newArrayList(oldEmail, recentEmail));
long mostRecentMailTime = mailRepository.getMostRecentMailCreationTime();
assertThat(mostRecentMailTime, equalTo(expectedMostRecentTime));
}
}