The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w
use strict;

# testing process with no id file

use CPAN::Testers::Data::Release;
use Test::More tests => 10;

my @ROWS = (
    q{Crypt-Salt|0.01|9348320|94812eb8-e604-11df-b986-f0a4f41852f9|1|1|1|1|132|0|0|1},
    q{Tk-CursorControl|0.3|115449|00115449-b19f-3f77-b713-d32bba55d77f|2|1|1|1|3|0|0|0},
    q{Tk-CursorControl|0.2|102862|00102862-b19f-3f77-b713-d32bba55d77f|2|1|1|1|2|0|0|0},
    q{Tk-CursorControl|0.4|9333853|93d9dbcc-e541-11df-8d4f-a0612a1db272|1|1|1|1|62|177|1|2},
    q{Tk-CursorControl|0.4|6876196|00134933-b19f-3f77-b713-d32bba55d77f|1|1|2|1|6|11|0|0},
    q{Chess-PGN-Filter|0.11|148342|00148342-b19f-3f77-b713-d32bba55d77f|2|1|1|1|2|1|0|0},
    q{Chess-PGN-Filter|0.06|36333|00036333-b19f-3f77-b713-d32bba55d77f|2|1|1|1|0|1|0|0},
    q{Chess-PGN-Filter|0.09|651577|00036397-b19f-3f77-b713-d32bba55d77f|2|1|1|1|1|1|0|0},
    q{Chess-PGN-Filter|0.07|36360|00036360-b19f-3f77-b713-d32bba55d77f|2|1|1|1|0|1|0|0},
    q{Chess-PGN-Filter|0.05|36251|00036251-b19f-3f77-b713-d32bba55d77f|2|1|1|1|0|1|0|0},
    q{Crypt-Salt|0.01|9348321|94812eb9-e604-11df-b986-f0a4f41852f9|1|1|1|1|132|0|0|1},
    q{Crypt-Salt|0.01|9348320|94822eb8-e604-11df-b986-f0a4f41852f9|1|1|1|1|132|0|0|1},
    q{Tk-CursorControl|0.3|115459|00215449-b19f-3f77-b713-d32bba55d77f|2|1|1|1|3|0|0|0},
    q{Tk-CursorControl|0.2|102872|00202862-b19f-3f77-b713-d32bba55d77f|2|1|1|1|2|0|0|0},
    q{Tk-CursorControl|0.4|9333863|94d9dbcc-e541-11df-8d4f-a0612a1db272|1|1|1|1|62|177|1|2},
    q{Tk-CursorControl|0.4|6876296|01134933-b19f-3f77-b713-d32bba55d77f|1|1|2|1|6|11|0|0},
    q{Chess-PGN-Filter|0.11|148442|01148342-b19f-3f77-b713-d32bba55d77f|2|1|1|1|2|1|0|0},
    q{Chess-PGN-Filter|0.06|36343|00136333-b19f-3f77-b713-d32bba55d77f|2|1|1|1|0|1|0|0},
    q{Chess-PGN-Filter|0.09|651677|01036397-b19f-3f77-b713-d32bba55d77f|2|1|1|1|1|1|0|0},
    q{Chess-PGN-Filter|0.07|36370|00136360-b19f-3f77-b713-d32bba55d77f|2|1|1|1|0|1|0|0},
    q{Chess-PGN-Filter|0.05|36261|00136251-b19f-3f77-b713-d32bba55d77f|2|1|1|1|0|1|0|0},
    q{Crypt-Salt|0.01|9348322|94822eb9-e604-11df-b986-f0a4f41852f9|1|1|1|1|132|0|0|1},
);


my $config = 't/_DBDIR/test-config.ini';
my $idfile = 't/_DBDIR/idfile.txt';
unlink $idfile if -f $idfile;

SKIP: {
    skip "Test::Database required for DB testing", 10 unless(-f $config);

    my $obj;
    eval { $obj = CPAN::Testers::Data::Release->new(config => $config) };
    isa_ok($obj,'CPAN::Testers::Data::Release');

    SKIP: {
        skip "Problem creating object", 9 unless($obj);

        # reset DB
        $obj->{CPANSTATS}{dbh}->do_query('delete from release_summary');
        insert_records($obj,\@ROWS);

        is(-f $idfile,undef,'.. no idfile at start');

        my @rows = $obj->{CPANSTATS}{dbh}->get_query('hash','select count(*) as count from release_summary');
        is($rows[0]->{count}, 22, "row count for release_summary");

        $obj->backup_from_start;  # from start
        
        is(-f $idfile,undef,'.. no idfile after from start');

        @rows = $obj->{RELEASE}{dbh}->get_query('hash','select count(*) as count from release');
        is($rows[0]->{count}, 9, "row count for release");

        $obj->backup_from_last;  # from last

        @rows = $obj->{RELEASE}{dbh}->get_query('hash','select count(*) as count from release');
        is($rows[0]->{count}, 9, "row count for release");

        is(-f $idfile,undef,'.. no idfile after from last');


        # check logs
        my $log = 't/_DBDIR/release.log';
        my $fh = IO::File->new($log,'r');
        SKIP: {
            skip "Unable to open log file: $!", 3 unless($fh);

            my $text;
            while (<$fh>) { $text .= $_ }

            like($text, qr!\d+/\d+/\d+ \d+:\d+:\d+ Create backup database!);
            like($text, qr!\d+/\d+/\d+ \d+:\d+:\d+ Find new start!);
            like($text, qr!\d+/\d+/\d+ \d+:\d+:\d+ Backup completed!);

            $fh->close;
        }
    }
}

sub insert_records {
    my ($obj,$rows) = @_;

    my $sql = 'INSERT INTO release_summary (dist,version,id,guid,oncpan,distmat,perlmat,patched,pass,fail,na,unknown) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)';
    for(@$rows) {
        $obj->{CPANSTATS}{dbh}->do_query( $sql, split(/\|/,$_) );
    }
}