Config-Crontab

 view release on metacpan or  search on metacpan

t/04_block.t  view on Meta::CPAN

MAILTO=joe
5 0 * * * /bin/foo
_LINES_
undef $block;

## test select
@lines = ( $comment1, $env1, $event1, );
$block = new Config::Crontab::Block( -lines => \@lines );
my @select = $block->select( -type => 'comment' );
is( scalar @select, 1 );

$block->first( new Config::Crontab::Comment( -data => '## why?' ) );

@select = $block->select( -type => 'comment' );
is( scalar @select, 2 );

my($obj) = $block->select( -type => 'comment');
is( $obj->dump, '## why?' );
($obj) = $block->select( -type => 'event');
is( $obj->dump, '5 0 * * * /bin/foo' );
($obj) = $block->select;
is( $obj->dump, '## why?' );
undef $block;


## select some datetime attributes
$block = new Config::Crontab::Block( -lines => \@lines );
$block->last( new Config::Crontab::Event( -data => '10 10 * * Mon /bin/monday' ) );
is( $block->select( -datetime_re => '0 \* \*'), 2 );
is( $block->select( -datetime_re => ' 0 \* \*'), 1 );
is( $block->select( -datetime => '5 0 * * *'), 1, "datetime selector" );
undef $block;

## some select tests w/o the '-type' attribute
$block = new Config::Crontab::Block( -lines => \@lines );
$block->first( new Config::Crontab::Comment( -data => '## foo' ) );
is( $block->select( -data_re => 'foo' ), 2 );
is( $block->select( -data => 'foo' ), 0 );  ## no matching exact strings
undef $block;


## some empty criteria tests
$block = new Config::Crontab::Block;
$block->last( new Config::Crontab::Comment( -data => '## next is empty' ) );
$block->last( new Config::Crontab::Comment );
$block->last( new Config::Crontab::Comment( -data => '## next is empty' ) );
$block->last( new Config::Crontab::Comment );
$block->last( new Config::Crontab::Comment( -data => '## next is empty' ) );
$block->last( new Config::Crontab::Comment );
$block->last( new Config::Crontab::Comment( -data => '## next is not empty' ) );
$block->last( new Config::Crontab::Env( -data => 'FOO=next' ) );
is( $block->select( -bogus => '' ), 8 );
is( $block->select( -data_re => 'next' ), 5 );
is( $block->select( -data => '' ), 3 );
undef $block;


## create a crontab block
@lines = ( $comment1, $env1, $event1, );
$block = new Config::Crontab::Block( -lines => \@lines );
$block->last( new Config::Crontab::Event( -data => '5 1 * * * /sbin/backup' ) );
$block->last( new Config::Crontab::Event( -data => '10 4 * * 3 /bin/wednesday' ) );
is( $block->dump, <<_DUMPED_ );
## just a comment
MAILTO=joe
5 0 * * * /bin/foo
5 1 * * * /sbin/backup
10 4 * * 3 /bin/wednesday
_DUMPED_

## delete the backup event
for my $event ( $block->select( -type => 'event') ) {
    next unless $event->command =~ /\bbackup\b/;  ## look for backup command
    $block->remove($event); last;
}

is( $block->dump, <<_DUMPED_, "backup removed" );
## just a comment
MAILTO=joe
5 0 * * * /bin/foo
10 4 * * 3 /bin/wednesday
_DUMPED_

## compare string match vs regex
is( $block->select( -type => 'event', -command => 'foo' ), 0 );
is( $block->select( -type => 'event', -command_re => 'foo' ), 1 );
undef $block;


## set up block for up, down, first, last tests
@lines = ( $comment1, $env1, $event1, );
$block = new Config::Crontab::Block( -lines => \@lines );
$event2 = new Config::Crontab::Event( -data => '5 1 * * * /sbin/backup' );
is( $block->dump, <<_DUMPED_ );
## just a comment
MAILTO=joe
5 0 * * * /bin/foo
_DUMPED_

## add new event to bottom
$block->down($event2);  ## add at bottom
is( $block->dump, <<_DUMPED_ );
## just a comment
MAILTO=joe
5 0 * * * /bin/foo
5 1 * * * /sbin/backup
_DUMPED_

## add new event to top
$block->remove($event2);
is( $block->dump, <<_DUMPED_ );
## just a comment
MAILTO=joe
5 0 * * * /bin/foo
_DUMPED_

## add new event to top
$block->first($event2);
is( $block->dump, <<_DUMPED_ );
5 1 * * * /sbin/backup
## just a comment
MAILTO=joe
5 0 * * * /bin/foo
_DUMPED_

## try last
$block->last($event2);
is( $block->dump, <<_DUMPED_ );
## just a comment
MAILTO=joe
5 0 * * * /bin/foo
5 1 * * * /sbin/backup
_DUMPED_

## move back to top
$block->first($event2);
is( $block->dump, <<_DUMPED_ );
5 1 * * * /sbin/backup
## just a comment
MAILTO=joe
5 0 * * * /bin/foo
_DUMPED_

## try up (duplicate bug)
$block->up($event2);
is( $block->dump, <<_DUMPED_ );
5 1 * * * /sbin/backup
## just a comment
MAILTO=joe
5 0 * * * /bin/foo
_DUMPED_

## try down
$block->down($event2);
is( $block->dump, <<_DUMPED_ );
## just a comment
5 1 * * * /sbin/backup
MAILTO=joe
5 0 * * * /bin/foo
_DUMPED_

## last, then down again
$block->last($event2);
is( $block->dump, <<_DUMPED_ );
## just a comment
MAILTO=joe
5 0 * * * /bin/foo
5 1 * * * /sbin/backup
_DUMPED_

## (duplicate bug)
$block->down($event2);
is( $block->dump, <<_DUMPED_ );
## just a comment
MAILTO=joe
5 0 * * * /bin/foo
5 1 * * * /sbin/backup
_DUMPED_

## try up
$block->up($event2);
is( $block->dump, <<_DUMPED_ );
## just a comment
MAILTO=joe
5 1 * * * /sbin/backup
5 0 * * * /bin/foo
_DUMPED_
undef $block;


## setup tests for before, after
@lines = ( $comment1, $env1, $event1, );
$block = new Config::Crontab::Block( -lines => \@lines );
is( $block->dump, <<_DUMPED_ );
## just a comment
MAILTO=joe
5 0 * * * /bin/foo
_DUMPED_

$event2 = new Config::Crontab::Event( -data => '5 1 * * * /sbin/backup' );

$block->before($comment1, $event2);
is( $block->dump, <<_DUMPED_ );
5 1 * * * /sbin/backup
## just a comment
MAILTO=joe
5 0 * * * /bin/foo
_DUMPED_

$block->after($comment1, $event2);
is( $block->dump, <<_DUMPED_ );
## just a comment
5 1 * * * /sbin/backup
MAILTO=joe
5 0 * * * /bin/foo
_DUMPED_

## see about non-existent references
my $event3 = new Config::Crontab::Event( -minute => 33, -command => '/sbin/uptime' );
$block->before(undef, $event3);
is( $block->dump, <<_DUMPED_ );
33 * * * * /sbin/uptime
## just a comment
5 1 * * * /sbin/backup
MAILTO=joe
5 0 * * * /bin/foo
_DUMPED_

## test active
is( $block->active(0), 0 );
is( $block->dump, <<_DUMPED_, "inactive block" );
#33 * * * * /sbin/uptime
## just a comment
#5 1 * * * /sbin/backup
#MAILTO=joe
#5 0 * * * /bin/foo
_DUMPED_

ok( $block->active(1) );
is( $event3->active(0), 0 );
is( $block->dump, <<_DUMPED_ );
#33 * * * * /sbin/uptime
## just a comment
5 1 * * * /sbin/backup
MAILTO=joe
5 0 * * * /bin/foo
_DUMPED_

ok( ! $block->active(undef) );
ok( $event3->active(1) );
is( $block->dump, <<_DUMPED_ );
33 * * * * /sbin/uptime
## just a comment
#5 1 * * * /sbin/backup
#MAILTO=joe
#5 0 * * * /bin/foo
_DUMPED_

## a system block
undef $block;
$block = new Config::Crontab::Block;
$block->system(1);
$block->data(<<_DATA_);
## this is foo
#6 * 0 0 Sat rogerdodger /bin/saturday
_DATA_
is( ($block->select(-type => 'event'))[0]->user, 'rogerdodger' );

undef $block;
$block = new Config::Crontab::Block( -system => 1,
				     -data   => <<_DATA_);
## this is foo
#6 * 0 0 Sat wonka /bin/saturday
_DATA_
is( ($block->select(-type => 'event'))[0]->user, 'wonka' );

##
## remove many items using 'flag'
##
undef $block;
$block = new Config::Crontab::Block;
$block->system(1);
$block->data( <<'_DATA_');
1  5 * * *   bin    echo 1
2  5 * * *   bin    echo 2
3  5 * * *   bin    echo 3
4  5 * * *   bin    echo 4
5  5 * * *   bin    echo 5
6  5 * * *   bin    echo 6
7  5 * * *   bin    echo 7
8  5 * * *   bin    echo 8
9  5 * * *   bin    echo 9
10 5 * * *   bin    echo 10
11 5 * * *   bin    echo 11
12 5 * * *   bin    echo 12
13 5 * * *   bin    echo 13
14 5 * * *   bin    echo 14
15 5 * * *   bin    echo 15
16 5 * * *   bin    echo 16
17 5 * * *   bin    echo 17
_DATA_

## flag evens
my $count = 0;
for my $event ( $block->select( -type => 'event' ) ) {
    $event->flag('delete')
      if $count % 2 == 0;
    $count++;
}

## delete them
$block->remove( $block->select( -flag => 'delete' ) );

is( $block->dump, <<_BLOCK_ );



( run in 1.510 second using v1.01-cache-2.11-cpan-2398b32b56e )