use strict;
use warnings;
use Test::More 0.96;
use File::Spec::Functions qw( catfile ); # core
use File::Temp 0.19 qw( tempdir );
use DBI;
# Ensure the script runs.
my $script_dir = (grep { /blib.lib/ } @INC)
? [qw( blib script )]
: ['bin'];
my $script = catfile(@$script_dir, 'csv2sqlite');
my $dir = tempdir('csv2sqlite.XXXXXX', TMPDIR => 1, CLEANUP => 1);
sub run_app (@) {
my @args = ($^X, $script, @_);
note join ' ', @args;
system @args;
}
sub test_run {
my ($db, $files, $rs) = @_;
$db = catfile($dir, $db);
run_app @$files, $db;
is $?, 0, 'script executed successfully'
or diag $!;
my $dbh = DBI->connect("dbi:SQLite:dbname=$db");
while( my ($sql, $exp) = each %$rs ){
is_deeply $dbh->selectall_arrayref($sql), $exp, 'database populated';
}
}
test_run(
'snacks.sqlite',
[map { catfile(corpus => $_) } qw( chips.csv pretzels.csv )],
{
'SELECT flavor, size FROM chips ORDER BY flavor DESC' => [
['spicy', 'medium'],
['plain', 'large'],
['bbq', ' small'],
],
},
);
done_testing;