blob: 3ea229ad1f65ae66334c8c457e018dd5321d61d1 [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.transport.matchers;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.Collection;
import org.apache.james.core.MailAddress;
import org.apache.mailet.Attribute;
import org.apache.mailet.PerRecipientHeaders;
import org.apache.mailet.base.test.FakeMail;
import org.apache.mailet.base.test.FakeMatcherConfig;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
class IsMarkedAsSpamTest {
private IsMarkedAsSpam matcher;
@BeforeEach
void setup() {
matcher = new IsMarkedAsSpam();
}
@Test
void isMarkedAsSpamShouldNotMatchWhenNoHeader() throws Exception {
FakeMail mail = FakeMail.builder()
.name("name")
.sender("sender@james.org")
.recipient("to@james.org")
.build();
Collection<MailAddress> matches = matcher.match(mail);
assertThat(matches).isEmpty();
}
@Test
void isMarkedAsSpamShouldNotMatchWhenHeaderButEmptyValue() throws Exception {
FakeMail mail = FakeMail.builder()
.name("name")
.sender("sender@james.org")
.recipient("to@james.org")
.addHeaderForRecipient(PerRecipientHeaders.Header.builder()
.name("org.apache.james.spamassassin.status")
.value("other")
.build(),
new MailAddress("to@james.org"))
.build();
Collection<MailAddress> matches = matcher.match(mail);
assertThat(matches).isEmpty();
}
@Test
void isMarkedAsSpamShouldNotMatchWhenHeaderButOtherValue() throws Exception {
FakeMail mail = FakeMail.builder()
.name("name")
.sender("sender@james.org")
.recipient("to@james.org")
.addHeaderForRecipient(PerRecipientHeaders.Header.builder()
.name("org.apache.james.spamassassin.status")
.value("other")
.build(),
new MailAddress("to@james.org"))
.build();
Collection<MailAddress> matches = matcher.match(mail);
assertThat(matches).isEmpty();
}
@Test
void isMarkedAsSpamShouldNotMatchWhenHeaderButNoValue() throws Exception {
FakeMail mail = FakeMail.builder()
.name("name")
.sender("sender@james.org")
.recipient("to@james.org")
.addHeaderForRecipient(PerRecipientHeaders.Header.builder()
.name("org.apache.james.spamassassin.status")
.value("No, hits=1.8 required=5.0")
.build(),
new MailAddress("to@james.org"))
.build();
Collection<MailAddress> matches = matcher.match(mail);
assertThat(matches).isEmpty();
}
@Test
void isMarkedAsSpamShouldMatchWhenHeaderAndYesValue() throws Exception {
FakeMail mail = FakeMail.builder()
.name("name")
.sender("sender@james.org")
.recipient("to@james.org")
.addHeaderForRecipient(PerRecipientHeaders.Header.builder()
.name("org.apache.james.spamassassin.status")
.value("Yes, hits=6.8 required=5.0")
.build(),
new MailAddress("to@james.org"))
.attribute(Attribute.convertToAttribute("org.apache.james.spamassassin.status", "Yes, hits=6.8 required=5.0"))
.build();
Collection<MailAddress> matches = matcher.match(mail);
assertThat(matches).contains(new MailAddress("to@james.org"));
}
@Test
void isMarkedAsSpamShouldMatchOnlyRecipientsWithHeaderAndYesValue() throws Exception {
FakeMail mail = FakeMail.builder()
.name("name")
.sender("sender@james.org")
.recipients("to1@james.org", "to2@james.org")
.addHeaderForRecipient(PerRecipientHeaders.Header.builder()
.name("org.apache.james.spamassassin.status")
.value("Yes, hits=6.8 required=5.0")
.build(),
new MailAddress("to1@james.org"))
.build();
Collection<MailAddress> matches = matcher.match(mail);
assertThat(matches).contains(new MailAddress("to1@james.org"));
}
@Test
void isMarkedAsSpamShouldMatchWhenHeaderAndYesValueInOtherCase() throws Exception {
FakeMail mail = FakeMail.builder()
.name("name")
.sender("sender@james.org")
.recipient("to@james.org")
.addHeaderForRecipient(PerRecipientHeaders.Header.builder()
.name("org.apache.james.spamassassin.status")
.value("YES, hits=6.8 required=5.0")
.build(),
new MailAddress("to@james.org"))
.build();
Collection<MailAddress> matches = matcher.match(mail);
assertThat(matches).contains(new MailAddress("to@james.org"));
}
@Test
void isMarkedAsSpamShouldAcceptDynamicSpamStatusPackageHeader() throws Exception {
FakeMatcherConfig matcherConfig = FakeMatcherConfig.builder()
.matcherName("IsMarkedAsSpam")
.condition("custom.package")
.build();
matcher.init(matcherConfig);
FakeMail mail = FakeMail.builder()
.name("name")
.sender("sender@james.org")
.recipient("to@james.org")
.addHeaderForRecipient(PerRecipientHeaders.Header.builder()
.name("custom.package")
.value("Yes, actions=reject score=14.225 requiredScore=14.0 desiredRewriteSubject=")
.build(),
new MailAddress("to@james.org"))
.attribute(Attribute.convertToAttribute("custom.package", "Yes, actions=reject score=14.225 requiredScore=14.0 desiredRewriteSubject="))
.build();
Collection<MailAddress> matches = matcher.match(mail);
assertThat(matches).contains(new MailAddress("to@james.org"));
}
}