use Test::More;

use strict;
use warnings;
use utf8;

use Dancer::Session::DBI;
use Dancer qw(:syntax :tests);
use DBI;

unless ( $ENV{TRAVIS_TESTING} ) {
    plan( skip_all => "Travis CI specific tests not required for installation" );
}

set session => 'DBI';

for my $config (
    {dsn => "DBI:mysql:database=myapp_test;host=127.0.0.1", user => "root"},
    {dsn => "DBI:Pg:dbname=myapp_test;host=127.0.0.1", user => "postgres"},
    {dsn => "DBI:SQLite:dbname=:memory:", user => "" }
) {

    my $dbh = DBI->connect($config->{dsn}, $config->{user}, "");

    # There is no way to reference an in-memory database created elsewhere
    # So the SQLite setup goes here.
    if (!$config->{user}) {
        $dbh->do("CREATE TABLE session (id char(72), session_data varchar(2048), PRIMARY KEY (id))");
    }

    set 'session_options' => {
        table => 'session',
        dbh   => sub { $dbh },
    };

    ok(session(testing => "123"), "Can something in the session " . $config->{user});
    is(session('testing'), '123', "Can retrieve something from the session " . $config->{user}); 
    ok(session(utf8 => "☃"), "Can set UTF8 " . $config->{user});
    is(session('utf8'), '☃', "Can get UTF8 back" . $config->{user});    
}

done_testing(12);
