AnyEvent-WebService-Tracks
view release on metacpan or search on metacpan
t/04-todo.t view on Meta::CPAN
$tracks->contexts(sub {
my ( $contexts ) = @_;
unless(@$contexts) {
$cond->send;
return;
}
my $run;
$run = sub {
my $ctx = shift @$contexts;
$ctx->destroy(sub {
if(@$contexts) {
$run->();
} else {
$cond->send;
}
});
};
$run->();
});
};
run_tests_in_loop {
my ( $cond ) = @_;
$tracks->create_context(name => 'Test Context', sub {
( $ctx ) = @_;
ok($ctx);
$cond->send;
});
};
run_tests_in_loop {
my ( $cond ) = @_;
my $run;
$run = sub {
my $desc = shift @todos;
$tracks->create_todo($desc, $ctx, sub {
my ( $todo ) = @_;
ok($todo);
isa_ok($todo, 'AnyEvent::WebService::Tracks::Todo');
is($todo->description, $desc);
ok(! defined($todo->due));
ok(! defined($todo->notes));
ok(! defined($todo->show_from));
ok($todo->is_active);
ok(! $todo->is_project_hidden);
ok(! $todo->is_complete);
ok(! $todo->is_deferred);
ok(looks_like_number $todo->id);
ok(! $todo->completed_at);
ok(! $todo->recurring_todo_id);
isa_ok($todo->created_at, 'DateTime');
isa_ok($todo->updated_at, 'DateTime');
dies_ok {
$todo->completed_at(DateTime->now);
};
dies_ok {
$todo->created_at(DateTime->now);
};
dies_ok {
$todo->updated_at(DateTime->now);
};
dies_ok {
$todo->id(0);
};
dies_ok {
$todo->recurring_todo_id(0);
};
lives_ok {
$todo->description('Test description');
};
lives_ok {
$todo->due(DateTime->now);
};
lives_ok {
$todo->notes('Test notes');
};
lives_ok {
$todo->show_from(DateTime->now);
};
$todo->context(sub {
my ( $c ) = @_;
is($c->id, $ctx->id);
$todo->project(sub {
my ( $p, $e ) = @_;
ok(! defined($p));
ok(! defined($e));
if(@todos) {
$run->();
} else {
$cond->send;
}
});
});
});
};
$run->();
};
run_tests_in_loop {
my ( $cond ) = @_;
$tracks->todos(sub {
my ( $todos ) = @_;
is(scalar(@$todos), scalar(@orig_todos));
ok(all { UNIVERSAL::isa($_, 'AnyEvent::WebService::Tracks::Todo') } @$todos);
my $run;
$run = sub {
my $todo = shift @$todos;
$todo->destroy(sub {
my ( $ok ) = @_;
ok($ok);
if(@$todos) {
$run->();
} else {
$cond->send;
}
});
};
$run->();
});
};
@todos = @orig_todos;
run_tests_in_loop {
my ( $cond ) = @_;
my $run;
$run = sub {
my $desc = shift @todos;
$tracks->create_todo(description => $desc, context => $ctx, sub {
my ( $todo ) = @_;
ok($todo);
isa_ok($todo, 'AnyEvent::WebService::Tracks::Todo');
is($todo->description, $desc);
ok(! defined($todo->due));
ok(! defined($todo->notes));
ok(! defined($todo->show_from));
ok($todo->is_active);
ok(! $todo->is_project_hidden);
ok(! $todo->is_complete);
ok(! $todo->is_deferred);
ok(looks_like_number $todo->id);
ok(! $todo->completed_at);
ok(! $todo->recurring_todo_id);
isa_ok($todo->created_at, 'DateTime');
isa_ok($todo->updated_at, 'DateTime');
dies_ok {
$todo->completed_at(DateTime->now);
};
dies_ok {
$todo->created_at(DateTime->now);
};
dies_ok {
$todo->updated_at(DateTime->now);
};
dies_ok {
$todo->id(0);
};
dies_ok {
$todo->recurring_todo_id(0);
};
lives_ok {
$todo->description('Test description');
};
lives_ok {
$todo->due(DateTime->now);
};
lives_ok {
$todo->notes('Test notes');
};
lives_ok {
$todo->show_from(DateTime->now);
};
$todo->context(sub {
my ( $c ) = @_;
is($c->id, $ctx->id);
$todo->project(sub {
my ( $p, $e ) = @_;
ok(! defined($p));
ok(! defined($e));
if(@todos) {
$run->();
} else {
$cond->send;
}
});
});
});
};
$run->();
};
run_tests_in_loop {
my ( $cond ) = @_;
$tracks->todos(sub {
my ( $todos ) = @_;
my $run;
$run = sub {
my $todo = shift @$todos;
$todo->destroy(sub {
my ( $ok ) = @_;
ok($ok);
if(@$todos) {
$run->();
} else {
$cond->send;
}
});
};
$run->();
});
};
@todos = @orig_todos;
run_tests_in_loop {
my ( $cond ) = @_;
my $i = 1;
my $run;
$run = sub {
my $desc = shift @todos;
my $notes = "notes$i";
$tracks->create_todo(description => $desc, notes => $notes, context => $ctx, sub {
my ( $todo ) = @_;
ok($todo);
isa_ok($todo, 'AnyEvent::WebService::Tracks::Todo');
is($todo->description, $desc);
is($todo->notes, $notes);
ok(! defined($todo->due));
ok(! defined($todo->show_from));
ok($todo->is_active);
ok(! $todo->is_project_hidden);
ok(! $todo->is_complete);
ok(! $todo->is_deferred);
ok(looks_like_number $todo->id);
ok(! $todo->completed_at);
ok(! $todo->recurring_todo_id);
isa_ok($todo->created_at, 'DateTime');
isa_ok($todo->updated_at, 'DateTime');
dies_ok {
$todo->completed_at(DateTime->now);
};
dies_ok {
$todo->created_at(DateTime->now);
};
dies_ok {
$todo->updated_at(DateTime->now);
};
dies_ok {
$todo->id(0);
};
dies_ok {
$todo->recurring_todo_id(0);
};
lives_ok {
$todo->description('Test description');
};
lives_ok {
$todo->due(DateTime->now);
};
lives_ok {
$todo->notes('Test notes');
};
lives_ok {
$todo->show_from(DateTime->now);
};
$todo->context(sub {
my ( $c ) = @_;
is($c->id, $ctx->id);
$todo->project(sub {
my ( $p, $e ) = @_;
ok(! defined($p));
ok(! defined($e));
if(@todos) {
$run->();
} else {
$cond->send;
}
});
});
});
};
$run->();
};
run_tests_in_loop {
my ( $cond ) = @_;
dies_ok {
$tracks->create_todo(description => 'Foobar', sub {
fail("I should never get called!");
});
};
$cond->send;
};
run_tests_in_loop {
my ( $cond ) = @_;
dies_ok {
$tracks->create_todo(description => 'Foobar', notes => 'Foobar', sub {
fail("I should never be called!");
});
};
$cond->send;
};
run_tests_in_loop {
my ( $cond ) = @_;
$tracks->create_project('Test Project', sub {
my ( $project ) = @_;
ok($project);
dies_ok {
$tracks->create_todo(
description => 'Foobar',
t/04-todo.t view on Meta::CPAN
'completed', # active -> completed
'deferred', # completed -> deferred
'active', # deferred -> active
);
$tracks->todos(sub {
my ( $todos ) = @_;
my ( $one ) = @$todos;
my $run;
$run = sub {
my $change = shift @state_changes;
if($change eq 'deferred') {
$one->defer(1);
} elsif($change eq 'active') {
$one->activate;
} else {
$one->complete;
}
$one->update(sub {
my ( $t ) = @_;
ok($t);
if($change eq 'deferred') {
ok(! $t->is_active);
ok($t->is_deferred);
ok(! $t->is_complete);
ok($t->show_from);
} elsif($change eq 'active') {
ok($t->is_active);
ok(! $t->is_deferred);
ok(! $t->is_complete);
ok(! $t->show_from);
} else {
ok(! $t->is_active);
ok(! $t->is_deferred);
ok($t->is_complete);
ok(! $t->show_from);
}
if(@state_changes) {
$run->();
} else {
$cond->send;
}
});
};
$run->();
});
};
run_tests_in_loop {
my ( $cond ) = @_;
my $now = DateTime->now;
my $other = $now->clone->add(days => 7, hours => 3, minutes => 1);
my $duration = DateTime::Duration->new(days => 7, hours => 3, minutes => 1);
my @defer = (
1 => $now->clone->add(days => 1),
$other => $other,
$duration => $other,
);
$tracks->create_todo(
description => 'Deferred Task',
context => $ctx,
show_from => $now->clone->add(days => 1),
sub {
my ( $todo ) = @_;
ok($todo);
ok($todo->is_deferred);
ok($todo->show_from);
my $expected = $now->clone->add(days => 1);
if($expected->hour || $expected->minute || $expected->second) {
$expected->set_hour(0);
$expected->set_minute(0);
$expected->set_second(0);
};
is($todo->show_from, $expected);
my $run;
$run = sub {
my $arg = shift @defer;
my $expected = shift @defer;
$todo->defer($arg);
$todo->update(sub {
my ( $t ) = @_;
ok($t);
ok($todo->is_deferred);
ok($todo->show_from);
if($expected->hour || $expected->minute || $expected->second) {
$expected->set_hour(0);
$expected->set_minute(0);
$expected->set_second(0);
};
is($todo->show_from, $expected);
if(@defer) {
$run->();
} else {
$cond->send;
}
});
};
$run->();
});
};
run_tests_in_loop {
my ( $cond ) = @_;
my $time = DateTime->now;
$time->set_hour(17);
$time->set_minute(0);
$time->set_second(0);
$tracks->create_todo(
description => 'Another Deferred Task',
context => $ctx,
show_from => $time->clone->add(days => 1),
sub {
my ( $todo ) = @_;
ok($todo);
my $expected = $time->clone->add(days => 1);
if($expected->hour || $expected->minute || $expected->second) {
$expected->set_hour(0);
$expected->set_minute(0);
$expected->set_second(0);
};
is($todo->show_from, $expected);
$cond->send;
});
};
run_tests_in_loop {
my ( $cond ) = @_;
my $time = DateTime->now;
$time->set_hour(20);
$time->set_minute(0);
$time->set_second(0);
$tracks->create_todo(
description => 'Yet Another Deferred Task',
context => $ctx,
show_from => $time->clone->add(days => 1),
sub {
my ( $todo ) = @_;
ok($todo);
my $expected = $time->clone->add(days => 1);
if($expected->hour || $expected->minute || $expected->second) {
$expected->set_hour(0);
$expected->set_minute(0);
$expected->set_second(0);
};
is($todo->show_from, $expected);
$cond->send;
});
};
run_tests_in_loop {
my ( $cond ) = @_;
$tracks->todos(sub {
my ( $todos ) = @_;
my ( $one ) = @$todos;
my $copy = dclone($one);
$one->update(sub {
my ( $t ) = @_;
is_deeply($t, $copy);
$cond->send;
});
});
};
( run in 1.070 second using v1.01-cache-2.11-cpan-39bf76dae61 )