@Override public MailboxSession loginAsOtherUser(String adminUserid, String passwd, String otherUserId) throws MailboxException { if (! isValidLogin(adminUserid, passwd)) { throw new BadCredentialsException(); } Authorizator.AuthorizationState authorizationState = authorizator.canLoginAsOtherUser(adminUserid, otherUserId); switch (authorizationState) { case ALLOWED: return createSystemSession(otherUserId); case NOT_ADMIN: throw new NotAdminException(); case UNKNOWN_USER: throw new UserDoesNotExistException(otherUserId); default: throw new RuntimeException("Unknown AuthorizationState " + authorizationState); } }
@Test public void doneShouldCopyMailFromOutboxToSentOnlyOneTimeWhenSuccess() throws Exception { MessageIdManager messageIdManager = mock(MessageIdManager.class); testee = new PostDequeueDecorator(mockedMailQueueItem, mailboxManager, new InMemoryMessageId.Factory(), messageIdManager, new SystemMailboxesProviderImpl(mailboxManager)); MailboxSession mailboxSession = mailboxManager.createSystemSession(USERNAME); mailboxManager.createMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); MailboxId sentMailboxId = mailboxManager.createMailbox(SENT_MAILBOX_PATH, mailboxSession).get(); MessageManager messageManager = mailboxManager.getMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); ComposedMessageId messageId = messageManager.appendMessage(AppendCommand.from(message), mailboxSession); mail.setAttribute(MailMetadata.MAIL_METADATA_MESSAGE_ID_ATTRIBUTE, messageId.getMessageId().serialize()); mail.setAttribute(MailMetadata.MAIL_METADATA_USERNAME_ATTRIBUTE, USERNAME); ImmutableList<MessageResult> allMessages = ImmutableList.copyOf(messageManager.getMessages(MessageRange.all(), FetchGroupImpl.MINIMAL, mailboxSession)); when(messageIdManager.getMessages(eq(ImmutableList.of(messageId.getMessageId())), eq(FetchGroupImpl.MINIMAL), any(MailboxSession.class))).thenReturn(allMessages); testee.done(true); testee.done(true); verify(messageIdManager, times(1)).getMessages(eq(ImmutableList.of(messageId.getMessageId())), eq(FetchGroupImpl.MINIMAL), any(MailboxSession.class)); verify(messageIdManager, times(1)).setInMailboxes(eq(messageId.getMessageId()), eq(ImmutableList.of(sentMailboxId)), any(MailboxSession.class)); verify(messageIdManager, times(1)).setFlags(eq(new Flags(Flag.SEEN)), eq(MessageManager.FlagsUpdateMode.ADD), eq(messageId.getMessageId()), eq(ImmutableList.of(sentMailboxId)), any(MailboxSession.class)); verifyNoMoreInteractions(messageIdManager); }
@Test public void getMailboxesShouldReturnEmptyListWhenNoMailboxes() { GetMailboxesRequest getMailboxesRequest = GetMailboxesRequest.builder() .build(); MailboxSession mailboxSession = mailboxManager.createSystemSession(USERNAME); List<JmapResponse> getMailboxesResponse = getMailboxesMethod.process(getMailboxesRequest, clientId, mailboxSession).collect(Collectors.toList()); assertThat(getMailboxesResponse) .hasSize(1) .extracting(JmapResponse::getResponse) .hasOnlyElementsOfType(GetMailboxesResponse.class) .extracting(GetMailboxesResponse.class::cast) .flatExtracting(GetMailboxesResponse::getList) .isEmpty(); }
@Test(expected = MailQueue.MailQueueException.class) public void doneShouldThrowWhenMailboxException() throws Exception { MessageIdManager messageIdManager = mock(MessageIdManager.class); testee = new PostDequeueDecorator(mockedMailQueueItem, mailboxManager, new InMemoryMessageId.Factory(), messageIdManager, new SystemMailboxesProviderImpl(mailboxManager)); MailboxSession mailboxSession = mailboxManager.createSystemSession(USERNAME); mailboxManager.createMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); mailboxManager.createMailbox(SENT_MAILBOX_PATH, mailboxSession).get(); MessageManager messageManager = mailboxManager.getMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); ComposedMessageId messageId = messageManager.appendMessage(AppendCommand.from(message), mailboxSession); mail.setAttribute(MailMetadata.MAIL_METADATA_MESSAGE_ID_ATTRIBUTE, messageId.getMessageId().serialize()); mail.setAttribute(MailMetadata.MAIL_METADATA_USERNAME_ATTRIBUTE, USERNAME); when(messageIdManager.getMessages(eq(ImmutableList.of(messageId.getMessageId())), eq(FetchGroupImpl.MINIMAL), any(MailboxSession.class))).thenThrow(MailboxException.class); testee.done(true); } }
@Test public void getMailboxesShouldReturnInboxWithSortOrder10() throws Exception { MailboxSession mailboxSession = mailboxManager.createSystemSession(USERNAME); MailboxPath mailboxPath = MailboxPath.forUser(USERNAME, "INBOX"); mailboxManager.createMailbox(mailboxPath, mailboxSession); GetMailboxesRequest getMailboxesRequest = GetMailboxesRequest.builder() .build(); List<JmapResponse> getMailboxesResponse = getMailboxesMethod.process(getMailboxesRequest, clientId, mailboxSession).collect(Collectors.toList()); assertThat(getMailboxesResponse) .hasSize(1) .extracting(JmapResponse::getResponse) .hasOnlyElementsOfType(GetMailboxesResponse.class) .extracting(GetMailboxesResponse.class::cast) .flatExtracting(GetMailboxesResponse::getList) .extracting(Mailbox::getSortOrder) .containsOnly(SortOrder.of(10)); }
@Test public void getMailboxesShouldReturnSortOrder1000OnUnknownFolder() throws Exception { MailboxSession mailboxSession = mailboxManager.createSystemSession(USERNAME); MailboxPath mailboxPath = MailboxPath.forUser(USERNAME, "unknown"); mailboxManager.createMailbox(mailboxPath, mailboxSession); GetMailboxesRequest getMailboxesRequest = GetMailboxesRequest.builder() .build(); List<JmapResponse> getMailboxesResponse = getMailboxesMethod.process(getMailboxesRequest, clientId, mailboxSession).collect(Collectors.toList()); assertThat(getMailboxesResponse) .hasSize(1) .extracting(JmapResponse::getResponse) .hasOnlyElementsOfType(GetMailboxesResponse.class) .extracting(GetMailboxesResponse.class::cast) .flatExtracting(GetMailboxesResponse::getList) .extracting(Mailbox::getSortOrder) .containsOnly(SortOrder.of(1000)); }
@Test public void getMailboxesShouldReturnInboxWithSortOrder10OnDifferenceCase() throws Exception { MailboxSession mailboxSession = mailboxManager.createSystemSession(USERNAME); MailboxPath mailboxPath = MailboxPath.forUser(USERNAME, "InBoX"); mailboxManager.createMailbox(mailboxPath, mailboxSession); GetMailboxesRequest getMailboxesRequest = GetMailboxesRequest.builder() .build(); List<JmapResponse> getMailboxesResponse = getMailboxesMethod.process(getMailboxesRequest, clientId, mailboxSession).collect(Collectors.toList()); assertThat(getMailboxesResponse) .hasSize(1) .extracting(JmapResponse::getResponse) .hasOnlyElementsOfType(GetMailboxesResponse.class) .extracting(GetMailboxesResponse.class::cast) .flatExtracting(GetMailboxesResponse::getList) .extracting(Mailbox::getSortOrder) .containsOnly(SortOrder.of(10)); }
@Test public void matchShouldSupportVirtualHosting() throws Exception { when(usersRepository.getUser(MailAddressFixture.ANY_AT_JAMES)).thenReturn(MailAddressFixture.ANY_AT_JAMES.asString()); when(usersRepository.getUser(MailAddressFixture.OTHER_AT_JAMES)).thenReturn(MailAddressFixture.OTHER_AT_JAMES.asString()); String username = MailAddressFixture.ANY_AT_JAMES.asString(); QuotaRoot quotaRoot = quotaRootResolver.getQuotaRoot(MailboxPath.inbox(mailboxManager.createSystemSession(username))); maxQuotaManager.setMaxStorage(quotaRoot, QuotaSize.size(100)); FakeMail fakeMail = FakeMail.builder() .recipient(MailAddressFixture.ANY_AT_JAMES) .recipient(MailAddressFixture.OTHER_AT_JAMES) .size(150) .build(); Collection<MailAddress> result = testee.match(fakeMail); assertThat(result).containsOnly(MailAddressFixture.ANY_AT_JAMES); }
@Test @SuppressWarnings("unchecked") public void getMailboxesShouldReturnEmptyMailboxByDefault() throws MailboxException { MailboxPath mailboxPath = MailboxPath.forUser(USERNAME, "name"); MailboxSession mailboxSession = mailboxManager.createSystemSession(USERNAME); mailboxManager.createMailbox(mailboxPath, mailboxSession); GetMailboxesRequest getMailboxesRequest = GetMailboxesRequest.builder() .build(); List<JmapResponse> getMailboxesResponse = getMailboxesMethod.process(getMailboxesRequest, clientId, mailboxSession).collect(Collectors.toList()); assertThat(getMailboxesResponse) .hasSize(1) .extracting(JmapResponse::getResponse) .hasOnlyElementsOfType(GetMailboxesResponse.class) .extracting(GetMailboxesResponse.class::cast) .flatExtracting(GetMailboxesResponse::getList) .extracting(Mailbox::getTotalMessages, Mailbox::getUnreadMessages) .containsOnly(Tuple.tuple(Number.ZERO, Number.ZERO)); }
@Before public void setUp() throws Exception { StoreMailboxManager mailboxManager = new InMemoryIntegrationResources() .createMailboxManager(new SimpleGroupMembershipResolver()); mapperFactory = mailboxManager.getMapperFactory(); mailboxManagerManagement = new MailboxManagerManagement(); mailboxManagerManagement.setMailboxManager(mailboxManager); session = mailboxManager.createSystemSession("TEST"); }
@Test public void doneShouldNotMoveMailFromOutboxToSentWhenNoMetadataProvided() throws Exception { MailboxSession mailboxSession = mailboxManager.createSystemSession(USERNAME); mailboxManager.createMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); mailboxManager.createMailbox(SENT_MAILBOX_PATH, mailboxSession); MessageManager messageManager = mailboxManager.getMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); messageManager.appendMessage(AppendCommand.from(message), mailboxSession); testee.done(true); MessageManager mailbox = mailboxManager.getMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); MessageResultIterator resultIterator = mailbox.getMessages(MessageRange.one(UID), FetchGroupImpl.FULL_CONTENT, mailboxSession); assertThat(resultIterator).hasSize(1); }
@Test public void doneShouldNotMoveMailFromOutboxToSentWhenMessageIdNotProvided() throws Exception { MailboxSession mailboxSession = mailboxManager.createSystemSession(USERNAME); mailboxManager.createMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); mailboxManager.createMailbox(SENT_MAILBOX_PATH, mailboxSession); MessageManager messageManager = mailboxManager.getMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); messageManager.appendMessage(AppendCommand.from(message), mailboxSession); mail.setAttribute(MailMetadata.MAIL_METADATA_USERNAME_ATTRIBUTE, USERNAME); testee.done(true); MessageManager mailbox = mailboxManager.getMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); MessageResultIterator resultIterator = mailbox.getMessages(MessageRange.one(UID), FetchGroupImpl.FULL_CONTENT, mailboxSession); assertThat(resultIterator).hasSize(1); }
@Test public void matchShouldNotIncludeRecipientNotOverQuota() throws Exception { String username = MailAddressFixture.ANY_AT_JAMES.getLocalPart(); QuotaRoot quotaRoot = quotaRootResolver.getQuotaRoot(MailboxPath.inbox(mailboxManager.createSystemSession(username))); maxQuotaManager.setMaxStorage(quotaRoot, QuotaSize.size(100)); FakeMail fakeMail = FakeMail.builder() .recipient(MailAddressFixture.ANY_AT_JAMES) .recipient(MailAddressFixture.OTHER_AT_JAMES) .size(150) .build(); Collection<MailAddress> result = testee.match(fakeMail); assertThat(result).containsOnly(MailAddressFixture.ANY_AT_JAMES); }
@Test public void doneShouldNotMoveMailFromOutboxToSentWhenInvalidMessageIdProvided() throws Exception { MailboxSession mailboxSession = mailboxManager.createSystemSession(USERNAME); mailboxManager.createMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); mailboxManager.createMailbox(SENT_MAILBOX_PATH, mailboxSession); MessageManager messageManager = mailboxManager.getMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); messageManager.appendMessage(AppendCommand.from(message), mailboxSession); mail.setAttribute(MailMetadata.MAIL_METADATA_USERNAME_ATTRIBUTE, USERNAME); mail.setAttribute(MailMetadata.MAIL_METADATA_MESSAGE_ID_ATTRIBUTE, "invalid"); testee.done(true); MessageManager mailbox = mailboxManager.getMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); MessageResultIterator resultIterator = mailbox.getMessages(MessageRange.one(UID), FetchGroupImpl.FULL_CONTENT, mailboxSession); assertThat(resultIterator).hasSize(1); }
@Test(expected = MailboxRoleNotFoundException.class) public void doneShouldThrowWhenSentDoesNotExist() throws Exception { MailboxSession mailboxSession = mailboxManager.createSystemSession(USERNAME); mailboxManager.createMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); MessageManager messageManager = mailboxManager.getMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); ComposedMessageId messageId = messageManager.appendMessage(AppendCommand.from(message), mailboxSession); mail.setAttribute(MailMetadata.MAIL_METADATA_MESSAGE_ID_ATTRIBUTE, messageId.getMessageId().serialize()); mail.setAttribute(MailMetadata.MAIL_METADATA_USERNAME_ATTRIBUTE, USERNAME); testee.done(true); }
@Test public void doneShouldNotMoveMailFromOutboxToSentWhenUsernameNotProvided() throws Exception { MailboxSession mailboxSession = mailboxManager.createSystemSession(USERNAME); mailboxManager.createMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); mailboxManager.createMailbox(SENT_MAILBOX_PATH, mailboxSession); MessageManager messageManager = mailboxManager.getMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); ComposedMessageId messageId = messageManager.appendMessage(AppendCommand.from(message), mailboxSession); mail.setAttribute(MailMetadata.MAIL_METADATA_MESSAGE_ID_ATTRIBUTE, messageId.getMessageId().serialize()); testee.done(true); MessageManager mailbox = mailboxManager.getMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); MessageResultIterator resultIterator = mailbox.getMessages(MessageRange.one(UID), FetchGroupImpl.FULL_CONTENT, mailboxSession); assertThat(resultIterator).hasSize(1); }
@Test public void doneShouldNotThrowWhenMessageIsNotInOutbox() throws Exception { MailboxSession mailboxSession = mailboxManager.createSystemSession(USERNAME); mailboxManager.createMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); mailboxManager.createMailbox(SENT_MAILBOX_PATH, mailboxSession); MessageManager messageManager = mailboxManager.getMailbox(SENT_MAILBOX_PATH, mailboxSession); ComposedMessageId sentMessageId = messageManager.appendMessage(AppendCommand.from(message), mailboxSession); mail.setAttribute(MailMetadata.MAIL_METADATA_MESSAGE_ID_ATTRIBUTE, sentMessageId.getMessageId().serialize()); mail.setAttribute(MailMetadata.MAIL_METADATA_USERNAME_ATTRIBUTE, USERNAME); testee.done(true); }
@Test public void doneShouldCopyMailFromOutboxToSentWhenSuccess() throws Exception { MailboxSession mailboxSession = mailboxManager.createSystemSession(USERNAME); mailboxManager.createMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); mailboxManager.createMailbox(SENT_MAILBOX_PATH, mailboxSession); MessageManager messageManager = mailboxManager.getMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); ComposedMessageId messageId = messageManager.appendMessage(AppendCommand.from(message), mailboxSession); mail.setAttribute(MailMetadata.MAIL_METADATA_MESSAGE_ID_ATTRIBUTE, messageId.getMessageId().serialize()); mail.setAttribute(MailMetadata.MAIL_METADATA_USERNAME_ATTRIBUTE, USERNAME); testee.done(true); MessageManager sentMailbox = mailboxManager.getMailbox(SENT_MAILBOX_PATH, mailboxSession); MessageResultIterator resultIterator = sentMailbox.getMessages(MessageRange.one(UID), FetchGroupImpl.FULL_CONTENT, mailboxSession); assertThat(resultIterator).hasSize(1); }
@Test public void doneShouldNotMoveMailFromOutboxToSentWhenSuccessIsFalse() throws Exception { MailboxSession mailboxSession = mailboxManager.createSystemSession(USERNAME); mailboxManager.createMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); mailboxManager.createMailbox(SENT_MAILBOX_PATH, mailboxSession); MessageManager messageManager = mailboxManager.getMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); ComposedMessageId messageId = messageManager.appendMessage(AppendCommand.from(message), mailboxSession); mail.setAttribute(MailMetadata.MAIL_METADATA_MESSAGE_ID_ATTRIBUTE, messageId.getMessageId().serialize()); mail.setAttribute(MailMetadata.MAIL_METADATA_USERNAME_ATTRIBUTE, USERNAME); testee.done(false); MessageManager mailbox = mailboxManager.getMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); MessageResultIterator resultIterator = mailbox.getMessages(MessageRange.one(UID), FetchGroupImpl.FULL_CONTENT, mailboxSession); assertThat(resultIterator).hasSize(1); }
@Test public void doneShouldDeleteMailFromOutboxWhenSuccess() throws Exception { MailboxSession mailboxSession = mailboxManager.createSystemSession(USERNAME); mailboxManager.createMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); mailboxManager.createMailbox(SENT_MAILBOX_PATH, mailboxSession); MessageManager messageManager = mailboxManager.getMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); ComposedMessageId messageId = messageManager.appendMessage(AppendCommand.from(message), mailboxSession); mail.setAttribute(MailMetadata.MAIL_METADATA_MESSAGE_ID_ATTRIBUTE, messageId.getMessageId().serialize()); mail.setAttribute(MailMetadata.MAIL_METADATA_USERNAME_ATTRIBUTE, USERNAME); testee.done(true); MessageManager mailbox = mailboxManager.getMailbox(OUTBOX_MAILBOX_PATH, mailboxSession); MessageResultIterator resultIterator = mailbox.getMessages(MessageRange.one(UID), FetchGroupImpl.FULL_CONTENT, mailboxSession); assertThat(resultIterator).hasSize(0); }