]> Sergey Matveev's repositories - public-inbox.git/blobdiff - t/precheck.t
move pre-spamc checks to PublicInbox->precheck
[public-inbox.git] / t / precheck.t
diff --git a/t/precheck.t b/t/precheck.t
new file mode 100644 (file)
index 0000000..6deead9
--- /dev/null
@@ -0,0 +1,74 @@
+# Copyright (C) 2014, Eric Wong <normalperson@yhbt.net> and all contributors
+# License: AGPLv3 or later (https://www.gnu.org/licenses/agpl-3.0.txt)
+use strict;
+use warnings;
+use Test::More;
+use Email::Simple;
+use Email::Filter;
+use PublicInbox;
+
+sub do_checks {
+       my ($s) = @_;
+
+       my $f = Email::Filter->new(data => $s->as_string);
+       local %ENV;
+       delete $ENV{ORIGINAL_RECIPIENT};
+
+       ok(PublicInbox->precheck($f),
+               "ORIGINAL_RECIPIENT unset is OK");
+
+       $ENV{ORIGINAL_RECIPIENT} = 'foo@example.com';
+       ok(!PublicInbox->precheck($f),
+               "wrong ORIGINAL_RECIPIENT rejected");
+
+       $ENV{ORIGINAL_RECIPIENT} = 'b@example.com';
+       ok(PublicInbox->precheck($f),
+               "ORIGINAL_RECIPIENT in To: is OK");
+
+       $ENV{ORIGINAL_RECIPIENT} = 'c@example.com';
+       ok(PublicInbox->precheck($f),
+               "ORIGINAL_RECIPIENT in Cc: is OK");
+}
+
+{
+       do_checks(Email::Simple->create(
+               header => [
+                       From => 'a@example.com',
+                       To => 'b@example.com',
+                       Cc => 'c@example.com',
+                       'Content-Type' => 'text/plain',
+                       Subject => 'this is a subject',
+               ],
+               body => "hello world\n",
+       ));
+}
+
+{
+       do_checks(Email::Simple->create(
+               header => [
+                       From => 'a@example.com',
+                       To => 'b+plus@example.com',
+                       Cc => 'John Doe <c@example.com>',
+                       'Content-Type' => 'text/plain',
+                       Subject => 'this is a subject',
+               ],
+               body => "hello world\n",
+       ));
+}
+
+{
+       $ENV{ORIGINAL_RECIPIENT} = 'b@example.com';
+       my $s = Email::Simple->create(
+               header => [
+                       To => 'b@example.com',
+                       Cc => 'c@example.com',
+                       'Content-Type' => 'text/plain',
+                       Subject => 'this is a subject',
+               ],
+               body => "hello world\n",
+       );
+       my $f = Email::Filter->new(data => $s->as_string);
+       ok(!PublicInbox->precheck($f), "missing From: is rejected");
+}
+
+done_testing();