BEGIN {
    use FindBin '$Bin';
    $ENV{KELP_CONFIG_DIR} = "$Bin/../conf";
}

use Plack::Util;
use Kelp::Base -strict;
use Kelp::Module::Config;
use Test::More;
use Test::Exception;

my $app = Plack::Util::inline_object(
    mode => sub { "test" },
    path => sub { $ENV{KELP_CONFIG_DIR} }
);
my $c = Kelp::Module::Config->new(app => $app);

# Inject some test data into the config so we can test
$c->data->{test} = {
    a => 1,
    b => 2,
    c => 'bin',
    d => {e => 3},
    f => {g => {h => {i => 4}}}
};

is $c->get('charset'), 'UTF-8';
is $c->get('modules_init.JSON.utf8'), 1;
is $c->get('test.a'), 1;
is $c->get('test.d.e'), 3;
is $c->get('test.f.g.h.i'), 4;
is_deeply $c->get('test.f.g.h'), {i => 4};
is $c->get(''), undef;
is $c->get(), undef;

is $c->get('test.d.f.g'), undef, 'path doesnt break when key does not exist';
is $c->get('test.d.f.g', 'woohoo'), 'woohoo', 'default is returned';

dies_ok { $c->get('test.b.c') } "Path breaks on invalid type";

done_testing;