Some TODO test revisions prompted by RT#59565
[dbsrgits/DBIx-Class.git] / t / 64db.t
index 47aff46..b207a29 100644 (file)
--- a/t/64db.t
+++ b/t/64db.t
@@ -1,5 +1,5 @@
 use strict;
-use warnings;  
+use warnings;
 
 use Test::More;
 use lib qw(t/lib);
@@ -7,7 +7,7 @@ use DBICTest;
 
 my $schema = DBICTest->init_schema();
 
-plan tests => 3;
+plan tests => 4;
 
 # add some rows inside a transaction and commit it
 # XXX: Is storage->dbh the only way to get a dbh?
@@ -34,28 +34,67 @@ $schema->storage->txn_rollback;
 ($artist) = $schema->resultset("Artist")->search( artistid => 25 );
 is($artist, undef, "Rollback ok");
 
-my $type_info = $schema->storage->columns_info_for('artist');
-
-# I know this is gross but SQLite reports the size differently from release
-# to release. At least this way the test still passes.
-
-delete $type_info->{artistid}{size};
-delete $type_info->{name}{size};
-delete $type_info->{agent}{size};
-
-my $test_type_info = {
-    'artistid' => {
-        'data_type' => 'INTEGER',
-        'is_nullable' => 0,
+is_deeply (
+  get_storage_column_info ($schema->storage, 'collection', qw/size is_nullable/),
+  {
+    collectionid => {
+      data_type => 'INTEGER',
     },
-    'name' => {
-        'data_type' => 'varchar',
-        'is_nullable' => 0,
+    name => {
+      data_type => 'varchar',
     },
-    'agent' => {
-        'data_type' => 'integer',
-        'is_nullable' => 0,
+  },
+  'Correctly retrieve column info (no size or is_nullable)'
+);
+
+{
+  is_deeply (
+    get_storage_column_info ($schema->storage, 'artist', qw/size/),
+    {
+      'artistid' => {
+          'data_type' => 'INTEGER',
+          'is_nullable' => 0,
+      },
+      'name' => {
+          'data_type' => 'varchar',
+          'is_nullable' => 1,
+      },
+      'rank' => {
+          'data_type' => 'integer',
+          'is_nullable' => 0,
+          'default_value' => '13',
+      },
+      'charfield' => {
+          'data_type' => 'char',
+          'is_nullable' => 1,
+      },
     },
+    'Correctly retrieve column info (mixed null and non-null columns)'
+  );
 };
-is_deeply($type_info, $test_type_info, 'columns_info_for - column data types');
 
+
+# Depending on test we need to strip away certain column info.
+#  - SQLite is known to report the size differently from release to release
+#  - Current DBD::SQLite versions do not implement NULLABLE
+#  - Some SQLite releases report stuff that isn't there as undef
+
+sub get_storage_column_info {
+  my ($storage, $table, @ignore) = @_;
+
+  my $type_info = $storage->columns_info_for($table);
+
+  for my $col (keys %$type_info) {
+    for my $type (keys %{$type_info->{$col}}) {
+      if (
+        grep { $type eq $_ } (@ignore)
+          or
+        not defined $type_info->{$col}{$type}
+      ) {
+        delete $type_info->{$col}{$type};
+      }
+    }
+  }
+
+  return $type_info;
+}