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