1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
6use Test::More;
7use Test::Fatal;
8
9use Bread::Board;
10
11{
12    package My::Database::Handle;
13    use Moose;
14
15    has ['dsn', 'username', 'password'] => ( is => 'ro', isa => 'Str', required => 1 );
16}
17
18my $utils = container 'Utils' => as {
19    container 'Database' => [ 'DBConnInfo' ] => as {
20        service 'handle' => (
21            class        => 'My::Database::Handle',
22            dependencies => {
23                dsn      => depends_on('DBConnInfo/dsn'),
24                username => depends_on('DBConnInfo/username'),
25                password => depends_on('DBConnInfo/password'),
26            }
27        );
28    };
29};
30isa_ok($utils, 'Bread::Board::Container');
31
32my $db_conn_info = container 'DatabaseConnection' => as {
33    service 'dsn'      => 'dbi:mysql:foo';
34    service 'username' => 'bar';
35    service 'password' => '***';
36};
37isa_ok($db_conn_info, 'Bread::Board::Container');
38
39my $db = $utils->fetch('Database');
40isa_ok($db, 'Bread::Board::Container::Parameterized');
41
42isnt(exception {
43    $utils->fetch('Database')->fetch('handle');
44}, undef, '... cannot fetch on a parameterized container');
45
46isnt(exception {
47    $utils->fetch('Database/handle');
48}, undef, '... cannot fetch within a parameterized container');
49
50my $dbh = $db->create( DBConnInfo => $db_conn_info )->resolve( service => 'handle' );
51isa_ok($dbh, 'My::Database::Handle');
52
53done_testing;
54