# $Id$
use strict;
use warnings;
use Test::More tests => 19;
use TheSchwartz;
use Storable;
# With this test, all data structures are in memory so far. Nothing's
# been inserted into the database because we have no client object
# yet with which to insert.
my $args = { scoops => 2, with => ['cheese','love'] };
my $fargs = Storable::nfreeze($args);
my $job1 = TheSchwartz::Job->new_from_array("feedmajor", $fargs);
isa_ok($job1, 'TheSchwartz::Job');
my $job2 = TheSchwartz::Job->new_from_array("feedmajor", \$fargs);
isa_ok($job2, 'TheSchwartz::Job');
my $job3 = TheSchwartz::Job->new(funcname => 'feedmajor', arg => $args);
isa_ok($job3, 'TheSchwartz::Job');
my $job4 = TheSchwartz::Job->new(funcname => 'feedmajor', arg => $fargs);
isa_ok($job4, 'TheSchwartz::Job');
my $job5 = TheSchwartz::Job->new(funcname => 'feedmajor', arg => \$fargs);
isa_ok($job5, 'TheSchwartz::Job');
is_deeply($job1->column_values, $job2->column_values, "job2 is equivalent");
is_deeply($job1->column_values, $job3->column_values, "job3 is equivalent");
is_deeply($job1->column_values, $job4->column_values, "job4 is equivalent");
is_deeply($job1->column_values, $job5->column_values, "job5 is equivalent");
my $job6 = TheSchwartz::Job->new(
funcname => 'feeddog',
run_after => time() + 60,
priority => 7,
arg => { scoops => 2, with => ['cheese','love'] },
coalesce => 'major',
jobid => int(rand()*5000),
);
isa_ok $job6, 'TheSchwartz::Job';
# second arg can also be an arrayref
my $job_a1 = TheSchwartz::Job->new_from_array("feedmajor", [ 'cheese', 'water', 'beer' ]);
my $job_a2 = TheSchwartz::Job->new(funcname => "feedmajor",
arg => [ 'cheese', 'water', 'beer' ]);
is_deeply($job_a1->column_values, $job_a2->column_values, "ctors with arrayrefs match");
my $jobbad = eval { TheSchwartz::Job->new(
funcname => 'feeddog',
run_atter => time() + 60, # [sic] typo
) };
ok(!$jobbad, "no bad job");
ok($@, "error creating job with bad argument");
# can't have multiple non-ref args
$jobbad = eval { TheSchwartz::Job->new_from_array("feeddog", "scalar1", "scalar2") };
ok(!$jobbad, "no bad job");
ok($@, "error creating job with bad argument");
# can't have multiple non-ref args, even if first is scalarref
$jobbad = eval { TheSchwartz::Job->new_from_array("feeddog", \ "scalar1", "scalar2") };
ok(!$jobbad, "no bad job");
ok($@, "error creating job with bad argument");
# can't have multiple non-ref args, even if first is hashrf
$jobbad = eval { TheSchwartz::Job->new_from_array("feeddog", { with => 'poison' }, { extra => 'arg' }); };
ok(!$jobbad, "no bad job");
ok($@, "error creating job with bad argument");