Update tests for the new rerun command
[gruntmaster-data.git] / t / tools.t
CommitLineData
acb202c6
MG
1#!/usr/bin/perl -w
2use v5.14;
3
6d34ddc5
MG
4use Test::More;
5use Gruntmaster::App;
acb202c6 6use Gruntmaster::Data;
6d34ddc5 7use App::Cmd::Tester;
acb202c6 8
6d34ddc5
MG
9BEGIN {
10 eval {
6fb81f9a 11 dbinit 'dbi:Pg:dbname=gmtest'; 1;
6d34ddc5 12 } or plan skip_all => 'Cannot connect to test database. Create it by running make_test_db.sh before running this test. '. "Error: $@";
13af733e
MG
13 no warnings 'redefine';
14 *Gruntmaster::App::dbinit = sub {}; # Prevent reinit in Gruntmaster::App->run
f2005eb5 15 plan tests => 30;
acb202c6
MG
16}
17
6d34ddc5
MG
18sub fakein {
19 open my $fakein, '<', \$_[0];
20 *STDIN = $fakein;
21}
acb202c6 22
6d34ddc5
MG
23sub ta {
24 my ($args, $out, $err) = @_;
25 my $ret = test_app 'Gruntmaster::App' => $args;
26 diag 'Error: ', $ret->error if defined $ret->error;
27 is $ret->output, "$out\n", join ' ', gm => @$args if defined $out;
28 $ret
29}
acb202c6 30
6d34ddc5 31fakein <<EOF;
acb202c6
MG
32My cool contest
33MGV
342014-01-01 00:00Z
352014-01-01 05:00Z
6d34ddc5 36EOF
acb202c6 37
6d34ddc5 38ta [qw/-c add ct/];
acb202c6 39
6d34ddc5
MG
40subtest 'gm -c add ct' => sub {
41 plan tests => 4;
42 my $ct = contest_entry 'ct';
43 is $ct->{name}, 'My cool contest', 'contest name';
44 is $ct->{owner}, 'MGV', 'contest owner';
45 is $ct->{start}, 1388534400, 'contest start';
46 is $ct->{stop}, 1388534400 + 5 * 60 * 60, 'contest stop';
47};
acb202c6 48
6d34ddc5
MG
49{
50 my $out = ta([qw/-c show ct/])->output;
51 like $out, qr/Name: My cool contest/, 'gm -c show ct contains Name'
52}
acb202c6 53
6d34ddc5
MG
54ta [qw/-c get ct owner/], 'MGV';
55ta [qw/-c set ct owner nobody/];
56ta [qw/-c get ct owner/], 'nobody';
57ta [qw/-c list/], join "\n", sort qw/fc rc pc ct/;
58ta [qw/-c rm ct/];
59ok !defined contest_entry('ct'), 'gm -c rm ct';
acb202c6 60
6d34ddc5 61fakein <<EOF;
acb202c6 62Test problem
6d34ddc5
MG
63y
64pc
acb202c6
MG
65Marius Gavrilescu
66Smaranda Ciubotaru
67MGV
68b
6d34ddc5 69gm
acb202c6
MG
70c
71a
72a
733
741
75100
76Ok
77Ok
78Ok
6d34ddc5
MG
79EOF
80
81ta [qw/-p add pb/];
82
f2005eb5
MG
83{
84 my $out = ta([qw/-p show pb/])->output;
85 like $out, qr/Value \(points\): 250/, 'gm -p show pb contains Value'
86}
87
6d34ddc5
MG
88subtest 'gruntmaster-problem add' => sub {
89 plan tests => 10;
90 my $pb = problem_entry 'pb';
91 ok $pb, 'problem exists';
92 is $pb->{name}, 'Test problem', 'name';
93 ok $pb->{private}, 'private';
94 is $pb->{author}, 'Marius Gavrilescu', 'author';
95 is $pb->{writer}, 'Smaranda Ciubotaru', 'statement writer';
96 is $pb->{owner}, 'MGV', 'owner';
97 is $pb->{level}, 'easy', 'level';
98 is $pb->{timeout}, 1, 'time limit';
99 is $pb->{olimit}, 100, 'output limit';
100 ok contest_has_problem('ct', 'pb'), 'is in contest';
acb202c6
MG
101};
102
6d34ddc5
MG
103ta [qw/-p get pb author/], 'Marius Gavrilescu';
104ta [qw/-p set pb owner nobody/];
105ta [qw/-p get pb owner/], 'nobody';
096c7331
MG
106ta [qw/-p set --file pb statement README/];
107like problem_entry('pb')->{statement}, qr/Gruntmaster-Data/, 'gm -p set --file pb statement README';
6d34ddc5
MG
108ta [qw/-p list/], join "\n", sort qw/arc pca rca fca prv pb/;
109ta [qw/-p rm pb/];
110ok !defined problem_entry ('pb'), 'gm -p rm pb';
111
112my $id = create_job extension => '.cpp', format => 'CPP', problem => 'arc', source => '...', owner => 'MGV';
113ok abs (time - user_entry('MGV')->{lastjob}) < 2, 'create_job - lastjob looks sane';
114ta [rerun => $id];
115is job_entry($id)->{result}, -2, "gm rerun $id";
116ta [qw/rm -j/, $id];
117
d68b9d20
MG
118ta [rerun => 'fca'];
119my @fca_jobs = grep { $_->{problem} eq 'fca' } @{job_list()};
120ok ((!grep { $_->{result} != -2 } @fca_jobs), "gm rerun fca");
121
6d34ddc5
MG
122sub terr {
123 my ($args, $err) = @_;
124 my $ret = test_app 'Gruntmaster::App' => $args;
125 like $ret->error, qr/$err/, join ' ', 'invalid:', gm => @$args;
126 $ret
127}
acb202c6 128
6d34ddc5
MG
129terr [qw/add/], 'No table selected';
130terr [qw/-j add/], 'Don\'t know how to add to this table';
131terr [qw/-c add/], 'Wrong number of arguments';
132terr [qw/get/], 'No table selected';
133terr [qw/-c get/], 'Wrong number of arguments';
134terr [qw/list/], 'No table selected';
d68b9d20 135terr [qw/-j rerun/], 'Not enough arguments';
6d34ddc5
MG
136terr [qw/rm/], 'No table selected';
137terr [qw/-j rm/], 'Wrong number of arguments';
138terr [qw/set/], 'No table selected';
139terr [qw/-j set 1 owner/], 'Not enough arguments';
140terr [qw/-j set 1 owner x name/], 'The number of arguments must be odd';
141terr [qw/show/], 'No table selected';
142terr [qw/-c show/], 'Wrong number of arguments';
This page took 0.0238 seconds and 4 git commands to generate.