package tests::RecordsTest;
use strict;
use base qw/Lire::Test::TestCase tests::TestStoreFixture/;
use Lire::Records;
use Lire::ReportSpec;
use Lire::Report::Group;
use Lire::Report::TableInfo;
use Lire::DlfQuery;
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->set_up_tz( 'UTC' );
$self->{'spec'} = new Lire::ReportSpec();
$self->{'spec'}->superservice( 'test' );
$self->{'spec'}->id( 'records-test' );
$self->{'records'} = new Lire::Records( 'report_spec' => $self->{'spec'},
'fields' => [ 'time_start', 'user',
'file_size', 'time_taken' ],
);
$self->{'spec'}->calc_spec( $self->{'records'} );
return $self;
}
sub tear_down {
my $self = $_[0];
$self->SUPER::tear_down();
return;
}
sub test_ops {
my $self = $_[0];
my $records = $self->{'records'};
$self->assert_deep_equals( [], $records->ops() );
$self->assert_died( sub { $records->ops( [] ) },
qr/records cannot contain any children/ );
}
sub test_name {
my $self = $_[0];
$self->assert_equals( 'records:4',
$self->{'records'}->name() )
}
sub test_create_categorical_info {
my $self = $_[0];
my $info = new Lire::Report::TableInfo();
$self->{'records'}->create_categorical_info( $info );
my @fields = $info->children();
$self->assert_equals( 4, scalar @fields );
my $infos = [ [ 'time_start', 'timestamp', "Start Time" ],
[ 'user', 'string', "Username" ],
[ 'file_size', 'bytes', 'Size' ],
[ 'time_taken', 'duration', 'Duration' ] ];
for ( my $i=0; $i< @$infos; $i++ ) {
my $col = $fields[$i];
$self->assert_equals( 'categorical', $col->class() );
$self->assert_equals( $infos->[$i][0], $col->name() );
$self->assert_equals( $infos->[$i][1], $col->type() );
$self->assert_equals( $infos->[$i][2], $col->label() );
}
}
sub test_build_query {
my $self = $_[0];
my $e_query = new Lire::DlfQuery( 'test' );
$e_query->add_aggr_field( '_lr_nrecords', 'count(*)' );
foreach my $f ( qw/time_start user file_size time_taken/ ) {
$e_query->add_field( $f );
}
$e_query->set_sort_spec( 'time_start' );
my $query = new Lire::DlfQuery( 'test' );
$self->{'records'}->build_query( $query );
$self->assert_deep_equals( $e_query, $query );
}
sub test_create_entry {
my $self = $_[0];
my $group = new Lire::Report::Group( bless( {}, 'Lire::Report::Entry' ),
$self->{'spec'}->create_table_info() );
my $dlf = {
'time_start' => 1065124732,
'user' => 'flacoste',
'file_size' => '2048',
'time_taken' => '15',
};
$self->{'cfg'}{'lr_scale_numbers'} = 0;
$self->{'cfg'}{'lr_scale_bytes'} = 1;
$self->{'cfg'}{'lr_scale_seconds'} = 1;
my $entry = $self->{'records'}->create_entry( $group, $dlf );
$self->assert_not_null( $entry, "create_entry() returned undef" );
my @e_data = ( ['2003-10-02 20:58:52', 1065124732 ],
['flacoste', 'flacoste' ],
[ '2k', 2048 ],
[ '15s', 15 ],
);
my @data = $entry->data();
$self->assert_equals( 4, scalar @data );
for ( my $i=0; $i < @data; $i++ ) {
my $c = $data[$i];
$self->assert_equals( 'name', $c->{'type'} );
$self->assert_equals( $e_data[$i][0], $c->{'content'} );
$self->assert_equals( $e_data[$i][1], $c->{'value'} );
}
}
1;
syntax highlighted by Code2HTML, v. 0.9.1