X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=t%2Fdb_colinfo.t;h=74dea75bee3c7b728d67ec2a01a2d855a3f8ae93;hb=79aa8d27d124d06bf88b2fc0487ae97563b98936;hp=c56fbf28497b2b954345059a1d6816474574885d;hpb=8ccc7518f5fd8c8bc0964b6ba61d60757b3b09e7;p=maypole.git diff --git a/t/db_colinfo.t b/t/db_colinfo.t index c56fbf2..74dea75 100755 --- a/t/db_colinfo.t +++ b/t/db_colinfo.t @@ -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)"); + } + } + };