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 ) = @_;
t/04-todo.t view on Meta::CPAN
});
});
});
};
run_tests_in_loop {
my ( $cond ) = @_;
$tracks->todos(sub {
my ( $todos ) = @_;
my ( $one ) = @$todos;
$one->destroy(sub {
dies_ok {
$one->is_complete;
};
dies_ok {
$one->is_active;
};
dies_ok {
$one->is_project_hidden;
};
dies_ok {
$one->is_deferred;
};
dies_ok {
$one->complete;
};
dies_ok {
$one->activate;
};
dies_ok {
$one->defer;
};
dies_ok {
$one->description;
};
dies_ok {
$one->notes;
};
dies_ok {
$one->due;
};
dies_ok {
$one->show_from;
};
dies_ok {
$one->id;
};
dies_ok {
$one->completed_at;
};
dies_ok {
$one->recurring_todo_id;
};
dies_ok {
$one->created_at;
};
dies_ok {
$one->updated_at;
};
dies_ok {
$one->context(sub {
fail("I shouldn't get called!");
});
};
dies_ok {
$one->project(sub {
fail("I shouldn't get called!");
});
};
dies_ok {
$one->update(sub {
fail("I shouldn't get called!");
});
};
dies_ok {
$one->destroy(sub {
fail("I shouldn't get called!");
});
};
$cond->send;
});
});
};
run_tests_in_loop {
my ( $cond ) = @_;
$tracks->create_todo('Foobar 2', $ctx, sub {
my ( $todo ) = @_;
# we do this to make sure the update time is in the future
my $timer;
$timer = AnyEvent->timer(
after => 1,
cb => sub {
undef $timer;
my $old_updated = $todo->updated_at;
$todo->description('Foobar 23');
$todo->notes('Some notes!');
is($todo->description, 'Foobar 23');
is($todo->notes, 'Some notes!');
$todo->update(sub {
my ( $todo2 ) = @_;
is($todo2, $todo);
is($todo2->description, 'Foobar 23');
is($todo2->notes, 'Some notes!');
isnt($todo2->updated_at, $old_updated);
ok($todo2->updated_at > $old_updated);
$cond->send;
});
},
);
});
};
run_tests_in_loop {
my ( $cond ) = @_;
$tracks->create_project('One', sub {
my ( $one ) = @_;
$tracks->create_project('Two', sub {
my ( $two ) = @_;
$tracks->create_todo(context => $ctx, project => $one, description => 'Test todo', sub {
my ( $todo ) = @_;
ok($todo);
$todo->project(sub {
my ( $p ) = @_;
is($p->id, $one->id);
$todo->project($two);
$todo->update(sub {
my ( $todo ) = @_;
$todo->project(sub {
my ( $p ) = @_;
is($p->id, $two->id);
$todo->project(undef);
$todo->update(sub {
my ( $todo ) = @_;
$todo->project(sub {
my ( $p ) = @_;
ok(! $p);
$todo->project($one);
$todo->update(sub {
my ( $todo ) = @_;
$todo->project(sub {
my ( $p ) = @_;
is($p->id, $one->id);
$cond->send;
});
});
});
( run in 2.910 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )