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

use strict;
use warnings;
use FindBin;
use Path::Class;

use Test::More;
use Test::Exception;
use Test::Moose;

BEGIN {
    use_ok('Catalyst::Plugin::Bread::Board::Container');
}

{
    package Test::App::Container;
    use Moose;
    use Bread::Board;

    extends 'Catalyst::Plugin::Bread::Board::Container';

    sub BUILD {
        my $self = shift;

        container $self => as {

            container 'Model' => as {
                container 'DBIC' => as {
                    service 'schema_class' => 'Test::App::Schema::DB';
                    service 'connect_info' => (
                        block => sub {
                            my $root = (shift)->param('app_root');
                            'dbi:SQLite:dbname=' . $root->file(qw[ root db ])
                        },
                        dependencies => [ depends_on('/app_root') ]
                    );
                };
            };

            container 'View' => as {
                container 'TT' => as {
                    service 'TEMPLATE_EXTENSION' => '.tt';
                    service 'INCLUDE_PATH'       => (
                        block => sub {
                            my $root = (shift)->param('app_root');
                            [ $root->subdir('root/templates')->stringify ]
                        },
                        dependencies => [ depends_on('/app_root') ]
                    );
                };
            };

            container 'Plugin' => as {
                container 'Session' => as {
                    service 'cookie_name' => 'test_session';
                    service 'expires'     => 1920;
                    service 'namespace'   => 'test';
                };
            };

        };
    }
}

my $app_root = dir( $FindBin::Bin );

my $c = Test::App::Container->new(
    name     => 'Test010',
    app_root => $app_root,
);
isa_ok($c, 'Test::App::Container');
isa_ok($c, 'Catalyst::Plugin::Bread::Board::Container');

is_deeply(
    $c->as_catalyst_config,
    {
        'app_root'    => $app_root,
        'Model::DBIC' => {
            'schema_class' => 'Test::App::Schema::DB',
            'connect_info' => 'dbi:SQLite:dbname=' . $app_root->file(qw[ root db ])
        },
        'View::TT' => {
            'TEMPLATE_EXTENSION' => '.tt',
            'INCLUDE_PATH' => [
                $app_root->file(qw[ root templates ])->stringify
            ]
        },
        'Plugin::Session' => {
            'namespace'   => 'test',
            'cookie_name' => 'test_session',
            'expires'     => 1920
        }
    },
    '... got the config we expected for Catalyst'
);

done_testing;