require "vnd.dovecot.testsuite";
require "vnd.dovecot.filter";
require "vnd.dovecot.debug";
require "variables";
require "editheader";
require "body";
require "fileinto";
require "mailbox";
test_set "message" text:
From: stephan@example.com
To: pipe@example.net
Subject: Frop!
Frop!
.
;
test_config_set "sieve_filter_bin_dir" "${tst.path}/../bin";
test_config_reload :extension "vnd.dovecot.filter";
test_result_reset;
test_result_reset;
test "Replace" {
if header :contains "subject" "replacement" {
test_fail "message already replaced";
}
filter "replace";
if not header :contains "subject" "replacement" {
test_fail "message not replaced";
}
}
test_result_reset;
test "Used as test" {
if filter "nonsense" {
test_fail "filter action indicated success with invalid program";
}
if not filter "replace" {
test_fail "filter action indicated failure with valid program";
}
if not header :contains "subject" "replacement" {
test_fail "message not replaced; filter not actually executed";
}
}
test_result_reset;
test "Modify" {
if anyof (
body :contains "extra",
exists "x-frop") {
test_fail "message already modified";
}
if not header "subject" "Frop!" {
test_fail "message is wrong";
}
filter "modify";
if not header "subject" "Frop!" {
test_fail "message replaced erroneously";
}
if not header :contains "x-frop" "extra" {
test_fail "message header not modified";
}
if not body :contains "Extra" {
test_fail "message body not modified";
}
}
test_result_reset;
test "Editheader" {
if anyof ( exists "X-A", exists "X-B", exists "X-C", exists "X-D",
exists "X-E") {
test_fail "message already modified";
}
addheader "X-A" "1";
if not header "X-A" "1" {
test_fail "X-A header missing";
}
fileinto :create "A";
filter "addheader" ["X-B", "2"];
if not header "X-B" "2" {
test_fail "X-B header missing";
}
fileinto :create "B";
addheader "X-C" "3";
if not header "X-C" "3" {
test_fail "X-C header missing";
}
fileinto :create "C";
filter "addheader" ["X-D", "4"];
if not header "X-D" "4" {
test_fail "X-D header missing";
}
fileinto :create "D";
addheader "X-E" "5";
if not header "X-E" "5" {
test_fail "X-E header missing";
}
fileinto :create "E";
if not test_result_execute {
test_fail "failed to execute result";
}
test_message :folder "A" 0;
if not header "X-A" "1" {
test_fail "X-A header missing";
}
if anyof (
header "X-B" "2", header "X-C" "3",
header "X-D" "4", header "X-E" "5") {
test_fail "X-B, X-C, X-D or X-E header found";
}
test_message :folder "B" 0;
if not header "X-B" "2" {
test_fail "X-B header missing";
}
if anyof (
header "X-C" "3", header "X-D" "4", header "X-E" "5") {
test_fail "X-C, X-D or X-E header found";
}
test_message :folder "C" 0;
if not header "X-C" "3" {
test_fail "X-C header missing";
}
if anyof (header "X-D" "4", header "X-E" "5") {
test_fail "X-D or X-E header found";
}
test_message :folder "D" 0;
if not header "X-D" "4" {
test_fail "X-D header missing";
}
if anyof (header "X-E" "5") {
test_fail "X-E header found";
}
test_message :folder "E" 0;
if not header "X-A" "1" {
test_fail "X-A header missing in final message";
}
if not header "X-B" "2" {
test_fail "X-B header missing in final message";
}
if not header "X-C" "3" {
test_fail "X-C header missing in final message";
}
if not header "X-D" "4" {
test_fail "X-D header missing in final message";
}
if not header "X-E" "5" {
test_fail "X-E header missing in final message";
}
}