Use PerlX::Maybe for Add
[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 {
11 Gruntmaster::Data::init 'dbi:Pg:dbname=gmtest'; 1;
12 } or plan skip_all => 'Cannot connect to test database. Create it by running make_test_db.sh before running this test. '. "Error: $@";
13 plan tests => 28;
acb202c6
MG
14}
15
6d34ddc5
MG
16sub fakein {
17 open my $fakein, '<', \$_[0];
18 *STDIN = $fakein;
19}
acb202c6 20
6d34ddc5
MG
21sub ta {
22 my ($args, $out, $err) = @_;
23 my $ret = test_app 'Gruntmaster::App' => $args;
24 diag 'Error: ', $ret->error if defined $ret->error;
25 is $ret->output, "$out\n", join ' ', gm => @$args if defined $out;
26 $ret
27}
acb202c6 28
6d34ddc5 29fakein <<EOF;
acb202c6
MG
30My cool contest
31MGV
322014-01-01 00:00Z
332014-01-01 05:00Z
6d34ddc5 34EOF
acb202c6 35
6d34ddc5 36ta [qw/-c add ct/];
acb202c6 37
6d34ddc5
MG
38subtest 'gm -c add ct' => sub {
39 plan tests => 4;
40 my $ct = contest_entry 'ct';
41 is $ct->{name}, 'My cool contest', 'contest name';
42 is $ct->{owner}, 'MGV', 'contest owner';
43 is $ct->{start}, 1388534400, 'contest start';
44 is $ct->{stop}, 1388534400 + 5 * 60 * 60, 'contest stop';
45};
acb202c6 46
6d34ddc5
MG
47{
48 my $out = ta([qw/-c show ct/])->output;
49 like $out, qr/Name: My cool contest/, 'gm -c show ct contains Name'
50}
acb202c6 51
6d34ddc5
MG
52ta [qw/-c get ct owner/], 'MGV';
53ta [qw/-c set ct owner nobody/];
54ta [qw/-c get ct owner/], 'nobody';
55ta [qw/-c list/], join "\n", sort qw/fc rc pc ct/;
56ta [qw/-c rm ct/];
57ok !defined contest_entry('ct'), 'gm -c rm ct';
acb202c6 58
6d34ddc5 59fakein <<EOF;
acb202c6 60Test problem
6d34ddc5
MG
61y
62pc
acb202c6
MG
63Marius Gavrilescu
64Smaranda Ciubotaru
65MGV
66b
6d34ddc5 67gm
acb202c6
MG
68c
69a
70a
713
721
73100
74Ok
75Ok
76Ok
6d34ddc5
MG
77EOF
78
79ta [qw/-p add pb/];
80
81subtest 'gruntmaster-problem add' => sub {
82 plan tests => 10;
83 my $pb = problem_entry 'pb';
84 ok $pb, 'problem exists';
85 is $pb->{name}, 'Test problem', 'name';
86 ok $pb->{private}, 'private';
87 is $pb->{author}, 'Marius Gavrilescu', 'author';
88 is $pb->{writer}, 'Smaranda Ciubotaru', 'statement writer';
89 is $pb->{owner}, 'MGV', 'owner';
90 is $pb->{level}, 'easy', 'level';
91 is $pb->{timeout}, 1, 'time limit';
92 is $pb->{olimit}, 100, 'output limit';
93 ok contest_has_problem('ct', 'pb'), 'is in contest';
acb202c6
MG
94};
95
6d34ddc5
MG
96ta [qw/-p get pb author/], 'Marius Gavrilescu';
97ta [qw/-p set pb owner nobody/];
98ta [qw/-p get pb owner/], 'nobody';
99ta [qw/-p list/], join "\n", sort qw/arc pca rca fca prv pb/;
100ta [qw/-p rm pb/];
101ok !defined problem_entry ('pb'), 'gm -p rm pb';
102
103my $id = create_job extension => '.cpp', format => 'CPP', problem => 'arc', source => '...', owner => 'MGV';
104ok abs (time - user_entry('MGV')->{lastjob}) < 2, 'create_job - lastjob looks sane';
105ta [rerun => $id];
106is job_entry($id)->{result}, -2, "gm rerun $id";
107ta [qw/rm -j/, $id];
108
109sub terr {
110 my ($args, $err) = @_;
111 my $ret = test_app 'Gruntmaster::App' => $args;
112 like $ret->error, qr/$err/, join ' ', 'invalid:', gm => @$args;
113 $ret
114}
acb202c6 115
6d34ddc5
MG
116terr [qw/add/], 'No table selected';
117terr [qw/-j add/], 'Don\'t know how to add to this table';
118terr [qw/-c add/], 'Wrong number of arguments';
119terr [qw/get/], 'No table selected';
120terr [qw/-c get/], 'Wrong number of arguments';
121terr [qw/list/], 'No table selected';
122terr [qw/-p rerun/], 'This command only works on jobs';
123terr [qw/-j rerun/], 'Wrong number of arguments';
124terr [qw/rm/], 'No table selected';
125terr [qw/-j rm/], 'Wrong number of arguments';
126terr [qw/set/], 'No table selected';
127terr [qw/-j set 1 owner/], 'Not enough arguments';
128terr [qw/-j set 1 owner x name/], 'The number of arguments must be odd';
129terr [qw/show/], 'No table selected';
130terr [qw/-c show/], 'Wrong number of arguments';
This page took 0.019682 seconds and 4 git commands to generate.