blob: c9836414fc823984ffeff2bf1868b61f604f22df [file] [log] [blame]
/****************************************************************
* Licensed to the Apache Software Foundation (ASF) under one *
* or more contributor license agreements. See the NOTICE file *
* distributed with this work for additional information *
* regarding copyright ownership. The ASF licenses this file *
* to you under the Apache License, Version 2.0 (the *
* "License"); you may not use this file except in compliance *
* with the License. You may obtain a copy of the License at *
* *
* http://www.apache.org/licenses/LICENSE-2.0 *
* *
* Unless required by applicable law or agreed to in writing, *
* software distributed under the License is distributed on an *
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
* KIND, either express or implied. See the License for the *
* specific language governing permissions and limitations *
* under the License. *
****************************************************************/
package org.apache.james.jmap.draft.model;
import static org.assertj.core.api.Assertions.assertThat;
import java.time.ZonedDateTime;
import java.util.Optional;
import org.apache.james.jmap.model.Number;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import com.google.common.collect.ImmutableList;
import nl.jqno.equalsverifier.EqualsVerifier;
public class FilterConditionTest {
@Rule
public ExpectedException expectedException = ExpectedException.none();
@Test
public void buildShouldWorkWhenNoInMailboxes() {
FilterCondition filterCondition = FilterCondition.builder().build();
assertThat(filterCondition.getInMailboxes()).isEmpty();
}
@Test
public void buildShouldWorkWhenGivenInMailboxes() {
FilterCondition filterCondition = FilterCondition.builder()
.inMailboxes(Optional.of(ImmutableList.of("1", "2")))
.build();
assertThat(filterCondition.getInMailboxes()).contains(ImmutableList.of("1", "2"));
}
@Test
public void buildShouldWorkWhenGivenInMailboxesAsEllipsis() {
FilterCondition filterCondition = FilterCondition.builder()
.inMailboxes("1", "2")
.build();
assertThat(filterCondition.getInMailboxes()).contains(ImmutableList.of("1", "2"));
}
@Test
public void builderShouldBuildWhenGivenNotInMailboxes() {
FilterCondition filterCondition = FilterCondition.builder()
.notInMailboxes(Optional.of(ImmutableList.of("1", "2")))
.build();
assertThat(filterCondition.getNotInMailboxes()).contains(ImmutableList.of("1", "2"));
}
@Test
public void builderShouldBuildWhenGivenNotInMailboxesAsEllipsis() {
FilterCondition filterCondition = FilterCondition.builder()
.notInMailboxes("1", "2")
.build();
assertThat(filterCondition.getNotInMailboxes()).contains(ImmutableList.of("1", "2"));
}
@Test
public void buildShouldWork() {
ZonedDateTime before = ZonedDateTime.parse("2016-07-19T14:30:00Z");
ZonedDateTime after = ZonedDateTime.parse("2016-07-19T14:31:00Z");
long minSize = 4;
long maxSize = 123;
boolean isFlagged = true;
boolean isUnread = true;
boolean isAnswered = true;
boolean isDraft = true;
boolean isForwarded = true;
boolean hasAttachment = true;
String text = "text";
String from = "sender@james.org";
String to = "recipient@james.org";
String cc = "copy@james.org";
String bcc = "blindcopy@james.org";
String subject = "subject";
String body = "body";
String attachments = "attachments";
Header header = Header.from(ImmutableList.of("name", "value"));
Optional<String> hasKeyword = Optional.of("$Draft");
Optional<String> notKeyword = Optional.of("$Flagged");
Optional<String> attachmentFileName = Optional.of("file.txt");
FilterCondition expectedFilterCondition = new FilterCondition(Optional.of(ImmutableList.of("1")), Optional.of(ImmutableList.of("2")), Optional.of(before), Optional.of(after),
Optional.of(Number.fromLong(minSize)), Optional.of(Number.fromLong(maxSize)),
Optional.of(isFlagged), Optional.of(isUnread), Optional.of(isAnswered), Optional.of(isDraft), Optional.of(isForwarded), Optional.of(hasAttachment), Optional.of(text), Optional.of(from),
Optional.of(to), Optional.of(cc), Optional.of(bcc), Optional.of(subject), Optional.of(body), Optional.of(attachments), Optional.of(header),
hasKeyword, notKeyword, attachmentFileName);
FilterCondition filterCondition = FilterCondition.builder()
.inMailboxes(Optional.of(ImmutableList.of("1")))
.notInMailboxes("2")
.before(before)
.after(after)
.minSize(minSize)
.maxSize(maxSize)
.isFlagged(isFlagged)
.isUnread(isUnread)
.isAnswered(isAnswered)
.isDraft(isDraft)
.isForwarded(isForwarded)
.hasAttachment(hasAttachment)
.text(text)
.from(from)
.to(to)
.cc(cc)
.bcc(bcc)
.subject(subject)
.body(body)
.attachments(attachments)
.header(header)
.hasKeyword(hasKeyword)
.notKeyword(notKeyword)
.attachmentFileName(attachmentFileName)
.build();
assertThat(filterCondition).isEqualToComparingFieldByField(expectedFilterCondition);
}
@Test
public void shouldRespectJavaBeanContract() {
EqualsVerifier.forClass(FilterCondition.class).verify();
}
@Test
public void buildShouldBuildFilterConditionWithHasKeywordWhenGivenHasKeyword() {
String hasKeyword = "$Draft";
FilterCondition filterCondition = FilterCondition.builder()
.hasKeyword(Optional.of(hasKeyword))
.build();
assertThat(filterCondition.getHasKeyword().get())
.isEqualTo(hasKeyword);
}
@Test
public void buildShouldBuildFilterConditionWithoutHasKeywordWhenDoNotGivenHasKeyword() {
FilterCondition filterCondition = FilterCondition.builder()
.hasKeyword(Optional.empty())
.build();
assertThat(filterCondition.getHasKeyword().isPresent())
.isFalse();
}
@Test
public void buildShouldThrowWhenGivenInvalidKeywordAsHasKeyword() {
expectedException.expect(IllegalArgumentException.class);
FilterCondition.builder()
.hasKeyword(Optional.of("$Draft%"))
.build();
}
@Test
public void buildShouldBuildFilterConditionWithNotKeywordWhenGivenNotKeyword() {
String notKeyword = "$Draft";
FilterCondition filterCondition = FilterCondition.builder()
.notKeyword(Optional.of(notKeyword))
.build();
assertThat(filterCondition.getNotKeyword().get()).isEqualTo(notKeyword);
}
@Test
public void buildShouldBuildFilterConditionWithoutNotKeywordWhenDoNotGivenNotKeyword() {
FilterCondition filterCondition = FilterCondition.builder()
.notKeyword(Optional.empty())
.build();
assertThat(filterCondition.getNotKeyword().isPresent())
.isFalse();
}
@Test
public void buildShouldThrowWhenGivenInvalidKeywordAsNotKeyword() {
expectedException.expect(IllegalArgumentException.class);
FilterCondition.builder()
.notKeyword(Optional.of("$Draft%"))
.build();
}
}