package tests::SumTest;
use strict;
use base qw/Lire::Test::TestCase tests::TestStoreFixture/;
use Lire::Sum;
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-sum' );
$self->_set_up_flat_subreport();
$self->_set_up_nested_subreport();
$self->{'cfg'}{'lr_scale_numbers'} = 0;
$self->{'cfg'}{'lr_scale_bytes'} = 1;
$self->{'cfg'}{'lr_scale_seconds'} = 1;
return $self;
}
sub _set_up_flat_subreport {
my $self = $_[0];
my $mock = new tests::MockAggregator( 'report_spec' => $self->{'spec'} );
$self->{'sum'} = new Lire::Sum( 'report_spec' => $self->{'spec'},
'parent' => $mock,
'field' => 'file_size',
'name' => 'sum' );
$self->{'weight_sum'} = new Lire::Sum( 'report_spec' => $self->{'spec'},
'parent' => $mock,
'field' => 'file_size',
'weight' => 'file_size',
'name' => 'weight_sum' );
$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( 'sum', 'numerical', 'bytes' );
return;
}
sub _set_up_nested_subreport {
my $self = $_[0];
my $mock = new tests::MockAggregator( 'report_spec' => $self->{'spec'} );
$self->{'ratio_sum'} = new Lire::Sum( 'report_spec' => $self->{'spec'},
'parent' => $mock,
'field' => 'file_size',
'ratio' => 'table',
'name' => 'ratio_sum' );
$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( 'ratio_sum', 'numerical', 'bytes' );
return;
}
sub tear_down {
my $self = shift->SUPER::tear_down();
return $self;
}
sub test_sql_aggr_expr {
my $self = $_[0];
$self->{'sum'}{'field'} = 'file-size';
$self->assert_equals( 'sum("file-size")', $self->{'sum'}->sql_aggr_expr());
}
sub test_sql_aggr_expr_weight {
my $self = $_[0];
$self->{'sum'}{'field'} = 'file-size';
$self->{'sum'}{'weight'} = 'connection-id';
$self->assert_equals( 'sum("file-size"*"connection-id")',
$self->{'sum'}->sql_aggr_expr());
}
sub test_create_value_value {
my $self = $_[0];
my $table = $self->{'flat_subreport'};
my $value = $self->{'sum'}->create_value( $table, { 'sum' => 2048*10,
'_lr_sum_mc' => 2 });
$self->assert_deep_equals( { 'content' => '20k',
'value' => 2048*10,
'missing_cases' => 2 }, $value );
}
sub test_create_value_table_ratio_boot {
my $self = $_[0];
my $table = $self->{'nested_subreport'};
$self->{'ratio_sum'}{'ratio'} = 'table';
my $table_value =
$self->{'ratio_sum'}->create_value( $table, { 'ratio_sum' => 100 * 2048,
'_lr_ratio_sum_mc' => 0 });
$self->assert_deep_equals( { 'content' => '100.0',
'value' => 2048*100,
'missing_cases' => 0 },
$table_value );
}
sub test_create_value_table_ratio {
my $self = $_[0];
my $table = $self->{'nested_subreport'};
$table->set_summary_value( 'ratio_sum', 'value' => 100*2048 );
my $group1 = $table->create_entry()->create_group();
$self->{'ratio_sum'}{'ratio'} = 'table';
my $table_value =
$self->{'ratio_sum'}->create_value( $table, { 'ratio_sum' => 100 * 2048,
'_lr_ratio_sum_mc' => 0 });
$self->assert_deep_equals( { 'content' => '100.0',
'value' => 2048*100,
'missing_cases' => 0 },
$table_value );
my $group1_value =
$self->{'ratio_sum'}->create_value( $group1, { 'ratio_sum' => 5 * 2048,
'_lr_ratio_sum_mc' => 0});
$self->assert_deep_equals( { 'content' => '5.0',
'value' => 2048*5,
'missing_cases' => 0 },
$group1_value );
}
sub test_create_value_group_ratio {
my $self = $_[0];
my $table = $self->{'nested_subreport'};
$table->set_summary_value( 'ratio_sum', 'value' => 100*2048 );
my $group1 = $table->create_entry()->create_group();
$self->{'ratio_sum'}{'ratio'} = 'group';
my $table_value =
$self->{'ratio_sum'}->create_value( $table,
{ 'ratio_sum' => 100 * 2048,
'_lr_ratio_sum_mc' => 0 } );
$self->assert_deep_equals( { 'content' => '100.0',
'value' => 2048*100,
'missing_cases' => 0 },
$table_value );
$group1->set_summary_value( 'ratio_sum', 'value' => 5*2048 );
my $group1_value =
$self->{'ratio_sum'}->create_value( $group1,
{ 'ratio_sum' => 1 * 2048,
'_lr_ratio_sum_mc' => 0 } );
$self->assert_deep_equals( { 'content' => '20.0',
'value' => 1 * 2048,
'missing_cases' => 0 },
$group1_value );
}
1;
syntax highlighted by Code2HTML, v. 0.9.1