package tests::AggregateTest;
use strict;
use base qw/Lire::Test::TestCase tests::TestStoreFixture/;
use Lire::ReportSpec;
use Lire::Aggregate;
use tests::MockAggregator;
use Class::Inner;
sub new {
my $self = shift()->SUPER::new( @_ );
$self->init();
return $self;
}
sub set_up {
my $self = shift->SUPER::set_up();
$self->set_up_test_schema();
$self->{'spec'} = new Lire::ReportSpec();
$self->{'spec'}->superservice( 'test' );
$self->{'spec'}->id( 'test-aggregate' );
$self->{'mock_aggregator'} =
new tests::MockAggregator( 'report_spec' => $self->{'spec'} );
$self->{'mock_aggr'} =
new Class::Inner( 'parent' => 'Lire::Aggregate',
'args' => [ 'report_spec' => $self->{'spec'},
'name' => 'aggrTest',
'parent' => $self->{'mock_aggregator'},
'op' => 'mock',
],
'methods' =>
{
'new' => sub {
my $self = bless {}, shift;
$self->init( @_ );
return $self;
},
'sql_required_fields' => sub {
return [ 'time-taken', 'connection_id' ]
},
'sql_aggr_expr' => sub {
return 'lr_mock_aggr(time_taken)';
},
}
);
return;
}
sub tear_down {
my $self = $_[0];
$self->SUPER::tear_down();
return;
}
sub test_init {
my $self = $_[0];
my $aggr = $self->{'mock_aggr'};
my %args = ( 'report_spec' => $self->{'spec'},
'name' => 'aggrTest',
'op' => 'mock' );
$self->assert_died( sub { $aggr->init( %args ) },
qr/missing 'parent' parameter/ );
$args{'parent'} = $self->{'mock_aggregator'};
delete $args{'name'};
$self->assert_died( sub { $aggr->init( %args ) },
qr/missing 'name' parameter/ );
$self->assert_str_equals( 'aggrTest', $aggr->{'name'} );
$self->assert_str_equals( 'mock', $aggr->{'op'} );
$self->assert_str_equals( $self->{'spec'}, $aggr->{'report_spec'} );
}
sub test_build_query {
my $self = $_[0];
my $e_query = new Lire::DlfQuery( 'test' );
$e_query->add_aggr_field( 'aggrTest', 'lr_mock_aggr(time_taken)' );
$e_query->add_aggr_field( '_lr_aggrTest_mc',
'lr_missing_cases("time-taken",connection_id)' );
my $query = new Lire::DlfQuery( 'test' );
$self->{'mock_aggr'}->build_query( $query );
$self->assert_deep_equals( $e_query, $query );
}
sub test_set_missing_cases_aggr_expr {
my $self = $_[0];
my $e_query = new Lire::DlfQuery( 'test' );
$e_query->add_aggr_field( '_lr_aggrTest_mc',
'lr_missing_cases("time-taken",connection_id)' );
my $query = new Lire::DlfQuery( 'test' );
$self->{'mock_aggr'}->set_missing_cases_aggr_expr( $query );
$self->assert_deep_equals( $e_query, $query );
}
sub test_set_missing_cases_value {
my $self = $_[0];
my $value = {};
$self->{'mock_aggr'}->set_missing_cases_value( { '_lr_aggrTest_mc' => 10 },
$value );
$self->assert_equals( 10, $value->{'missing_cases'} );
}
sub test_set_name {
my $self = $_[0];
$self->{'mock_aggr'}->set_name( 'newName' );
$self->assert_str_equals( 'newName', $self->{'mock_aggr'}{'name'} );
$self->assert_died( sub { $self->{'mock_aggr'}->set_name( undef ) },
qr/missing 'name' parameter/ );
$self->assert_died( sub { $self->{'mock_aggr'}->set_name( 'invalid name' ) },
qr/invalid field name: 'invalid name'/ );
$self->{'mock_aggregator'}{'name'} = 'aTest';
$self->assert_died( sub { $self->{'mock_aggr'}->set_name( 'aTest' ) },
qr/name 'aTest' is already defined/ );
# Check that we can call set_name() with the current value
$self->{'mock_aggr'}->set_name( 'newName' );
}
1;
syntax highlighted by Code2HTML, v. 0.9.1