@Test public void importEmlFileToMailboxShouldImportEmlFileToGivenMailbox() throws Exception { Mailbox mailbox = new SimpleMailbox(MailboxPath.forUser(USER, "name"), UID_VALIDITY); mapperFactory.createMailboxMapper(session).save(mailbox); String emlpath = ClassLoader.getSystemResource("eml/frnog.eml").getFile(); mailboxManagerManagement.importEmlFileToMailbox(MailboxConstants.USER_NAMESPACE, USER, "name", emlpath); assertThat(mapperFactory.getMessageMapper(session).countMessagesInMailbox(mailbox)).isEqualTo(1); Iterator<MailboxMessage> iterator = mapperFactory.getMessageMapper(session).findInMailbox(mailbox, MessageRange.all(), MessageMapper.FetchType.Full, LIMIT); MailboxMessage mailboxMessage = iterator.next(); assertThat(IOUtils.toString(new FileInputStream(new File(emlpath)), StandardCharsets.UTF_8)) .isEqualTo(IOUtils.toString(mailboxMessage.getFullContent(), StandardCharsets.UTF_8)); }
@Before public void setup() throws MailboxException { spamAssassin = mock(SpamAssassin.class); InMemoryMailboxSessionMapperFactory mapperFactory = new InMemoryMailboxSessionMapperFactory(); mailboxMapper = mapperFactory.getMailboxMapper(MAILBOX_SESSION); inbox = new SimpleMailbox(MailboxPath.forUser(USER, DefaultMailboxes.INBOX), UID_VALIDITY); inboxId = mailboxMapper.save(inbox); mailbox1 = new SimpleMailbox(MailboxPath.forUser(USER, "mailbox1"), UID_VALIDITY); mailboxId1 = mailboxMapper.save(mailbox1); mailboxId2 = mailboxMapper.save(new SimpleMailbox(MailboxPath.forUser(USER, "mailbox2"), UID_VALIDITY)); spamMailboxId = mailboxMapper.save(new SimpleMailbox(MailboxPath.forUser(USER, "Spam"), UID_VALIDITY)); spamCapitalMailboxId = mailboxMapper.save(new SimpleMailbox(MailboxPath.forUser(USER, "SPAM"), UID_VALIDITY)); trashMailboxId = mailboxMapper.save(new SimpleMailbox(MailboxPath.forUser(USER, "Trash"), UID_VALIDITY)); listener = new SpamAssassinListener(spamAssassin, mapperFactory, MailboxListener.ExecutionMode.SYNCHRONOUS); }
MailboxMapper mapper = mailboxSessionMapperFactory.getMailboxMapper(mailboxSession); try { mapper.execute(Mapper.toTransaction(() -> mailboxIds.add(mapper.save(m))));
@Test public void importEmlFileToMailboxShouldNotImportEmlFileWithWrongPathToGivenMailbox() throws Exception { Mailbox mailbox = new SimpleMailbox(MailboxPath.forUser(USER, "name"), UID_VALIDITY); mapperFactory.createMailboxMapper(session).save(mailbox); String emlpath = ClassLoader.getSystemResource("eml/frnog.eml").getFile(); mailboxManagerManagement.importEmlFileToMailbox(MailboxConstants.USER_NAMESPACE, USER, "name", "wrong_path" + emlpath); assertThat(mapperFactory.getMessageMapper(session).countMessagesInMailbox(mailbox)).isEqualTo(0); Iterator<MailboxMessage> iterator = mapperFactory.getMessageMapper(session).findInMailbox(mailbox, MessageRange.all(), MessageMapper.FetchType.Full, LIMIT); assertThat(iterator.hasNext()).isFalse(); }
private void doRenameMailbox(MailboxPath from, MailboxPath to, MailboxSession session, MailboxMapper mapper) throws MailboxException { // TODO put this into a serilizable transaction Mailbox mailbox = Optional.ofNullable(mapper.findMailboxByPath(from)) .orElseThrow(() -> new MailboxNotFoundException(from)); mailbox.setNamespace(to.getNamespace()); mailbox.setUser(to.getUser()); mailbox.setName(to.getName()); mapper.save(mailbox); dispatcher.mailboxRenamed(session, from, mailbox); // rename submailboxes MailboxPath children = new MailboxPath(from.getNamespace(), from.getUser(), from.getName() + getDelimiter() + "%"); locker.executeWithLock(session, children, (LockAwareExecution<Void>) () -> { List<Mailbox> subMailboxes = mapper.findMailboxWithPathLike(children); for (Mailbox sub : subMailboxes) { String subOriginalName = sub.getName(); String subNewName = to.getName() + subOriginalName.substring(from.getName().length()); MailboxPath fromPath = new MailboxPath(children, subOriginalName); sub.setName(subNewName); mapper.save(sub); dispatcher.mailboxRenamed(session, fromPath, sub); LOGGER.debug("Rename mailbox sub-mailbox {} to {}", subOriginalName, subNewName); } return null; }, true); }
@Test public void deleteMailboxesShouldDeleteMultipleMailboxes() throws Exception { mapperFactory.createMailboxMapper(session).save(new SimpleMailbox(MailboxPath.forUser(USER, "name"), UID_VALIDITY)); mapperFactory.createMailboxMapper(session).save(new SimpleMailbox(MailboxPath.forUser(USER, "INBOX"), UID_VALIDITY)); mapperFactory.createMailboxMapper(session).save(new SimpleMailbox(MailboxPath.forUser(USER, "INBOX.test"), UID_VALIDITY)); mailboxManagerManagement.deleteMailboxes(USER); assertThat(mapperFactory.createMailboxMapper(session).list()).isEmpty(); }
@Test public void createMailboxShouldThrowIfMailboxAlreadyExists() throws Exception { MailboxPath path = MailboxPath.forUser(USER, "name"); Mailbox mailbox = new SimpleMailbox(path, UID_VALIDITY); mapperFactory.createMailboxMapper(session).save(mailbox); assertThatThrownBy(() -> mailboxManagerManagement.createMailbox(MailboxConstants.USER_NAMESPACE, USER, "name")) .isInstanceOf(RuntimeException.class) .hasCauseInstanceOf(MailboxExistsException.class); }
@Test public void createMailboxShouldNotCreateAdditionalMailboxesIfMailboxAlreadyExists() throws Exception { MailboxPath path = MailboxPath.forUser(USER, "name"); Mailbox mailbox = new SimpleMailbox(path, UID_VALIDITY); mapperFactory.createMailboxMapper(session).save(mailbox); assertThat(mapperFactory.createMailboxMapper(session).list()).containsExactly(mailbox); }
@Test public void deleteMailboxesShouldDeleteMailboxes() throws Exception { mapperFactory.createMailboxMapper(session).save(new SimpleMailbox(MailboxPath.forUser(USER, "name"), UID_VALIDITY)); mailboxManagerManagement.deleteMailboxes(USER); assertThat(mapperFactory.createMailboxMapper(session).list()).isEmpty(); }
@Test public void deleteMailboxShouldDeleteGivenMailbox() throws Exception { mapperFactory.createMailboxMapper(session).save(new SimpleMailbox(MailboxPath.forUser(USER, "name"), UID_VALIDITY)); mailboxManagerManagement.deleteMailbox(MailboxConstants.USER_NAMESPACE, USER, "name"); assertThat(mapperFactory.createMailboxMapper(session).list()).isEmpty(); }
@Test public void deleteMailboxesShouldDeleteInbox() throws Exception { mapperFactory.createMailboxMapper(session).save(new SimpleMailbox(MailboxPath.forUser(USER, "INBOX"), UID_VALIDITY)); mailboxManagerManagement.deleteMailboxes(USER); assertThat(mapperFactory.createMailboxMapper(session).list()).isEmpty(); }
@Test public void deleteMailboxesShouldNotDeleteMailboxesBelongingToOtherUsers() throws Exception { Mailbox mailbox = new SimpleMailbox(MailboxPath.forUser("userbis", "name"), UID_VALIDITY); mapperFactory.createMailboxMapper(session).save(mailbox); mailboxManagerManagement.deleteMailboxes(USER); assertThat(mapperFactory.createMailboxMapper(session).list()).containsExactly(mailbox); }
@Test public void deleteMailboxesShouldDeleteMailboxesWithEmptyNames() throws Exception { mapperFactory.createMailboxMapper(session).save(new SimpleMailbox(MailboxPath.forUser(USER, ""), UID_VALIDITY)); mailboxManagerManagement.deleteMailboxes(USER); assertThat(mapperFactory.createMailboxMapper(session).list()).isEmpty(); }
@Test public void deleteMailboxesShouldDeleteMailboxesChildren() throws Exception { mapperFactory.createMailboxMapper(session).save(new SimpleMailbox(MailboxPath.forUser(USER, "INBOX.test"), UID_VALIDITY)); mailboxManagerManagement.deleteMailboxes(USER); assertThat(mapperFactory.createMailboxMapper(session).list()).isEmpty(); }
@Test public void listMailboxesShouldReturnUserMailboxes() throws Exception { Mailbox mailbox1 = new SimpleMailbox(new MailboxPath("#top", USER, "name1"), UID_VALIDITY); Mailbox mailbox2 = new SimpleMailbox(MailboxPath.forUser(USER, "name2"), UID_VALIDITY); Mailbox mailbox3 = new SimpleMailbox(MailboxPath.forUser("other_user", "name3"), UID_VALIDITY); Mailbox mailbox4 = new SimpleMailbox(MailboxPath.forUser(USER, "name4"), UID_VALIDITY); Mailbox mailbox5 = new SimpleMailbox(MailboxPath.forUser(USER, "INBOX"), UID_VALIDITY); Mailbox mailbox6 = new SimpleMailbox(MailboxPath.forUser(USER, "INBOX.toto"), UID_VALIDITY); mapperFactory.createMailboxMapper(session).save(mailbox1); mapperFactory.createMailboxMapper(session).save(mailbox2); mapperFactory.createMailboxMapper(session).save(mailbox3); mapperFactory.createMailboxMapper(session).save(mailbox4); mapperFactory.createMailboxMapper(session).save(mailbox5); mapperFactory.createMailboxMapper(session).save(mailbox6); assertThat(mailboxManagerManagement.listMailboxes(USER)).containsOnly("name2", "name4", "INBOX", "INBOX.toto"); }
@Test public void deleteMailboxesShouldNotDeleteMailboxesBelongingToNotPrivateNamespace() throws Exception { Mailbox mailbox = new SimpleMailbox(new MailboxPath("#top", USER, "name"), UID_VALIDITY); mapperFactory.createMailboxMapper(session).save(mailbox); mailboxManagerManagement.deleteMailboxes(USER); assertThat(mapperFactory.createMailboxMapper(session).list()).containsExactly(mailbox); }
@Test public void deleteMailboxShouldNotDeleteGivenMailboxIfWrongName() throws Exception { Mailbox mailbox = new SimpleMailbox(MailboxPath.forUser(USER, "wrong_name"), UID_VALIDITY); mapperFactory.createMailboxMapper(session).save(mailbox); mailboxManagerManagement.deleteMailbox(MailboxConstants.USER_NAMESPACE, USER, "name"); assertThat(mapperFactory.createMailboxMapper(session).list()).containsOnly(mailbox); }
@Test public void deleteMailboxShouldNotDeleteGivenMailboxIfWrongUser() throws Exception { Mailbox mailbox = new SimpleMailbox(MailboxPath.forUser("userbis", "name"), UID_VALIDITY); mapperFactory.createMailboxMapper(session).save(mailbox); mailboxManagerManagement.deleteMailbox(MailboxConstants.USER_NAMESPACE, USER, "name"); assertThat(mapperFactory.createMailboxMapper(session).list()).containsOnly(mailbox); }
@Test public void deleteMailboxShouldNotDeleteGivenMailboxIfWrongNamespace() throws Exception { Mailbox mailbox = new SimpleMailbox(new MailboxPath("#top", USER, "name"), UID_VALIDITY); mapperFactory.createMailboxMapper(session).save(mailbox); mailboxManagerManagement.deleteMailbox(MailboxConstants.USER_NAMESPACE, USER, "name"); assertThat(mapperFactory.createMailboxMapper(session).list()).containsOnly(mailbox); }