[Jifty-commit] r3967 - in Jifty-DBI/trunk: lib/Jifty/DBI/Record t
jifty-commit at lists.jifty.org
jifty-commit at lists.jifty.org
Fri Aug 24 12:43:47 EDT 2007
Author: sterling
Date: Fri Aug 24 12:43:46 2007
New Revision: 3967
Added:
Jifty-DBI/trunk/t/18triggers.t
Modified:
Jifty-DBI/trunk/ (props changed)
Jifty-DBI/trunk/lib/Jifty/DBI/Record/Plugin.pm
Log:
r8937 at riddle: andrew | 2007-08-24 11:42:00 -0500
Added tests and debugged register_triggers_for_column on record plugins.
Modified: Jifty-DBI/trunk/lib/Jifty/DBI/Record/Plugin.pm
==============================================================================
--- Jifty-DBI/trunk/lib/Jifty/DBI/Record/Plugin.pm (original)
+++ Jifty-DBI/trunk/lib/Jifty/DBI/Record/Plugin.pm Fri Aug 24 12:43:46 2007
@@ -142,7 +142,7 @@
}
if (my $triggers_for_column = $self->can('register_triggers_for_column') ) {
- for my $column (map { $_->name } @{ $self->columns }) {
+ for my $column (map { $_->name } $caller->columns) {
$triggers_for_column->($caller, $column)
}
}
Added: Jifty-DBI/trunk/t/18triggers.t
==============================================================================
--- (empty file)
+++ Jifty-DBI/trunk/t/18triggers.t Fri Aug 24 12:43:46 2007
@@ -0,0 +1,200 @@
+#!/usr/bin/env perl -w
+
+use strict;
+use warnings;
+use File::Spec;
+use Test::More;
+BEGIN { require "t/utils.pl" }
+our (@available_drivers);
+
+use constant TESTS_PER_DRIVER => 40;
+
+my $total = scalar(@available_drivers) * TESTS_PER_DRIVER;
+plan tests => $total;
+
+foreach my $d ( @available_drivers ) {
+SKIP: {
+ unless (has_schema('TestApp::Address', $d)) {
+ skip "No schema for '$d' driver", TESTS_PER_DRIVER;
+ }
+ unless (should_test($d)) {
+ skip "ENV is not defined for driver '$d'", TESTS_PER_DRIVER;
+ }
+
+ my $handle = get_handle($d);
+ connect_handle($handle);
+ isa_ok($handle->dbh, 'DBI::db');
+
+ {my $ret = init_schema('TestApp::Address', $handle);
+ isa_ok($ret, 'DBI::st', "Inserted the schema. got a statement handle back");}
+
+ my $rec = TestApp::Address->new( handle => $handle );
+ isa_ok($rec, 'Jifty::DBI::Record');
+
+ my $rid = $rec->create(
+ name => 'Sterling',
+ phone => '123 456 7890',
+ );
+ ok($rid, 'created a record');
+ $rec->load($rid);
+ ok($rec->id, 'loaded a record');
+
+ $rec->set_name('zostay');
+ $rec->set_phone('098 765 4321');
+
+ my $ret = $rec->delete;
+ ok($ret, 'deleted a record');
+};
+}
+
+package TestApp::TestMixin;
+use base qw/ Jifty::DBI::Record::Plugin /;
+
+use Jifty::DBI::Schema;
+use Jifty::DBI::Record schema { };
+
+use Test::More;
+
+sub register_triggers {
+ my $self = shift;
+
+ $self->add_trigger(before_create => sub {
+ my $self = shift;
+ my $columns = shift;
+ isa_ok($self, 'TestApp::Address');
+ is(ref $columns, 'HASH', 'arg is a hash');
+ is(scalar(keys %$columns), 2, 'arg has 2 keys');
+ is($columns->{name}, 'Sterling', 'name is Sterling');
+ is($columns->{phone}, '123 456 7890', 'phone is 123 456 7890');
+ });
+ $self->add_trigger(after_create => sub {
+ my $self = shift;
+ my $ret = shift;
+ isa_ok($self, 'TestApp::Address');
+ is(ref $ret, 'SCALAR', 'arg is a scalar ref');
+ ok($$ret, 'create was sucessful');
+ });
+ $self->add_trigger(before_delete => sub {
+ my $self = shift;
+ isa_ok($self, 'TestApp::Address');
+ });
+ $self->add_trigger(after_delete => sub {
+ my $self = shift;
+ my $ret = shift;
+ isa_ok($self, 'TestApp::Address');
+ is(ref $ret, 'SCALAR', 'arg is a scalar ref');
+ ok($$ret, 'delete was successful');
+ });
+}
+
+sub register_triggers_for_column {
+ my $self = shift;
+ my $column = shift;
+
+ my $value = $column eq 'name' ? 'zostay'
+ : '098 765 4321';
+
+ $self->add_trigger('before_set_'.$column => sub {
+ my $self = shift;
+ my $arg = shift;
+ isa_ok($self, 'TestApp::Address');
+ is(ref $arg, 'HASH', 'arg is a hash');
+ is(scalar(keys %$arg), 3, 'hash has 2 keys');
+ is($arg->{column}, $column, "column arg is $column");
+ is($arg->{value}, $value, "value arg is $value");
+ is($arg->{is_sql_function}, undef, 'is_sql_function is undef');
+ });
+ $self->add_trigger('after_set_'.$column => sub {
+ my $self = shift;
+ my $arg = shift;
+ isa_ok($self, 'TestApp::Address');
+ is(ref $arg, 'HASH', 'arg is a hash');
+ is(scalar(keys %$arg), 2, 'hash has 2 keys');
+ is($arg->{column}, $column, "column arg is $column");
+ is($arg->{value}, $value, "value arg is $value");
+ });
+}
+
+1;
+
+package TestApp::Address;
+use base qw/ Jifty::DBI::Record /;
+
+sub schema_mysql {
+<<EOF;
+CREATE TEMPORARY table addresses (
+ id integer AUTO_INCREMENT,
+ name varchar(36),
+ phone varchar(18),
+ address varchar(50),
+ employee_id int(8),
+ PRIMARY KEY (id))
+EOF
+
+}
+
+sub schema_pg {
+<<EOF;
+CREATE TEMPORARY table addresses (
+ id serial PRIMARY KEY,
+ name varchar,
+ phone varchar,
+ address varchar,
+ employee_id integer
+)
+EOF
+
+}
+
+sub schema_sqlite {
+
+<<EOF;
+CREATE table addresses (
+ id integer primary key,
+ name varchar(36),
+ phone varchar(18),
+ address varchar(50),
+ employee_id int(8))
+EOF
+
+}
+
+sub schema_oracle { [
+ "CREATE SEQUENCE addresses_seq",
+ "CREATE TABLE addresses (
+ id integer CONSTRAINT address_key PRIMARY KEY,
+ Name varchar(36),
+ Phone varchar(18),
+ EmployeeId integer
+ )",
+] }
+
+sub cleanup_schema_oracle { [
+ "DROP SEQUENCE addresses_seq",
+ "DROP TABLE addresses",
+] }
+
+1;
+
+BEGIN {
+use Jifty::DBI::Schema;
+use Jifty::DBI::Record schema {
+
+column name =>
+ till 999,
+ type is 'varchar(14)';
+
+column phone =>
+ type is 'varchar(18)';
+
+column address =>
+ type is 'varchar(50)',
+ default is '';
+
+column employee_id =>
+ type is 'int(8)';
+};
+TestApp::TestMixin->import();
+}
+1;
+
More information about the Jifty-commit
mailing list