#!/usr/bin/perl -w
use Test::More;
-use lib 'ex'; # Where BeerDB should live
+use Data::Dumper;
+use DBI;
+use lib 'examples'; # Where BeerDB should live
BEGIN {
- plan tests => 35;
+ my $drh = eval {
+ DBI->install_driver("mysql");
+ my @databases = DBI->data_sources("mysql");
+ die "couldn't connect to mysql" unless (@databases);
+ };
+ warn "error : $@ \n" if ($@);
+ my $testcount = ($@) ? 45 : 65 ;
+ plan tests => $testcount;
}
$db = 'test';
brewery => 1,
modified => 1,
style => 0,
- name => 0,
+ name => 0,
tasted => 0,
);
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
my $correct = $correct{$col};
like($val, qr/$correct/,"$method $col is $val");
}
+
}
# 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';
$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/style name tasted 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;
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
# 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)");
+ }
+ }
+
};