#!./perl
use ARS;
require './t/config.cache';
my $maxtest = 5;
print "1..$maxtest\n";
my $c = ars_Login(&CCACHE::SERVER,
&CCACHE::USERNAME,
&CCACHE::PASSWORD);
if(!defined($c)) {
for(my $i = 1 ; $i <= $maxtest ; $i++) {
print "not ok [$i] [ctrl]\n";
}
exit 0;
} else {
print "ok [1]\n";
}
my %fids = ars_GetFieldTable($c, "ARSperl Test");
if(!(%fids)) {
for(my $i = 2 ; $i <= $maxtest ; $i++) {
print "not ok [$i] [gft]\n";
}
exit 0;
} else {
print "ok [2]\n";
}
# There are three conditions to detect after ars__MergeEntry(...).
# 1. A non-null value returned means that a new entry was created.
# 2. A null value returned, plus $ars_errstr empty, means that an existing
# entry was replaced.
# 3. A null value returned, plus $ars_errstr non-empty, means there was some
# error.
# merge in a new entry. we should get an entry-id back
my $eid = ars_MergeEntry($c, "ARSperl Test", 2,
$fids{'Submitter'}, 'jcmurphy',
$fids{'Short Description'}, 'foobar',
$fids{'Status'}, 0);
if(!defined($eid)) {
print "not ok [3] [$ars_errstr]\n";
} else {
print "ok [3]\n";
}
# replace the entry with something new. we should get the
# same entry-id back
my $eid2 = ars_MergeEntry($c, "ARSperl Test",
&ARS::AR_MERGE_ENTRY_DUP_MERGE,
1, $eid,
$fids{'Submitter'}, 'jcm',
$fids{'Short Description'}, 'foobar2',
$fids{'Status'}, 1);
if(!defined($eid2)) {
print "not ok [4] ndef eid [$ars_errstr]\n";
}
elsif($eid2 eq "") {
# currently,
# if $ars_errstr contains any errors, and $eid2
# is "", then something is awry.
if($ARS::ars_errhash{numItems} > 0) {
for(my $i = 0 ; $i < $ARS::ars_errhash{numItems} ; $i++) {
if(@{$ARS::ars_errhash{'messageType'}}[$i] >=
&ARS::AR_RETURN_ERROR) {
print "not ok [4]\n";
}
}
}
}
print "ok [4]\n";
# now do it again, but via the OO layer
my $ooc = new ARS(-ctrl => $c,
-catch => { ARS::AR_RETURN_ERROR => undef,
ARS::AR_RETURN_WARNING => undef,
ARS::AR_RETURN_FATAL => undef
},
-debug => undef
);
my $oof = $ooc->openForm(-form => 'ARSperl Test');
$eid2 = $oof->merge(-type => &ARS::AR_MERGE_ENTRY_DUP_MERGE,
-values => {
'Request ID' => $eid,
'Submitter' => 'xyz',
'Short Description' => 'oo-foobar',
'Status' => 'Rejected'
}
);
# since we disabled exception handling (in the 'new' above)
# we can test $eid2
if($eid2 eq $eid) {
print "ok [5]\n";
} else {
# if $eid2 is "", then the op failed completely
# if $eid2 ne $eid, then the op succeeded, but
# created a new entry - which shouldnt happen
# since we specified DUP_MERGE _unless_ you
# forgot to specify an entry-id in your values
# hash
print "not ok [5] (eid2=$eid2 ; eid=$eid ; err=$ars_errstr)\n";
}
ars_DeleteEntry($c, "ARSperl Test", $eid);
exit 0;