The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package t::Utils;
use strict;
use warnings;
use DBI;
use Test::More;
use File::Temp qw(tempdir);

BEGIN {
  eval "use DBD::SQLite";
  plan skip_all => 'needs DBD::SQLite for testing' if $@;
}

sub import {
    strict->import;
    warnings->import;
}

sub _get_schema {
    my $dbh   = shift;
    my $table = shift || "job";

    my $driver = $dbh->{Driver}{Name};
    my $sql;
    if ( $driver eq 'mysql' ) {
        $sql = _read_pod('MySQL');
    } elsif ( $driver eq 'Pg' ) {
        $sql = _read_pod('PostgreSQL');
    } elsif ( $driver eq 'SQLite' ) {
        $sql = _read_pod('SQLite');
    } else {
        Carp::croak "this driver unsupport: $driver";
    }
    $sql =~ s/(CREATE\s+TABLE\s+)job/CREATE TABLE $table/;
    $sql;
}

sub _read_pod {
    my $type = shift;

    open my $fh, '<', './lib/Jonk.pm';
    my $do_read     = 0;
    my $read_schema = 0;
    my $schema='';
    while (<$fh>) {
        my $line = $_;
        if ($line =~ /=head1 SCHEMA/) {
            $do_read=1;
        }
        if ($do_read) {
            if ($line =~ /$type/) {
                $read_schema = 1;
                next;
            }
            if ($read_schema && $line =~ /^=head/) {
                $read_schema = 0;
                last;
            }
            if ($read_schema) {
                $schema .= $line;
                next;
            }
        }
    }
    $schema;
}

my $db;
my $_setup=0;
sub setup {
    my ($class, $table) = @_;

    $db ||= do {
        my $tempdir = tempdir(CLEANUP => 1);
        File::Spec->catfile($tempdir, 'jonk_test.db');
    };

    my $dbh = DBI->connect('dbi:SQLite:'.$db);
    $_setup ? do {1} : do {$dbh->do(_get_schema($dbh, $table)); $_setup=1};
    return $dbh;
}

sub cleanup {
    my ($class, $dbh, $table) = @_;
    $table ||= "job";
    $dbh->do("DROP TABLE $table");
    $_setup=0;
}

1;