@Override public void done(boolean success) throws MailQueueException { mailQueueItem.done(success); if (success && mandatoryJmapMetaDataIsPresent()) { MessageId messageId = messageIdFactory.fromString((String) getMail().getAttribute(MailMetadata.MAIL_METADATA_MESSAGE_ID_ATTRIBUTE)); String username = (String) getMail().getAttribute(MailMetadata.MAIL_METADATA_USERNAME_ATTRIBUTE); if (getMail().getAttribute(IS_DELIVERED) == null) { try { MailboxSession mailboxSession = mailboxManager.createSystemSession(username); moveFromOutboxToSentWithSeenFlag(messageId, mailboxSession); getMail().setAttribute(IS_DELIVERED, IS_DELIVERED); } catch (MailShouldBeInOutboxException e) { LOG.info("Message does not exist on Outbox anymore, it could have already been sent", e); } catch (MailboxException e) { throw new MailQueueException(e.getMessage(), e); } } } }
@Before public void init() throws Exception { InMemoryIntegrationResources inMemoryIntegrationResources = new InMemoryIntegrationResources(); GroupMembershipResolver groupMembershipResolver = inMemoryIntegrationResources.createGroupMembershipResolver(); mailboxManager = inMemoryIntegrationResources.createMailboxManager(groupMembershipResolver); mockedMailQueueItem = mock(MailQueueItem.class); mail = FakeMail.defaultFakeMail(); when(mockedMailQueueItem.getMail()).thenReturn(mail); testee = new PostDequeueDecorator(mockedMailQueueItem, mailboxManager, new InMemoryMessageId.Factory(), inMemoryIntegrationResources.createMessageIdManager(mailboxManager), new SystemMailboxesProviderImpl(mailboxManager)); message = Message.Builder.of() .setSubject("test") .setBody("testmail", StandardCharsets.UTF_8) .build(); }
@Test public void sendShouldPositionJMAPRelatedMetadata() throws Exception { FakeMail mail = FakeMail.builder() .name(NAME) .build(); mailSpool.send(mail, new MailMetadata(MESSAGE_ID, USERNAME)); MailQueueItem actual = myQueue.deQueue(); assertThat(actual.getMail().getAttribute(MailMetadata.MAIL_METADATA_USERNAME_ATTRIBUTE)) .isEqualTo(USERNAME); assertThat(actual.getMail().getAttribute(MailMetadata.MAIL_METADATA_MESSAGE_ID_ATTRIBUTE)) .isEqualTo(MESSAGE_ID.serialize()); }
@Test public void sendShouldEnQueueTheMail() throws Exception { FakeMail mail = FakeMail.builder() .name(NAME) .build(); mailSpool.send(mail, new MailMetadata(MESSAGE_ID, USERNAME)); MailQueueItem actual = myQueue.deQueue(); assertThat(actual.getMail().getName()).isEqualTo(NAME); }
@Test public void doneShouldCallDecoratedDone() throws Exception { try { testee.done(true); } catch (Exception e) { //Ignore } verify(mockedMailQueueItem).done(true); }
@Override public Mail getMail() { return mailQueueItem.getMail(); }
@Override public Mail getMail() { return mailQueueItem.getMail(); }
@Override public void done(boolean success) throws MailQueueException { mailQueueItem.done(success); } }