Ensure that has_many() loads the foreign class.
Michael G Schwern [Sun, 24 Feb 2008 09:12:46 +0000 (09:12 +0000)]
lib/DBIx/Class/CDBICompat/Relationships.pm
t/cdbi-t/has_many_loads_foreign_class.t [new file with mode: 0644]

index 6893bc9..f410976 100644 (file)
@@ -82,6 +82,7 @@ sub has_many {
   }
 
   if( !$f_key and !@f_method ) {
+      $class->ensure_class_loaded($f_class);
       my $f_source = $f_class->result_source_instance;
       ($f_key) = grep { $f_source->relationship_info($_)->{class} eq $class }
                       $f_source->relationships;
diff --git a/t/cdbi-t/has_many_loads_foreign_class.t b/t/cdbi-t/has_many_loads_foreign_class.t
new file mode 100644 (file)
index 0000000..9ab5c25
--- /dev/null
@@ -0,0 +1,37 @@
+use strict;
+use Test::More;
+
+
+BEGIN {
+  eval "use DBIx::Class::CDBICompat;";
+  plan skip_all => 'Class::Trigger and DBIx::ContextualFetch required' if $@;
+  eval "use DBD::SQLite";
+  plan $@ ? (skip_all => 'needs DBD::SQLite for testing') : (tests => 3);
+}
+
+
+use lib 't/testlib';
+use Director;
+
+# Test that has_many() will load the foreign class.
+ok !Class::Inspector->loaded( 'Film' );
+ok eval { Director->has_many( films => 'Film' ); 1; } || diag $@;
+
+my $shan_hua = Director->create({
+    Name    => "Shan Hua",
+});
+
+my $inframan = Film->create({
+    Title       => "Inframan",
+    Director    => "Shan Hua",
+});
+my $guillotine2 = Film->create({
+    Title       => "Flying Guillotine 2",
+    Director    => "Shan Hua",
+});
+my $guillotine = Film->create({
+    Title       => "Master of the Flying Guillotine",
+    Director    => "Yu Wang",
+});
+
+is_deeply [sort $shan_hua->films], [sort $inframan, $guillotine2];
\ No newline at end of file