#!/usr/bin/perl -w use strict; use File::Spec; use lib '.', File::Spec->catdir( File::Spec->curdir, 't', 'lib' ); use Alzabo::Test::Utils; use Test::More; use Alzabo::Create; use Alzabo::Config; use Alzabo::Runtime; my @rdbms_names = Alzabo::Test::Utils->rdbms_names; unless (@rdbms_names) { plan skip_all => 'no test config provided'; exit; } plan tests => 25; Alzabo::Test::Utils->remove_all_schemas; # doesn't matter which RDBMS is used my $rdbms = $rdbms_names[0]; if ( $rdbms eq 'mysql' ) { # prevent subroutine redefinition warnings local $^W = 0; eval 'use Alzabo::SQLMaker::MySQL qw(:all)'; } elsif ( $rdbms eq 'pg' ) { local $^W = 0; eval 'use Alzabo::SQLMaker::PostgreSQL qw(:all)'; } Alzabo::Test::Utils->make_schema($rdbms); my $config = Alzabo::Test::Utils->test_config_for($rdbms); my $s = Alzabo::Runtime::Schema->load_from_file( name => $config->{schema_name} ); $s->connect( Alzabo::Test::Utils->connect_params_for($rdbms) ); my $department = $s->table('department')->insert( values => { name => 'D 1' } ); my $dep_id = $department->select('department_id'); { my $handle = $s->table('employee')->insert_handle ( columns => [ $s->table('employee')->columns( 'name', 'dep_id' ) ] ); foreach my $name ( qw( Faye Jet Maggie ) ) { my $row = $handle->insert( values => { name => $name, dep_id => $dep_id, } ); ok( $row->select('employee_id'), 'row has an employee id' ); is( $row->select('name'), $name, "name is $name" ); is( $row->select('dep_id'), $dep_id, "dep_id is $dep_id" ); is( $row->select('smell'), 'grotesque', 'smell is default value' ); } eval { $handle->insert( values => { name => 'Dave', dep_id => $dep_id, smell => 'geeky', } ) }; like( $@, qr/cannot provide a value.+\(smell\)/i, 'try to insert with a bad column' ); } { my $handle = $s->table('employee')->insert_handle ( columns => [ $s->table('employee')->columns( 'name', 'dep_id' ) ], values => { smell => LOWER('GOOD') }, ); my $row = $handle->insert( values => { name => 'Cecilia', dep_id => $dep_id, } ); ok( $row->select('employee_id'), 'row has an employee id' ); is( $row->select('name'), 'Cecilia', "name is Cecilia" ); is( $row->select('dep_id'), $dep_id, "dep_id is $dep_id" ); is( $row->select('smell'), 'good', 'smell is "good"' ); } { my $handle = $s->table('employee')->insert_handle ( columns => [ $s->table('employee')->columns( 'name', 'dep_id' ) ], values => { smell => 'good' }, ); my $row = $handle->insert( values => { name => 'Cecilia', dep_id => $dep_id, } ); ok( $row->select('employee_id'), 'row has an employee id' ); is( $row->select('name'), 'Cecilia', "name is Cecilia" ); is( $row->select('dep_id'), $dep_id, "dep_id is $dep_id" ); is( $row->select('smell'), 'good', 'smell is "good"' ); # override a static value $row = $handle->insert( values => { name => 'Cecilia', dep_id => $dep_id, smell => 'great', } ); ok( $row->select('employee_id'), 'row has an employee id' ); is( $row->select('name'), 'Cecilia', "name is Cecilia" ); is( $row->select('dep_id'), $dep_id, "dep_id is $dep_id" ); is( $row->select('smell'), 'great', 'smell is "great"' ); }