# $Id: cdbi.t 10 2005-11-15 22:19:45Z evdb $ # Copyright 2005 Edmund von der Burg # Distributed under the same license as Perl itself. use strict; use warnings; use lib qw( lib t ); use Data::Dumper; use Test::More 'no_plan'; # Check that the module can be used. use_ok 'Class::DBI::DFV'; use_ok 'Local::Test'; { # create the table in the database. # Silence the warnings. local $SIG{__WARN__} = sub { 1 }; ok( Local::Test->db_Main->do( "create table cdbi_tests ( " . " id integer primary key, " . " val_unique text not null unique," . " val_optional text, " . " dup_a text, " . " dup_b text " . "); " ), "Created the test table." ); } { # Create a valid test object. my $test = Local::Test->create( { val_unique => 'test', val_optional => 'opt test' } ); ok $test, "Created a test object"; is $test->val_unique, 'test', "check unique"; is $test->val_optional, 'opt test', "check optional"; # Change the value and check that it is trimmed. ok $test->val_optional(' optional '), "set optional"; is $test->val_optional, 'optional', "check optional"; # Update the row and save it. ok $test->update, "update to save the new value"; is $test->val_unique, 'test', "check unique"; is $test->val_optional, 'optional', "check optional"; } { # Try to create another object with duplicated val_unique ok !eval { Local::Test->create( { val_unique => 'test' } ); 1; }, "Check to see that it is not possible to duplicate value"; # See if there is an error message. is( Local::Test->dfv_results->msgs->{val_unique}, 'validation error: duplicate', "check that the message is correct" ); } { # Test that duplicate columns are checked correctly. for my $A ( 'A', 'B' ) { for my $B ( 'A', 'B' ) { my $id = $A . $B; my $object = Local::Test->create( { val_unique => $id, dup_a => $A, dup_b => $B } ); # warn $object->id; ok $object, "create dup check '$id'"; #ok Local::Test->retrieve( val_unique => 'AA' ), # "check that the entry is there."; } } # check that the duplicate that we hope to access is in DB. ok Local::Test->retrieve( dup_a => 'A', dup_b => 'A' ), "check that the entry is there."; # Now try to create a duplicate; ok( !eval { Local::Test->create( { val_unique => 'duplicate test', dup_a => 'A', dup_b => 'A' } ); }, "try to create a duplicate over several rows" ); #warn Dumper Local::Test->db_Main->selectall_hashref( "select * from cdbi_tests", 'val_unique' ); } # Drop the table. ok( Local::Test->db_Main->do("drop table cdbi_tests"), "drop the test table" ); 1;