MessageFullView extends MessageFastView { public static Builder builder() { return new Builder(); } @VisibleForTesting  MessageFullView(MessageId id,
                    BlobId blobId,
                    String threadId,
                    ImmutableList<MailboxId> mailboxIds,
                    Optional<String> inReplyToMessageId,
                    boolean hasAttachment,
                    ImmutableMap<String, String> headers,
                    Optional<Emailer> from,
                    ImmutableList<Emailer> to,
                    ImmutableList<Emailer> cc,
                    ImmutableList<Emailer> bcc,
                    ImmutableList<Emailer> replyTo,
                    String subject,
                    Instant date,
                    Number size,
                    PreviewDTO preview,
                    Optional<String> textBody,
                    Optional<String> htmlBody,
                    ImmutableList<Attachment> attachments,
                    ImmutableMap<BlobId, SubMessage> attachedMessages,
                    Keywords keywords); static Builder builder(); boolean isHasAttachment(); Optional<String> getTextBody(); Optional<String> getHtmlBody(); ImmutableList<Attachment> getAttachments(); ImmutableMap<BlobId, SubMessage> getAttachedMessages();  }
@Test void buildShouldThrowWhenIdIsNull() { assertThatThrownBy(() -> MessageFullView.builder().build()) .isInstanceOf(IllegalStateException.class); }
@Test void buildShouldThrowWhenBlobIdIsNull() { assertThatThrownBy(() -> MessageFullView.builder() .id(TestMessageId.of(1)) .build()) .isInstanceOf(IllegalStateException.class); }
@Test void buildShouldThrowWhenThreadIdIsNull() { assertThatThrownBy(() -> MessageFullView.builder() .id(TestMessageId.of(1)) .blobId(BlobId.of("blobId")) .build()) .isInstanceOf(IllegalStateException.class); }
@Test void buildShouldThrowWhenThreadIdIsEmpty() { assertThatThrownBy(() -> MessageFullView.builder() .id(TestMessageId.of(1)) .blobId(BlobId.of("blobId")) .threadId("") .build()) .isInstanceOf(IllegalStateException.class); }
@Test void buildShouldThrowWhenMailboxIdsIsNull() { assertThatThrownBy(() -> MessageFullView.builder() .id(TestMessageId.of(1)) .blobId(BlobId.of("blobId")) .threadId("threadId") .build()) .isInstanceOf(IllegalStateException.class); }
@Test void buildShouldThrowWhenHeadersIsNull() { assertThatThrownBy(() -> MessageFullView.builder() .id(TestMessageId.of(1)) .blobId(BlobId.of("blobId")) .threadId("threadId") .fluentMailboxIds() .build()) .isInstanceOf(IllegalStateException.class); }
@Test void buildShouldThrowWhenSubjectIsNull() { assertThatThrownBy(() -> MessageFullView.builder() .id(TestMessageId.of(1)) .blobId(BlobId.of("blobId")) .threadId("threadId") .fluentMailboxIds() .headers(ImmutableMap.of()) .build()) .isInstanceOf(IllegalStateException.class); }
@Test void buildShouldThrowWhenSubjectIsEmpty() { assertThatThrownBy(() -> MessageFullView.builder() .id(TestMessageId.of(1)) .blobId(BlobId.of("blobId")) .threadId("threadId") .fluentMailboxIds() .headers(ImmutableMap.of()) .subject("") .build()) .isInstanceOf(IllegalStateException.class); }
@Test void buildShouldThrowWhenSizeIsNull() { assertThatThrownBy(() -> MessageFullView.builder() .id(TestMessageId.of(1)) .blobId(BlobId.of("blobId")) .threadId("threadId") .fluentMailboxIds() .headers(ImmutableMap.of()) .subject("subject") .build()) .isInstanceOf(IllegalStateException.class); }
@Test void buildShouldThrowWhenDateIsNull() { assertThatThrownBy(() -> MessageFullView.builder() .id(TestMessageId.of(1)) .blobId(BlobId.of("blobId")) .threadId("threadId") .fluentMailboxIds() .headers(ImmutableMap.of()) .subject("subject") .size(123) .build()) .isInstanceOf(IllegalStateException.class); }
@Test void buildShouldThrowWhenAttachedMessageIsNotMatchingAttachments() { Attachment simpleAttachment = Attachment.builder().blobId(BlobId.of("blobId")).type("type").name("name").size(123).build(); ImmutableList<Attachment> attachments = ImmutableList.of(simpleAttachment); SubMessage simpleMessage = SubMessage.builder() .headers(ImmutableMap.of("key", "value")) .subject("subject") .date(Instant.now()) .build(); ImmutableMap<BlobId, SubMessage> attachedMessages = ImmutableMap.of(BlobId.of("differentBlobId"), simpleMessage); assertThatThrownBy(() -> MessageFullView.builder() .id(TestMessageId.of(1)) .blobId(BlobId.of("blobId")) .threadId("threadId") .mailboxId(InMemoryId.of(456)) .headers(ImmutableMap.of("key", "value")) .subject("subject") .size(123) .date(Instant.now()) .preview(PREVIEW) .attachments(attachments) .attachedMessages(attachedMessages) .build()) .isInstanceOf(IllegalStateException.class); }
@Test void buildShouldWorkWhenAllFieldsArePresent() { Emailer from = Emailer.builder().name("from").email("from@domain").build(); ImmutableList<Emailer> to = ImmutableList.of(Emailer.builder().name("to").email("to@domain").build()); ImmutableList<Emailer> cc = ImmutableList.of(Emailer.builder().name("cc").email("cc@domain").build()); ImmutableList<Emailer> bcc = ImmutableList.of(Emailer.builder().name("bcc").email("bcc@domain").build()); ImmutableList<Emailer> replyTo = ImmutableList.of(Emailer.builder().name("replyTo").email("replyTo@domain").build()); Instant currentDate = Instant.now(); Attachment simpleAttachment = Attachment.builder().blobId(BlobId.of("blobId")).type("type").name("name").size(123).build(); ImmutableList<Attachment> attachments = ImmutableList.of(simpleAttachment); SubMessage simpleMessage = SubMessage.builder() .headers(ImmutableMap.of("key", "value")) .subject("subject") .date(currentDate) .build(); ImmutableMap<BlobId, SubMessage> attachedMessages = ImmutableMap.of(BlobId.of("blobId"), simpleMessage); Keywords keywords = Keywords.strictFactory() .from(Keyword.DRAFT, Keyword.ANSWERED, Keyword.FLAGGED); Number messageSize = Number.fromLong(123); MessageFullView expected = new MessageFullView( TestMessageId.of(1), BlobId.of("blobId"), "threadId", ImmutableList.of(InMemoryId.of(456)), Optional.of("inReplyToMessageId"), true, ImmutableMap.of("key", "value"), Optional.of(from), to, cc, bcc, replyTo, "subject", currentDate, messageSize, PREVIEW_DTO, Optional.of("textBody"), Optional.of("htmlBody"), attachments, attachedMessages, keywords); MessageFullView tested = MessageFullView.builder() .id(TestMessageId.of(1)) .blobId(BlobId.of("blobId")) .threadId("threadId") .mailboxId(InMemoryId.of(456)) .inReplyToMessageId("inReplyToMessageId") .keywords(keywords) .headers(ImmutableMap.of("key", "value")) .from(from) .to(to) .cc(cc) .bcc(bcc) .replyTo(replyTo) .subject("subject") .date(currentDate) .size(123) .preview(PREVIEW) .textBody(Optional.of("textBody")) .htmlBody(Optional.of("htmlBody")) .attachments(attachments) .attachedMessages(attachedMessages) .build(); assertThat(tested).isEqualToComparingFieldByField(expected); }
@Test void buildShouldThrowWhenOneAttachedMessageIsNotInAttachments() { assertThatThrownBy(() -> MessageFullView.builder() .id(TestMessageId.of(1)) .blobId(BlobId.of("blobId")) .threadId("threadId") .mailboxId(InMemoryId.of(456)) .headers(ImmutableMap.of("key", "value")) .subject("subject") .size(1) .date(Instant.now()) .preview(PREVIEW) .attachedMessages(ImmutableMap.of(BlobId.of("key"), SubMessage.builder() .headers(ImmutableMap.of("key", "value")) .subject("subject") .date(Instant.now()) .build())) .build()) .isInstanceOf(IllegalStateException.class); }
@Test void buildShouldNotThrowWhenOneAttachedMessageIsInAttachments() { MessageFullView.builder() .id(TestMessageId.of(1)) .blobId(BlobId.of("blobId")) .threadId("threadId") .mailboxId(InMemoryId.of(456)) .headers(ImmutableMap.of("key", "value")) .subject("subject") .size(1) .date(Instant.now()) .preview(PREVIEW) .attachments(ImmutableList.of(Attachment.builder() .blobId(BlobId.of("key")) .size(1) .type("type") .build())) .attachedMessages(ImmutableMap.of(BlobId.of("key"), SubMessage.builder() .headers(ImmutableMap.of("key", "value")) .subject("subject") .date(Instant.now()) .build())) .build(); }