use strict;
use warnings;
### after: use lib qw(@RT_LIB_PATH@);
use lib qw(/opt/rt4/local/lib /opt/rt4/lib);
package RT::Extension::AssetSQL::Test;
use base 'RT::Test::Assets';
our @EXPORT = (@RT::Test::Assets::EXPORT, 'assetsql');
sub import {
my $class = shift;
my %args = @_;
$args{'requires'} ||= [];
if ( $args{'testing'} ) {
unshift @{ $args{'requires'} }, 'RT::Extension::AssetSQL';
} else {
$args{'testing'} = 'RT::Extension::AssetSQL';
}
$class->SUPER::import( %args );
require RT::Extension::AssetSQL;
__PACKAGE__->export_to_level(1);
}
sub assetsql {
local $Test::Builder::Level = $Test::Builder::Level + 1;
my $options = shift;
my @expected = @_;
my $currentuser = RT->SystemUser;
my $sql;
if (ref($options)) {
$sql = delete $options->{sql};
$currentuser = delete $options->{CurrentUser} if $options->{CurrentUser};
die "Unexpected options: " . join ', ', keys %$options if keys %$options;
}
else {
$sql = $options;
}
my $count = scalar @expected;
my $assets = RT::Assets->new($currentuser);
$assets->FromSQL($sql);
$assets->OrderBy( FIELD => 'Name', ORDER => 'ASC' );
Test::More::is($assets->Count, $count, "number of assets from [$sql]");
my $i = 0;
while (my $asset = $assets->Next) {
my $expected = shift @expected;
if (!$expected) {
Test::More::fail("got more assets (" . $asset->Name . ") than expected from [$sql]");
next;
}
++$i;
Test::More::is($asset->Name, $expected->Name, "asset ($i/$count) from [$sql]");
}
while (my $expected = shift @expected) {
Test::More::fail("got fewer assets than expected (" . $expected->Name . ") from [$sql]");
}
}
1;