]> git.decadent.org.uk Git - maypole.git/blobdiff - t/db_colinfo.t
moved ex to examples, fix to edit template
[maypole.git] / t / db_colinfo.t
index c56fbf28497b2b954345059a1d6816474574885d..74dea75bee3c7b728d67ec2a01a2d855a3f8ae93 100755 (executable)
@@ -1,8 +1,9 @@
 #!/usr/bin/perl -w
 use Test::More;
-use lib 'ex'; # Where BeerDB should live
+use Data::Dumper;
+use lib 'examples'; # Where BeerDB should live
 BEGIN {
-   plan tests => 35;
+   plan tests => 45;
 }
 
 $db            = 'test';
@@ -56,7 +57,7 @@ create table $table (
                  brewery   => 1, 
                  modified      => 1,
                  style         => 0,   
-                     name      => 0, 
+                 name      => 0, 
                  tasted    => 0,
 );
 
@@ -66,8 +67,7 @@ create table $table (
 sub run_method_tests { 
   ($class, $method,  %correct)  = @_;
   for $col (sort keys %correct) {
-#    warn "class : $class\n";
-#    warn "ISA : ", join(', ',@BeerDB::BeerTestmysql::ISA);
+
     $val = $class->$method($col);
 
     # Hacks for various val types
@@ -76,6 +76,7 @@ sub run_method_tests {
     my $correct = $correct{$col};
     like($val, qr/$correct/,"$method $col is $val");
   }
+
 }
 
 
@@ -83,7 +84,7 @@ sub run_method_tests {
 
 # Make test class 
 package BeerDB::BeerTestmysql;
-use base Maypole::Model::CDBI;
+use base qw(Maypole::Model::CDBI Class::DBI);
 package main;
 
 $DB_Class = 'BeerDB::BeerTestmysql';
@@ -117,15 +118,40 @@ SKIP: {
        $DB_Class->db_Main->do("drop table if exists $table;");
        $DB_Class->db_Main->do($sql);
        $DB_Class->table($table);
+       $DB_Class->columns(All => keys %correct_types);
+       $DB_Class->columns(Primary => 'id');
        run_method_tests($DB_Class,'column_type', %correct_types);
        run_method_tests($DB_Class,'column_default', %correct_defaults);
        run_method_tests($DB_Class,'column_nullable', %correct_nullables);
+
+
+       foreach my $colname ( @{$DB_Class->required_columns()} ) {
+           ok($correct_nullables{$colname} == 0,"nullable column $colname is required (via required_columns)");
+       }
+
+       foreach my $colname (keys %correct_nullables) {
+           ok( $DB_Class->column_required($colname) == !$correct_nullables{$colname}, "nullable column $colname is required (via column_required)" )
+       }
+
+       ok($DB_Class->required_columns([qw/score/]), 'set required column(s)');
+       
+       foreach my $colname ( @{$DB_Class->required_columns()} ) {
+           ok($correct_nullables{$colname} == 0 || $colname eq 'score',"nullable or required column $colname is required (via required_columns)" );
+       }
+       
+       foreach my $colname (keys %correct_nullables) {
+           if ($colname eq 'score') {
+               ok( $DB_Class->column_required($colname) == 0, "nullable column $colname is required (via column_required)");
+           } else {
+               ok( $DB_Class->column_required($colname) == !$correct_nullables{$colname}, "nullable column $colname is required (via column_required)");
+           }
+       }       
 };
 
 # SQLite  test
 
 package BeerDB::BeerTestsqlite;
-use base Maypole::Model::CDBI;
+use base qw(Maypole::Model::CDBI Class::DBI);
 package main;
 use Cwd;
 
@@ -152,6 +178,8 @@ $skip_howmany = 13;
 SKIP: {
        skip $skip_msg, $skip_howmany  if $err; 
        $DB_Class->table($table); 
+       $DB_Class->columns(All => keys %correct_types);
+       $DB_Class->columns(Primary => 'id');
 #use Data::Dumper; 
        run_method_tests($DB_Class,'column_type', %correct_types);
        # No support default
@@ -159,6 +187,21 @@ SKIP: {
        # I think sqlite driver allows everything to be nullable.
        #run_method_tests($DB_Class,'column_nullable', %correct_nullables);
 
+       ok($DB_Class->required_columns([qw/score style name tasted/]), 'set required column(s)');
+       
+
+       foreach my $colname ( @{$DB_Class->required_columns()} ) {
+           ok($correct_nullables{$colname} == 0 || $colname eq 'score',"nullable or required column $colname is required (via required_columns)" );
+       }
+       
+       foreach my $colname (keys %correct_nullables) {
+           if ($colname eq 'score') {
+               ok( $DB_Class->column_required($colname) == 0, "nullable column $colname is required (via column_required)");
+           } else {
+               ok( $DB_Class->column_required($colname) == !$correct_nullables{$colname}, "nullable column $colname is required (via column_required)");
+           }
+       }
+
 };