Changeset 2523

Show
Ignore:
Timestamp:
06/06/08 16:37:24 (6 months ago)
Author:
mpaschal
Message:

Test drop_column_sql, add_column_sql, and fix_class
BugzID: 79950

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/release-39/t/ddl-tests.pl

    r2513 r2523  
    8989 
    9090 
     91package Ddltest::Fixable; 
     92use base qw( MT::Object ); 
     93 
     94__PACKAGE__->install_properties({ 
     95    column_defs => { 
     96        id  => 'integer not null auto_increment', 
     97        foo => 'string(10)', 
     98        bar => 'string(10)', 
     99        baz => 'string(10)', 
     100    }, 
     101    datasource  => 'ddltest_fixable', 
     102    primary_key => 'id', 
     103    cacheable   => 0, 
     104}); 
     105 
     106 
    91107package Test::DDL; 
    92108use base qw( Test::Class MT::Test ); 
     
    270286} 
    271287 
     288sub fixable : Tests(12) { 
     289    my $self = shift; 
     290 
     291    my $driver    = MT::Object->dbi_driver; 
     292    my $dbh       = $driver->rw_handle; 
     293    my $ddl_class = $driver->dbd->ddl_class; 
     294 
     295    eval { 
     296        if ($driver->table_exists('Ddltest::Fixable')) { 
     297            my $sql = $driver->dbd->ddl_class->drop_table_sql('Ddltest::Fixable'); 
     298            $driver->rw_handle->do($sql); 
     299        } 
     300    }; 
     301    eval { 
     302        my $sql = $ddl_class->create_table_sql('Ddltest::Fixable'); 
     303        $dbh->do($sql); 
     304    }; 
     305    for my $i (1..5) { 
     306        my $obj = Ddltest::Fixable->new; 
     307        $obj->foo($i); 
     308        $obj->save; 
     309    } 
     310 
     311    my $defs = $ddl_class->column_defs('Ddltest::Fixable'); 
     312    ok($defs->{baz}, 'Ddltest::Fixable table has baz column after creation'); 
     313 
     314    my $sql = $ddl_class->drop_column_sql('Ddltest::Fixable', 'baz'); 
     315    ok($sql, 'Ddltest::Fixable can have column dropping sql'); 
     316    my $res = $dbh->do($sql); 
     317    ok($res, 'Ddltest::Fixable could have its column dropped'); 
     318 
     319    { 
     320        local Ddltest::Fixable->properties->{column_defs}->{borf} = 'string(10)'; 
     321        $sql = $ddl_class->add_column_sql('Ddltest::Fixable', 'borf'); 
     322        ok($sql, 'Ddltest::Fixable can have column adding sql'); 
     323        $res = $dbh->do($sql); 
     324        ok($res, 'Ddltest::Fixable could have a column added'); 
     325        diag(($dbh->errstr || $DBI::errstr) . "( sql $sql)") if !$res; 
     326    } 
     327 
     328    $defs = $ddl_class->column_defs('Ddltest::Fixable'); 
     329    ok(!$defs->{baz},  'Ddltest::Fixable did indeed have a column dropped'); 
     330    ok( $defs->{borf}, 'Ddltest::Fixable did indeed have a column added'); 
     331 
     332    STMT: for my $stmt ($ddl_class->fix_class('Ddltest::Fixable')) { 
     333        $res = $dbh->do($stmt); 
     334        if (!$res) { 
     335            diag($dbh->errstr || $DBI::errstr); 
     336            last STMT; 
     337        } 
     338    } 
     339    ok($res, q{All Ddltest::Fixable's table-fixing statements were performed}); 
     340    $defs = $ddl_class->column_defs('Ddltest::Fixable'); 
     341    ok( $defs->{baz},  'Ddltest::Fixable regrew its dropped column after a fix_class'); 
     342    ok(!$defs->{borf}, 'Ddltest::Fixable lost its extra column after a fix_class'); 
     343 
     344    my @objs = Ddltest::Fixable->load(); 
     345    is(scalar @objs, 5, 'There are still 5 Ddltest::Fixable records'); 
     346    is_deeply([ sort map { $_->foo } @objs ], [ 1..5 ], 'Ddltest::Fixable records survived with values intact'); 
     347} 
     348 
    272349sub _00_drop_table_test : Test(shutdown => 3) { 
    273350    my $self = shift;