-is `$perl gruntmaster-problem get pb author`, "Marius Gavrilescu\n", 'gruntmaster-problem get';
-system $perl, 'gruntmaster-problem', 'set', 'pb', 'owner', 'nobody';
-withdb { is $db->problem('pb')->owner->id, 'nobody', 'gruntmaster-problem set' };
-
-withdb { $db->problems->create({id => 'dummy', name => 'Dummy', generator => 'Undef', runner => 'File', judge => 'Absolute', level => 'beginner', value => 100, owner => 'MGV', statement => '...', testcnt => 1, timeout => 1}) };
-
-@list = sort `$perl gruntmaster-problem list`;
-chomp @list;
-@list2 = withdb { map { $_->id } $db->problems->all };
-is_deeply \@list, [ sort @list2 ], 'gruntmaster-problem list';
-
-system $perl, 'gruntmaster-problem', 'rm', 'dummy';
-withdb { ok !$db->problem('dummy'), 'gruntmaster-problem rm' };
-
-withdb { $db->jobs->create({id => 1, date => 1, extension => '.ext', format => 'CPP', problem => 'pb', source => '...', owner => 'MGV'}) };
-
-is `$perl gruntmaster-job get 1 format`, "CPP\n", 'gruntmaster-job get';
-system $perl, 'gruntmaster-job', 'set', 1, 'format', 'PERL';
-withdb { is $db->job(1)->format, 'PERL', 'gruntmaster-job set' };
+ta [qw/-p get pb author/], 'Marius Gavrilescu';
+ta [qw/-p set pb owner nobody/];
+ta [qw/-p get pb owner/], 'nobody';
+ta [qw/-p list/], join "\n", sort qw/arc pca rca fca prv pb/;
+ta [qw/-p rm pb/];
+ok !defined problem_entry ('pb'), 'gm -p rm pb';
+
+my $id = create_job extension => '.cpp', format => 'CPP', problem => 'arc', source => '...', owner => 'MGV';
+ok abs (time - user_entry('MGV')->{lastjob}) < 2, 'create_job - lastjob looks sane';
+ta [rerun => $id];
+is job_entry($id)->{result}, -2, "gm rerun $id";
+ta [qw/rm -j/, $id];
+
+sub terr {
+ my ($args, $err) = @_;
+ my $ret = test_app 'Gruntmaster::App' => $args;
+ like $ret->error, qr/$err/, join ' ', 'invalid:', gm => @$args;
+ $ret
+}