Git-Hooks
view release on metacpan or search on metacpan
t/02-check-jira.t view on Meta::CPAN
use Git::Hooks::Test ':all';
use Test::More tests => 39;
use Path::Tiny;
my ($repo, $file, $clone, $T);
sub setup_repos_for {
my ($reporef) = @_;
($repo, $file, $clone, $T) = new_repos();
foreach my $git ($repo, $clone) {
# Inject a fake JIRA::REST class definition in order to be able
# to test this without a real Jira server.
install_hooks($git, <<'EOF', qw/commit-msg update pre-receive/);
package JIRA::REST;
sub new {
my ($class, $jiraurl, $jirauser, $jirapass) = @_;
die "JIRA::REST(fake): cannot connect or login\n" if $jirapass eq 'invalid';
return bless {}, $class;
}
my %issues = (
'GIT-1' => {key => 'GIT-1',
fields => {
resolution => 1,
assignee => { name => 'user'},
issuetype => { name => 'Task' },
status => { name => 'Closed' },
fixVersions => [],
}},
'GIT-2' => {key => 'GIT-2',
fields => {
resolution => undef,
assignee => { name => 'user'},
issuetype => { name => 'Bug' },
status => { name => 'Open' },
fixVersions => [{name => '1.2.3'}],
}},
'GIT-3' => {key => 'GIT-3',
fields => {
resolution => undef,
assignee => { name => 'user'},
issuetype => { name => 'Improvement' },
status => { name => 'Taken' },
fixVersions => [{name => '1.2.3'}, {name => '1.2'}],
}},
'GIT-4' => {key => 'GIT-4',
fields => {
resolution => undef,
assignee => { name => 'user'},
issuetype => { name => 'Improvement' },
status => { name => 'Taken' },
fixVersions => [{name => 'master'}],
}},
);
sub GET {
my ($jira, $endpoint) = @_;
my $key;
if ($endpoint =~ m:/issue/(.*):) {
$key = $1;
} else {
die "JIRA::Client(fake): no such endpoint ($endpoint)\n";
}
if (exists $issues{$key}) {
return $issues{$key};
} else {
die "JIRA::Client(fake): no such issue ($key)\n";
}
}
my %queries = (
'(key IN (GIT-0)) AND (project=OTHER)' => [],
'(key IN (GIT-0)) AND (project=GIT)' => [$issues{'GIT-0'}],
'(key IN (GIT-1)) AND (project=GIT)' => [$issues{'GIT-1'}],
'(key IN (GIT-2)) AND (project=GIT)' => [$issues{'GIT-2'}],
'(key IN (GIT-2))' => [$issues{'GIT-2'}],
'(key IN (GIT-3))' => [$issues{'GIT-3'}],
'(key IN (GIT-2,GIT-3))' => [@issues{'GIT-2','GIT-3'}],
'(key IN (GIT-4))' => [$issues{'GIT-4'}],
'(key IN (GIT-2)) AND (status=Taken)' => [],
'(key IN (GIT-3)) AND (status=Taken)' => [$issues{'GIT-3'}],
'(key IN (GIT-3)) AND (issuetype=Bug)' => [],
'(key IN (GIT-2)) AND (issuetype=Bug)' => [$issues{'GIT-2'}],
);
sub set_search_iterator {
my ($jira, $query) = @_;
my $jql = $query->{jql};
if (exists $queries{$jql}) {
$jira->{iterator} = [$queries{$jql}->@*];
} else {
die $jql;
}
return;
}
sub next_issue {
my ($jira) = @_;
if ($jira->{iterator}->@*) {
return shift $jira->{iterator}->@*;
} else {
return;
}
}
package main;
$INC{'JIRA/REST.pm'} = 'fake';
EOF
}
$$reporef->run(qw/config githooks.plugin CheckJira/);
$$reporef->run(qw/config githooks.checkjira.jiraurl/, 'fake://url/');
$$reporef->run(qw/config githooks.checkjira.jirauser user/);
$$reporef->run(qw/config githooks.checkjira.jirapass valid/);
return;
}
sub check_can_commit {
my ($testname) = @_;
$file->append($testname);
$repo->run(add => $file);
( run in 2.069 seconds using v1.01-cache-2.11-cpan-a49fcb8fa48 )