package tests::ReportMergerTest;

use strict;

use base qw/ Lire::Test::TestCase /;

use Lire::ReportConfig;
use Lire::ReportParser::ReportBuilder;
use File::Basename qw/dirname/;
use Cwd qw/realpath/;

sub new {
    my $self = shift()->SUPER::new( @_ );

    $self->{'dir'} = realpath( dirname( __FILE__ ));

    return $self;
}

sub set_up {
    my $self = $_[0];
    $self->SUPER::set_up();

    $self->set_up_tz( 'EST' );

    $self->{'cfg'}{'lr_reports_path'} = [ $self->{'dir'} . "/reports" ];
    $self->{'cfg'}{'lr_filters_path'} = [ $self->{'dir'} . "/filters" ];
    $self->{'cfg'}{'lr_schemas_path'} = [ $self->{'dir'} . "/schemas" ];

    $self->{'cfg'}{'lr_scale_numbers'} = 0;
    $self->{'cfg'}{'lr_scale_bytes'} = 1;
    $self->{'cfg'}{'lr_scale_seconds'} = 1;

    $self->{'report_cfg'} =
      new_from_file Lire::ReportConfig( "test", $self->{'dir'} . "/data/test.cfg" );
    return;
}

sub tear_down {
    my $self = $_[0];
    $self->SUPER::tear_down();

    return;
}
sub test_self_merge_report {
    my $self = $_[0];

    my $parser = new Lire::ReportParser::ReportBuilder();

    my $report_e = $parser->parsefile( "$self->{'dir'}/data/test-merge.xml" );

    my $report_t =
      $self->{'report_cfg'}->merge_report_files( $self->{'dir'} . "/data/test-sqlite.xml");

    # The difference in these fields are normal
    $report_t->date( $report_e->date() );
    $report_t->generator( $report_e->generator() );
    delete $report_e->{'_id_cache'};

    $self->assert_deep_equals( $report_e, $report_t );
}

sub test_doublemerge_report {
    my $self = $_[0];

    my $parser = new Lire::ReportParser::ReportBuilder();

    my $report_e = $parser->parsefile( "$self->{'dir'}/data/test-doublemerge.xml" );

    my $report_t =
      $self->{'report_cfg'}->merge_report_files( $self->{'dir'} . "/data/test-sqlite.xml",
                                                 $self->{'dir'} . "/data/test-sqlite.xml",);

    # The difference in these fields are normal
    $report_t->date( $report_e->date() );
    $report_t->generator( $report_e->generator() );
    delete $report_e->{'_id_cache'};

    $self->assert_deep_equals( $report_e, $report_t );
}

sub test_merge_with_empty_report {
    my $self = $_[0];

    my $warnings = "";
    local $SIG{'__WARN__'} = sub { $warnings .= join "", @_ };

    my $parser = new Lire::ReportParser::ReportBuilder();
    my $report_e = $parser->parsefile( "$self->{'dir'}/data/test-merge.xml" );

    my $report_t = 
      $self->{'report_cfg'}->merge_report_files( $self->{'dir'} . "/data/test-sqlite.xml",
                                                 $self->{'dir'} . "/data/test-empty-sqlite.xml" );

    $self->annotate( $warnings );
    $self->assert( !$warnings, "There were warnings" );
    # The difference in these fields are normal
    $report_t->date( $report_e->date() );
    $report_t->generator( $report_e->generator() );
    delete $report_e->{'_id_cache'};

    $self->assert_deep_equals( $report_e, $report_t );
}

sub test_two_empty_report {
    my $self = $_[0];

    my $warnings = "";
    local $SIG{'__WARN__'} = sub { $warnings .= join "", @_ };

    my $parser = new Lire::ReportParser::ReportBuilder();
    my $report_e = $parser->parsefile( "$self->{'dir'}/data/test-empty-merge.xml" );

    my $report_t =
      $self->{'report_cfg'}->merge_report_files( $self->{'dir'} . "/data/test-empty-sqlite.xml",
                                                 $self->{'dir'} . "/data/test-empty-sqlite.xml" );

    $self->annotate( $warnings );
    $self->assert( !$warnings, "There were warnings" );

    # The difference in these fields are normal
    $report_t->date( $report_e->date() );
    $report_t->generator( $report_e->generator() );
    delete $report_e->{'_id_cache'};

    $self->assert_deep_equals( $report_e, $report_t );
}

1;


syntax highlighted by Code2HTML, v. 0.9.1