about summary refs log tree commit homepage
path: root/t
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2014-03-24 20:17:11 +0000
committerEric Wong <normalperson@yhbt.net>2014-03-24 20:29:47 +0000
commitcf0a2370a57fe49d0fca149409f98d2907efeb15 (patch)
treee881a59c9a301a553b6faad7ca38240f72aa5c49 /t
parentb5f82d05569c228544f31627a03477f2a464f74f (diff)
downloadpublic-inbox-cf0a2370a57fe49d0fca149409f98d2907efeb15.tar.gz
This should make it easier for non-ssoma users to follow.
Diffstat (limited to 't')
-rw-r--r--t/feed.t111
1 files changed, 111 insertions, 0 deletions
diff --git a/t/feed.t b/t/feed.t
new file mode 100644
index 00000000..d16373ae
--- /dev/null
+++ b/t/feed.t
@@ -0,0 +1,111 @@
+# 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 PublicInbox::Feed;
+use File::Temp qw/tempdir/;
+my $have_xml_feed = eval { require XML::Feed; 1 };
+
+my $tmpdir = tempdir(CLEANUP => 1);
+my $git_dir = "$tmpdir/gittest";
+
+{
+        is(0, system(qw(git init -q --bare), $git_dir), "git init");
+        local $ENV{GIT_DIR} = $git_dir;
+
+        foreach my $i (1..6) {
+                my $pid = open(my $pipe, "|-");
+                defined $pid or die "fork/pipe failed: $!\n";
+                if ($pid == 0) {
+                        exec("ssoma-mda", $git_dir);
+                }
+
+                my $simple = Email::Simple->new(<<EOF);
+From: ME <me\@example.com>
+To: U <u\@example.com>
+Message-Id: <$i\@example.com>
+Subject: zzz #$i
+Date: Thu, 01 Jan 1970 00:00:00 +0000
+
+> drop me
+
+msg $i
+
+> drop me again
+
+keep me
+EOF
+                print $pipe $simple->as_string or die "print failed: $!\n";
+                close $pipe or die "close pipe failed: $!\n";
+        }
+
+        # check initial feed
+        {
+                my $feed = PublicInbox::Feed->generate($git_dir, 3);
+                if ($have_xml_feed) {
+                        my $p = XML::Feed->parse(\$feed);
+                        is($p->format, "Atom", "parsed atom feed");
+                        is(scalar $p->entries, 3, "parsed three entries");
+                }
+                unlike($feed, qr/drop me/, "quoted text dropped");
+                like($feed, qr/keep me/, "unquoted text saved");
+        }
+
+        # add a new spam message
+        my $spam;
+        {
+                my $pid = open(my $pipe, "|-");
+                defined $pid or die "fork/pipe failed: $!\n";
+                if ($pid == 0) {
+                        exec("ssoma-mda", $git_dir);
+                }
+
+                $spam = Email::Simple->new(<<EOF);
+From: SPAMMER <spammer\@example.com>
+To: U <u\@example.com>
+Message-Id: <this-is-spam\@example.com>
+Subject: SPAM!!!!!!!!
+Date: Thu, 01 Jan 1970 00:00:00 +0000
+
+EOF
+                print $pipe $spam->as_string or die "print failed: $!\n";
+                close $pipe or die "close pipe failed: $!\n";
+        }
+
+        # check spam shows up
+        {
+                my $spammy_feed = PublicInbox::Feed->generate($git_dir, 3);
+                if ($have_xml_feed) {
+                        my $p = XML::Feed->parse(\$spammy_feed);
+                        is($p->format, "Atom", "parsed atom feed");
+                        is(scalar $p->entries, 3, "parsed three entries");
+                }
+                like($spammy_feed, qr/SPAM/s, "spam showed up :<");
+        }
+
+        # nuke spam
+        {
+                my $pid = open(my $pipe, "|-");
+                defined $pid or die "fork/pipe failed: $!\n";
+                if ($pid == 0) {
+                        exec("ssoma-rm", $git_dir);
+                }
+                print $pipe $spam->as_string or die "print failed: $!\n";
+                close $pipe or die "close pipe failed: $!\n";
+        }
+
+        # spam no longer shows up
+        {
+                my $feed = PublicInbox::Feed->generate($git_dir, 3);
+                if ($have_xml_feed) {
+                        my $p = XML::Feed->parse(\$feed);
+                        is($p->format, "Atom", "parsed atom feed");
+                        is(scalar $p->entries, 3, "parsed three entries");
+                }
+                unlike($feed, qr/SPAM/, "spam gone :>");
+        }
+}
+
+done_testing();