1use strict;
2use warnings;
3use Test::More tests => 10;
4use DBIx::Class::Schema::Loader 'make_schema_at';
5use lib 't/lib';
6use make_dbictest_db;
7
8make_schema_at(
9    'DBICTest::Schema::_test_schema_base',
10    {
11	naming => 'current',
12	schema_base_class => 'TestSchemaBaseClass',
13        schema_components => ['TestSchemaComponent'],
14    },
15    [ $make_dbictest_db::dsn ],
16);
17
18is $TestSchemaBaseClass::test_ok, 1,
19    'connected using schema_base_class';
20
21is $DBIx::Class::TestSchemaComponent::test_component_ok, 1,
22    'connected using schema_components';
23
24# try an explicit dynamic schema
25
26{
27    package DBICTest::Schema::_test_schema_base_dynamic;
28    use base 'DBIx::Class::Schema::Loader';
29    our $ran_connection = 0;
30    __PACKAGE__->loader_options({
31        naming => 'current',
32        schema_base_class => 'TestSchemaBaseClass',
33        schema_components => ['TestSchemaComponent'],
34    });
35    # check that connection doesn't cause an infinite loop
36    sub connection { my $self = shift; $ran_connection++; return $self->next::method(@_) }
37}
38
39$TestSchemaBaseClass::test_ok = 0;
40$DBIx::Class::TestSchemaComponent::test_component_ok = 0;
41
42ok(my $schema =
43    DBICTest::Schema::_test_schema_base_dynamic->connect($make_dbictest_db::dsn),
44    'connected dynamic schema');
45
46is $DBICTest::Schema::_test_schema_base_dynamic::ran_connection, 1,
47    'schema class connection method ran only once';
48
49is $TestSchemaBaseClass::test_ok, 1,
50    'connected using schema_base_class in dynamic schema';
51
52is $DBIx::Class::TestSchemaComponent::test_component_ok, 1,
53    'connected using schema_components in dynamic schema';
54
55# connect a second time
56
57$TestSchemaBaseClass::test_ok = 0;
58$DBIx::Class::TestSchemaComponent::test_component_ok = 0;
59$DBICTest::Schema::_test_schema_base_dynamic::ran_connection = 0;
60
61ok($schema =
62    DBICTest::Schema::_test_schema_base_dynamic->connect($make_dbictest_db::dsn),
63    'connected dynamic schema a second time');
64
65is $DBICTest::Schema::_test_schema_base_dynamic::ran_connection, 1,
66'schema class connection method ran only once when connecting a second time';
67
68is $TestSchemaBaseClass::test_ok, 1,
69    'connected using schema_base_class in dynamic schema a second time';
70
71is $DBIx::Class::TestSchemaComponent::test_component_ok, 1,
72    'connected using schema_components in dynamic schema a second time';
73