throw_exception if view_definition is missing instead of silent skipping + test changes
[dbsrgits/DBIx-Class.git] / t / 99dbic_sqlt_parser.t
index 6f3a3e2..f795905 100644 (file)
@@ -6,19 +6,19 @@ use lib qw(t/lib);
 use DBICTest;
 
 BEGIN {
-  require DBIx::Class;
+  require DBIx::Class::Storage::DBI;
   plan skip_all =>
-      'Test needs SQL::Translator ' . DBIx::Class->_sqlt_minimum_version
-    if not DBIx::Class->_sqlt_version_ok;
+      'Test needs SQL::Translator ' . DBIx::Class::Storage::DBI->_sqlt_minimum_version
+    if not DBIx::Class::Storage::DBI->_sqlt_version_ok;
 }
 
 my $schema = DBICTest->init_schema();
 # Dummy was yanked out by the sqlt hook test
 # CustomSql tests the horrific/deprecated ->name(\$sql) hack
-# YearXXXXCDs are views
+# YearXXXXCDs and NoViewDefinition are views
 #
 my @sources = grep
-  { $_ !~ /^ (?: Dummy | CustomSql | Year\d{4}CDs ) $/x }
+  { $_ !~ /^ (?: Dummy | CustomSql | Year\d{4}CDs | NoViewDefinition ) $/x }
   $schema->sources
 ;
 
@@ -62,6 +62,44 @@ my @sources = grep
        }
 }
 
+{ 
+    {
+        package # hide from PAUSE
+            DBICTest::Schema::NoViewDefinition;
+
+        use base qw/DBICTest::BaseResult/;
+
+        __PACKAGE__->table_class('DBIx::Class::ResultSource::View');
+        __PACKAGE__->table('noviewdefinition');
+
+        1;
+    }
+
+    my $schema_invalid_view = $schema->clone;
+    $schema_invalid_view->register_class('NoViewDefinition', 'DBICTest::Schema::NoViewDefinition');
+
+    eval {
+           my $sqlt_schema = create_schema({ schema => $schema_invalid_view });
+    };
+    like($@, qr/view noviewdefinition is missing a view_definition/, "parser detects views with a view_definition");
+    
+#    my @views = $sqlt_schema->get_views;
+#
+#    # the following views are skipped:
+#    # Year1999CDs is virtual
+#    # NoViewDefinition has no view_definition
+#    is(scalar @views, 1, "number of views ok");
+#
+#    foreach my $view (@views) {
+#        ok($view->is_valid, "view " . $view->name . " is valid");
+#    }
+#
+#    my @expected_view_names = (qw/ year2000cds /);
+#    my @view_names = sort map { $_->name } @views;
+#
+#    is_deeply( @view_names, @expected_view_names, "all expected views included int SQL::Translator schema" );
+}
+
 done_testing;
 
 sub create_schema {
@@ -80,7 +118,7 @@ sub create_schema {
        my $sqlt = SQL::Translator->new( $sqltargs );
 
        $sqlt->parser('SQL::Translator::Parser::DBIx::Class');
-       return $sqlt->translate({ data => $schema }) or die $sqlt->error;
+       return $sqlt->translate({ data => $schema }) || die $sqlt->error;
 }
 
 sub get_table {