# -*- cperl -*- use strict; use warnings; use lib 't'; use Test::More; require "test-functions.pl"; if (not can_svn()) { plan skip_all => 'Cannot find or use svn commands.'; } elsif (not eval {require XMLRPC::Lite}) { plan skip_all => 'Need XMLRPC::Lite'; } else { plan tests => 9; } my $t = reset_repo(); my $wc = catdir($t, 'wc'); my $file = catfile($wc, 'file'); set_hook(<<'EOS'); use SVN::Hooks::JiraAcceptance; EOS sub work { my ($msg) = @_; <<"EOS"; echo txt >$file svn add -q --no-auto-props $file svn ci -m"$msg" --force-log $wc EOS } set_conf(<<'EOS'); JIRA_CONFIG(); EOS work_nok('config sans args', 'JIRA_CONFIG: requires three arguments', work('')); set_conf(<<'EOS'); JIRA_CONFIG('http://jira.example.com', 'user', 'pass'); JIRA_LOG_MATCH(); EOS work_nok('logmatch invalid first arg', 'JIRA_LOG_MATCH: first arg must be a qr/Regexp/', work('')); set_conf(<<'EOS'); JIRA_CONFIG('http://jira.example.com', 'user', 'pass'); JIRA_LOG_MATCH(qr/./, qr/./); EOS work_nok('logmatch invalid second arg', 'JIRA_LOG_MATCH: second arg must be a string.', work('')); set_conf(<<'EOS'); JIRA_CONFIG('http://jira.example.com', 'user', 'pass'); JIRA_LOG_MATCH(qr/./, 'help'); JIRA_ACCEPTANCE(); EOS work_nok('accept invalid first arg', 'JIRA_ACCEPTANCE: first arg must be a qr/Regexp/.', work('')); set_conf(<<'EOS'); JIRA_CONFIG('http://jira.example.com', 'user', 'pass'); JIRA_ACCEPTANCE(qr/./, qr/./); EOS work_nok('accept invalid second arg', 'JIRA_ACCEPTANCE: second arg must be a string.', work('')); set_conf(<<'EOS'); JIRA_ACCEPTANCE(qr/./, '*'); EOS work_nok('not configured', 'JIRA_ACCEPTANCE: plugin not configured.', work('')); set_conf(<<'EOS'); JIRA_CONFIG('http://jira.example.com', 'user', 'pass'); JIRA_LOG_MATCH(qr/^\[([^\]]+)\]/, 'help'); JIRA_ACCEPTANCE(qr/./ => '*'); EOS work_nok('no keys', 'Could not extract JIRA references from the log message', work('no keys')); set_conf(<<'EOS'); JIRA_CONFIG('http://no.way.to.get.here', 'user', 'pass'); JIRA_LOG_MATCH(qr/^\[([^\]]+)\]/, 'help'); JIRA_ACCEPTANCE(qr/./ => '*'); EOS work_nok('no server', 'JIRA_ACCEPTANCE: Unable to connect to the JIRA server at', work('[SVN-1] no server')); set_conf(<<'EOS'); JIRA_CONFIG('http://jira.example.com', 'user', 'pass'); JIRA_LOG_MATCH(qr/^\[([^\]]+)\]/, 'help'); JIRA_ACCEPTANCE(qr/asdf/ => '*'); EOS work_ok('no need to accept', work('ok')); # FIXME - we haven't tested actual connections to a JIRA server. Should we fake it?