Mail-Dir

 view release on metacpan or  search on metacpan

t/lib-Mail-Dir.t  view on Meta::CPAN

    qr/^Mailbox does not exist/, '$maildir->select_mailbox() die()s when passed a nonexistent mailbox';

    lives_ok {
        $maildir->create_mailbox('INBOX.new');
    }
    '$maildir->create_mailbox() successfully creates a new mailbox';

    throws_ok {
        $maildir->create_mailbox('INBOX.impossible.mailbox');
    }
    qr/^Parent mailbox does not exist/, '$maildir->create_inbox() die()s when passed a mailbox path with nonexistent parent';

    lives_ok {
        $maildir->select_mailbox('INBOX.new');
    }
    '$maildir->select_mailbox() will change the mailbox to INBOX.new without complaint';

    throws_ok {
        $maildir->select_mailbox('//invalid');
    }
    qr/^Invalid mailbox name/, '$maildir->select_mailbox() will die() if provided an invalid mailbox name';

    note('Testing Maildir++ message delivery');

    my $msgfile = "$tmpdir/msg.txt";
    my $message;

    create_message_file($msgfile);

    lives_ok {
        $maildir->deliver($msgfile);
    }
    '$maildir->deliver() succeeds when delivering message from file';

    lives_ok {
        $maildir->deliver( create_message_sub() );
    }
    '$maildir->deliver() succeeds when delivering message from CODE ref';

    open( my $fh, '<', $msgfile );

    lives_ok {
        $message = $maildir->deliver($fh);
    }
    '$maildir->deliver() succeeds when delivering message from file handle';

    close $fh;

    ok( -f $message->{'file'}, '$maildir->deliver() actually delivers message to new file' );
    is( $message->{'dir'} => 'new', '$maildir->deliver() delivers mail to "new" queue' );

    my $old_file = $message->{'file'};

    lives_ok {
        $message->move('INBOX');
    }
    '$maildir->move() successfully moves message from INBOX.new to INBOX';

    my $new_file = $message->{'file'};

    isnt( $old_file => $new_file, '$maildir->move() actually relocated message from INBOX.new to INBOX' );

    note('Testing message flags; first, with no flags set');

    ok( !$message->passed,  '$maildir->passed() returns false' );
    ok( !$message->replied, '$maildir->replied() returns false' );
    ok( !$message->seen,    '$maildir->seen() returns false' );
    ok( !$message->trashed, '$maildir->trashed() returns false' );
    ok( !$message->draft,   '$maildir->draft() returns false' );
    ok( !$message->flagged, '$maildir->flagged() returns false' );

    my $flags   = 'PRSTDF';
    my $flaglen = length $flags;
    my $found   = $message->flags();

    for ( my $i = 0; $i < $flaglen; $i++ ) {
        my $flag = substr $flags, $i, 1;

        is( index( $found, $flag ) => -1, '$maildir->flags() does not indicate flag ' . $flag . ' yet' );
    }

    note("Setting message flags $flags");

    lives_ok {
        $message->mark($flags);
    }
    '$message->mark() does not die() when setting message flags ' . $flags;

    $found = $message->flags;

    for ( my $i = 0; $i < $flaglen; $i++ ) {
        my $flag = substr $flags, $i, 1;

        ok( index( $found, $flag ) >= 0, '$maildir->flags() indicates flag ' . $flag );
    }

    ok( $message->passed,  '$maildir->passed() returns true' );
    ok( $message->replied, '$maildir->replied() returns true' );
    ok( $message->seen,    '$maildir->seen() returns true' );
    ok( $message->trashed, '$maildir->trashed() returns true' );
    ok( $message->draft,   '$maildir->draft() returns true' );
    ok( $message->flagged, '$maildir->flagged() returns true' );
}

{
    my $tmpdir = File::Temp::tempdir( 'cleanup' => 1 );

    my $maildir = Mail::Dir->open(
        $tmpdir,
        'create'    => 1,
        'maildir++' => 1
    );

    my %TESTS = (
        'INBOX'               => $tmpdir,
        'INBOX.foo'           => "$tmpdir/.INBOX.foo",
        'INBOX.bar'           => "$tmpdir/.INBOX.bar",
        'Spam'                => "$tmpdir/.Spam",
        'Dating.PlentyOfFish' => "$tmpdir/.Dating.PlentyOfFish",
        'Dating.OkCupid'      => "$tmpdir/.Dating.OkCupid"
    );



( run in 1.549 second using v1.01-cache-2.11-cpan-71847e10f99 )