]> git.decadent.org.uk Git - maypole.git/commitdiff
fixed mysql tests a bit - checks for and creates test db if needed, type matching...
authorAaron Trevena <aaron.trevena@gmail.com>
Fri, 14 Jul 2006 10:34:18 +0000 (10:34 +0000)
committerAaron Trevena <aaron.trevena@gmail.com>
Fri, 14 Jul 2006 10:34:18 +0000 (10:34 +0000)
git-svn-id: http://svn.maypole.perl.org/Maypole/trunk@507 48953598-375a-da11-a14b-00016c27c3ee

MANIFEST
t/db_colinfo.t
t/maypole.t

index 54532075909fa5b5c62c65a15da3cc907fe2f03c..03fec8eab825a6401abf400d9165a7f74d1d9505 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -49,6 +49,7 @@ t/constants.t
 t/headers.t
 t/maypole.t
 t/pathtools.t
+t/db_colinfo.t
 t/templates/custom/classdata
 t/templates/custom/frontpage
 t/templates/custom/list
index 0c19556b6c732ad360a58556e82722a06051bb1b..cb1b4361e1f91c0b6629a6a517b2c7390097cba8 100755 (executable)
@@ -3,11 +3,10 @@ use Test::More;
 use lib 'ex'; # Where BeerDB should live
 BEGIN {
    plan tests => 26;
-    
 }
 
 $db            = 'test';
-$dbuser        = 'test'; 
+$dbuser        = 'test';
 $dbpasswd   = '';
 $table = "beer_test";
 $sql = "
@@ -18,64 +17,79 @@ create table $table (
     score smallint(2),
     price decimal(3,2),
     abv varchar(10),
-       image blob, 
+    image blob,
     notes text,
-    tasted date  NOT NULL,
+    tasted date NOT NULL,
     created timestamp default CURRENT_TIMESTAMP,
-       modified datetime  default NULL,
+    modified datetime  default NULL,
     style mediumint(8) default 1,
     brewery integer default NULL
 );";
 
 # correct column types and the ones we test
 %correct_types = (
-    id                         =>      'int(11)', # mysql 4.1 stores this for 'integer' 
-       brewery         =>      'int(11)',
-    style              =>      'mediumint(8)',
-    name               =>      'char(30)',
-    url                =>  'varchar(120)',
-    tasted             =>      'date',
-    created    =>      'timestamp',
-       modified        =>      'datetime',
-    score              =>      'smallint(2)',
-    price              =>      'decimal(3,2)',
-    abv                =>      'varchar(10)',
-    notes              => 'text',
-       image           =>      'blob',
+                 id            =>      'int', # mysql 4.1 stores this for 'integer' 
+                 brewery       =>      'int',
+                 style         =>      'int',
+                 name          =>      'char',
+                 url           =>      'varchar',
+                 tasted        =>      'date',
+                 created       =>      '(time|time)',
+                 modified      =>      '(date|time)',
+                 score         =>      'smallint',
+                 price         =>      'decimal',
+                 abv           =>      'varchar',
+                 notes         =>      '(text|blob)',
+                 image         =>      'blob',
 );
 
 # Runs tests on column_* method of $class using %correct data hash  
 # usage: run_method_tests ($class, $method, %correct);
 sub run_method_tests { 
-       ($class, $method,  %correct)  = @_;
-       for $col (sort keys %correct) {
-               $val = $class->$method($col);
+  ($class, $method,  %correct)  = @_;
+  for $col (sort keys %correct) {
+    $val = $class->$method($col);
 
-               # Hacks for various val types
-               $val = lc $val if $method eq 'column_type';                             
+    # Hacks for various val types
+    $val = lc $val if $method eq 'column_type';
 
-               is($val,  $correct{$col},"$method $col is $val"); 
-       }
+    my $correct = $correct{$col};
+    like($val, qr/$correct/,"$method $col is $val");
+  }
 }
 
-                
+
 # mysql test
 
 # Make test class 
 package BeerDB::BeerTestmysql;
 use base Maypole::Model::CDBI;
-
 package main;
 
 $DB_Class = 'BeerDB::BeerTestmysql';
-eval {$DB_Class->connection("dbi:mysql:$db", "$dbuser", "$dbpasswd"); };
-$err = $@;
-$skip_msg = "Could not connect to MySQL using database 'test', username 'test', and password ''. Check privelages and try again.";
+
+my $drh = DBI->install_driver("mysql");
+my %databases = map { $_ => 1 } $drh->func('localhost', 3306, '_ListDBs');
+
+unless ($databases{test}) {
+  my $rc = $drh->func("createdb", 'test', 'admin');
+}
+
+%databases = map { $_ => 1 } $drh->func('localhost', 3306, '_ListDBs');
+
+if ($databases{test}) {
+  eval {$DB_Class->connection("dbi:mysql:$db", "$dbuser", "$dbpasswd"); };
+  $err = $@;
+  $skip_msg = "Could not connect to MySQL using database 'test', username 'test', and password ''. Check privileges and try again.";
+} else {
+  $err = 'no test db';
+  $skip_msg = "Could not connect to MySQL using database 'test' as it doesn't exist, sorry";
+}
+
 $skip_howmany = 13;
 
 SKIP: {
-       skip $skip_msg, $skip_howmany  if $err; 
+       skip $skip_msg, $skip_howmany  if $err;
        $DB_Class->db_Main->do("drop table if exists $table;");
        $DB_Class->db_Main->do($sql);
        $DB_Class->table($table); 
index 0af1debfb5c0ad91813e1dd657e29c01bbde7405..75924536f8cbe616e6e873170b5efc8625c5341a 100755 (executable)
@@ -306,10 +306,9 @@ warn "Tests 49 to 53\n\n";
 # is_model_applicable()
 {
 TODO: {
-        local $TODO = "test needs fixing";
-
+    local $TODO = "test needs fixing";
+    $r->config->ok_tables([qw(one two)]);
     $r->config->display_tables([qw(one two)]);
-    $r->config->ok_tables(undef);
     $r->model_class($table_class);
     $r->table('one');
     $r->action('unittest');
@@ -317,18 +316,18 @@ TODO: {
     $mock_model->mock('is_public', sub {0});
     my $true_false = $r->is_model_applicable;
     is($true_false, 0,
-    '... returns 0 unless model_class->is_public(action)');
+       '... returns 0 unless model_class->is_public(action)');
     $mock_model->mock('is_public', sub {$is_public = \@_; 1});
     $true_false = $r->is_model_applicable;
     is($true_false, 1, '... returns 1 if table is in ok_tables');
     is_deeply($is_public, [$r->model_class, 'unittest'],
-            '... calls model_class->is_public with request action');
+             '... calls model_class->is_public with request action');
     is_deeply($r->config->ok_tables, {one => 1, two => 1},
-            '... config->ok_tables defaults to config->display_tables');
+             '... config->ok_tables defaults to config->display_tables');
     delete $r->config->ok_tables->{one};
     $true_false = $r->is_model_applicable;
     is($true_false, 0, '... returns 0 unless $r->table is in ok_tables');
-    }
+  }
 }
 
 # Tests 54 - 58