X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F64db.t;h=d1284f8803cbaea3a413d58e51e2fe184f882599;hb=5815ffb0e34dcd74af49581f65e1d5aa71779a6b;hp=3a761e453171cb47b66372af80e12266ef3599c6;hpb=39da2a2bbc09419f5c6ed79eaf9f463982d4ad83;p=dbsrgits%2FDBIx-Class.git diff --git a/t/64db.t b/t/64db.t index 3a761e4..d1284f8 100644 --- 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,13 +7,13 @@ 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? $schema->storage->txn_begin; for (10..15) { - $schema->resultset("Artist")->create( { + $schema->resultset("Artist")->create( { artistid => $_, name => "artist number $_", } ); @@ -31,30 +31,70 @@ for (21..30) { } ); } $schema->storage->txn_rollback; -($artist) = $schema->resultset("Artist")->search( artistid => 25 ); +($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->{$_}{size} for keys %$type_info; - - -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', }, - 'rank' => { - '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; +}