package tests::CountTest;
use strict;
use base qw/Lire::Test::TestCase tests::TestStoreFixture/;
use Lire::Count;
use Lire::ReportSpec;
use Lire::Report::Subreport;
use Lire::Report::TableInfo;
use tests::MockAggregator;
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-count' );
$self->_set_up_flat_subreport();
$self->_set_up_nested_subreport();
$self->{'cfg'}{'lr_scale_numbers'} = 1;
$self->{'cfg'}{'lr_scale_bytes'} = 1;
$self->{'cfg'}{'lr_scale_seconds'} = 1;
return;
}
sub tear_down {
my $self = $_[0];
$self->SUPER::tear_down( @_ );
return;
}
sub _set_up_flat_subreport {
my $self = $_[0];
my $mock = new tests::MockAggregator( 'report_spec' => $self->{'spec'} );
$self->{'count_op'} = new Lire::Count( 'report_spec' => $self->{'spec'},
'parent' => $mock,
'name' => 'countTest' );
$self->{'flat_subreport'} = new Lire::Report::Subreport( 'test', 'test' );
my $info = new Lire::Report::TableInfo();
$self->{'flat_subreport'}->table_info( $info );
$info->create_column_info( 'countTest', 'numerical', 'int' );
return;
}
sub _set_up_nested_subreport {
my $self = $_[0];
my $mock = new tests::MockAggregator( 'report_spec' => $self->{'spec'} );
$self->{'ratio_op'} = new Lire::Count( 'report_spec' => $self->{'spec'},
'parent' => $mock,
'ratio' => 'table',
'name' => 'ratioTest' );
$self->{'nested_subreport'} = new Lire::Report::Subreport( 'test', 'test' );
my $info = new Lire::Report::TableInfo();
$self->{'nested_subreport'}->table_info( $info );
my $group1_info = $info->create_group_info( 'group1' );
$group1_info->create_column_info( 'ratioTest', 'numerical', 'int' );
return;
}
sub test_sql_aggr_expr {
my $self = $_[0];
$self->assert_equals( 'count(*)', $self->{'count_op'}->sql_aggr_expr());
$self->{'count_op'}{'fields'} = [ 'connection-id', 'user' ];
$self->assert_equals( 'lr_count_uniq("connection-id",user)',
$self->{'count_op'}->sql_aggr_expr());
}
sub test_sql_required_fields {
my $self = $_[0];
$self->assert_deep_equals( [],
$self->{'count_op'}->sql_required_fields() );
$self->{'count_op'}{'fields'} = [ 'connection_id', 'user' ];
$self->assert_deep_equals( [ 'connection_id', 'user' ],
$self->{'count_op'}->sql_required_fields() );
}
sub test_create_value {
my $self = $_[0];
my $table = $self->{'flat_subreport'};
my $row = { 'countTest' => 1000,
'_lr_countTest_mc' => 2 };
my $value = $self->{'count_op'}->create_value( $table, $row );
$self->assert_deep_equals( { 'content' => '1k',
'value' => 1000,
'missing_cases' => 2 }, $value );
}
sub test_create_value_table_ratio_bootstrap {
my $self = $_[0];
my $table = $self->{'nested_subreport'};
my $table_value =
$self->{'ratio_op'}->create_value( $table, { 'ratioTest' => 1000,
'_lr_ratioTest_mc' => 0 });
$self->assert_deep_equals( { 'content' => '100.0',
'value' => 1000,
'missing_cases' => 0 },
$table_value );
}
sub test_create_value_table_ratio {
my $self = $_[0];
my $table = $self->{'nested_subreport'};
$table->set_summary_value( 'ratioTest', 'value' => 1000 );
my $group1 = $table->create_entry()->create_group();
$self->{'ratio_op'}{'ratio'} = 'table';
my $table_value =
$self->{'ratio_op'}->create_value( $table, { 'ratioTest' => 1000,
'_lr_ratioTest_mc' => 0 });
$self->assert_deep_equals( { 'content' => '100.0',
'value' => 1000,
'missing_cases' => 0 },
$table_value );
my $group1_value =
$self->{'ratio_op'}->create_value( $group1, { 'ratioTest' => 100,
'_lr_ratioTest_mc' => 0});
$self->assert_deep_equals( { 'content' => '10.0',
'value' => 100,
'missing_cases' => 0 },
$group1_value );
}
sub test_create_value_group_ratio {
my $self = $_[0];
my $table = $self->{'nested_subreport'};
$table->set_summary_value( 'ratioTest', 'value' => 500 );
my $group1 = $table->create_entry()->create_group();
$self->{'ratio_op'}{'ratio'} = 'group';
my $table_value =
$self->{'ratio_op'}->create_value( $table,
{ 'ratioTest' => 500,
'_lr_ratioTest_mc' => 0 } );
$self->assert_deep_equals( { 'content' => '100.0',
'value' => 500,
'missing_cases' => 0 },
$table_value );
$group1->set_summary_value( 'ratioTest', 'value' => 100 );
my $group1_value =
$self->{'ratio_op'}->create_value( $group1,
{ 'ratioTest' => 1,
'_lr_ratioTest_mc' => 0 } );
$self->assert_deep_equals( { 'content' => '1.0',
'value' => 1,
'missing_cases' => 0 },
$group1_value );
}
1;
syntax highlighted by Code2HTML, v. 0.9.1