From: <chr...@us...> - 2006-05-03 19:30:46
|
Revision: 848 Author: chromatic Date: 2006-05-03 12:30:33 -0700 (Wed, 03 May 2006) ViewCVS: http://svn.sourceforge.net/everydevel/?rev=848&view=rev Log Message: ----------- r16495@windwheel: chromatic | 2006-05-03 12:30:13 -0700 Ported dbtable tests to Test::Class. Modified Paths: -------------- trunk/ebase/MANIFEST trunk/ebase/lib/Everything/Node/Test/node.pm trunk/ebase/lib/Everything/Node/dbtable.pm trunk/ebase/t/Node/dbtable.t Added Paths: ----------- trunk/ebase/lib/Everything/Node/Test/dbtable.pm Property Changed: ---------------- trunk/ebase/ Property changes on: trunk/ebase ___________________________________________________________________ Name: svk:merge - a6810612-c0f9-0310-9d3e-a9e4af8c5745:/ebase/offline:16493 + a6810612-c0f9-0310-9d3e-a9e4af8c5745:/ebase/offline:16495 Modified: trunk/ebase/MANIFEST =================================================================== --- trunk/ebase/MANIFEST 2006-05-03 00:14:22 UTC (rev 847) +++ trunk/ebase/MANIFEST 2006-05-03 19:30:33 UTC (rev 848) @@ -87,6 +87,7 @@ lib/Everything/Node/user.pm lib/Everything/Node/usergroup.pm lib/Everything/Node/workspace.pm +lib/Everything/Node/Test/dbtable.pm lib/Everything/Node/Test/node.pm lib/Everything/Node/Test/nodetype.pm lib/Everything/Node/Test/setting.pm Added: trunk/ebase/lib/Everything/Node/Test/dbtable.pm =================================================================== --- trunk/ebase/lib/Everything/Node/Test/dbtable.pm (rev 0) +++ trunk/ebase/lib/Everything/Node/Test/dbtable.pm 2006-05-03 19:30:33 UTC (rev 848) @@ -0,0 +1,124 @@ +package Everything::Node::Test::dbtable; + +use strict; +use warnings; + +use base 'Everything::Node::Test::node'; + +use SUPER; +use Test::More; + +*Everything::Node::dbtable::SUPER = \&UNIVERSAL::SUPER; + +sub node_class { 'Everything::Node::dbtable' }; + +sub test_insert :Test( 8 ) +{ + my $self = shift; + my $node = $self->{node}; + my $db = $self->{mock_db}; + + $node->{title} = 'foo'; + $node->set_series( SUPER => -1, 0, 1 ); + $db->set_true( 'createNodeTable' ); + + my $result = $node->insert( 'user' ); + my ($method, $args) = $node->next_call(); + + isnt( $db->next_call(), 'createNodeTable', + 'insert() should not create node table unless SUPER() succeeds' ); + is( $result, -1, '... and should return result of SUPER() call' ); + is( $method, 'SUPER', '... so should call SUPER()' ); + is( $args->[1], 'user', '... passing user argument' ); + + $result = $node->insert(); + isnt( $db->next_call(), 'createNodeTable', + '... nor should it create table if SUPER() returns false' ); + + $result = $node->insert(); + is( $result, 1, '... but should return node_id if insert succeeds' ); + + ($method, $args) = $db->next_call(); + is( $method, 'createNodeTable', '... creating table' ); + is( $args->[1], 'foo', '... named after the node' ); +} + +sub test_insert_access :Test( +0 ) +{ + my $self = shift; + my $db = $self->{mock_db}; + $db->set_true( -createNodeTable ); + $self->SUPER(); +} + +sub test_insert_restrict_dupes :Test( +0 ) +{ + my $self = shift; + my $db = $self->{mock_db}; + $db->set_true( -createNodeTable ); + $self->SUPER(); +} + +sub test_insert_restrictions :Test( +0 ) +{ + my $self = shift; + my $db = $self->{mock_db}; + $db->set_true( -createNodeTable ); + $self->SUPER(); +} + +sub test_nuke :Test( 8 ) +{ + my $self = shift; + my $node = $self->{node}; + my $db = $self->{mock_db}; + + $node->{title} = 'foo'; + $node->set_series( SUPER => -1, 0, 1 ); + $db->set_true( 'dropNodeTable' ); + + my $result = $node->nuke( 'user' ); + my ($method, $args) = $node->next_call(); + + isnt( $db->next_call(), 'dropNodeTable', + 'nuke() should not drop node table unless SUPER() succeeds' ); + is( $result, -1, '... and should return result of SUPER() call' ); + is( $method, 'SUPER', '... so should call SUPER()' ); + is( $args->[1], 'user', '... passing user argument' ); + + $result = $node->nuke(); + isnt( $db->next_call(), 'dropNodeTable', + '... nor should it drop table if SUPER() returns false' ); + + $result = $node->nuke(); + is( $result, 1, '... but should return node_id if nuke succeeds' ); + + ($method, $args) = $db->next_call(); + is( $method, 'dropNodeTable', '... dropping table' ); + is( $args->[1], 'foo', '... named after the node' ); +} + +sub test_restrict_title :Test( 8 ) +{ + my $self = shift; + my $node = $self->{node}; + + $node->{title} = 'longblob'; + ok( ! $node->restrictTitle(), + 'restrictTitle() should return false if title is a db reserved word' ); + like( $self->{errors}[0][0], qr/reserved word/, '.. and should log error' ); + + $node->{title} = 'x' x 62; + ok( ! $node->restrictTitle(), '... or if title exceeds 61 characters' ); + + like( $self->{errors}[1][0], qr/exceed 61/, '.. and should log error' ); + + $node->{title} = 'a b'; + ok( ! $node->restrictTitle(), + '... should fail if title contains non-word characters' ); + + like( $self->{errors}[2][0], qr/invalid characters/, + '.. and should log error' ); +} + +1; Property changes on: trunk/ebase/lib/Everything/Node/Test/dbtable.pm ___________________________________________________________________ Name: svn:mime-type + text/plain; charset=UTF-8 Name: svn:eol-style + native Modified: trunk/ebase/lib/Everything/Node/Test/node.pm =================================================================== --- trunk/ebase/lib/Everything/Node/Test/node.pm 2006-05-03 00:14:22 UTC (rev 847) +++ trunk/ebase/lib/Everything/Node/Test/node.pm 2006-05-03 19:30:33 UTC (rev 848) @@ -137,7 +137,7 @@ $db->set_series( -sqlSelect => 1, 0 ) ->set_always( -getFields => 'none' ) ->set_always( -now => '' ) - ->set_always( -getNode => undef ) + ->set_series( -getNode => undef, { DB => $db } ) ->set_true( 'sqlInsert' ) ->set_always( -lastValue => 100 ); Modified: trunk/ebase/lib/Everything/Node/dbtable.pm =================================================================== --- trunk/ebase/lib/Everything/Node/dbtable.pm 2006-05-03 00:14:22 UTC (rev 847) +++ trunk/ebase/lib/Everything/Node/dbtable.pm 2006-05-03 19:30:33 UTC (rev 848) @@ -27,7 +27,7 @@ { my ( $this, $USER ) = @_; - my $result = $this->SUPER(); + my $result = $this->SUPER( $USER ); $this->{DB}->createNodeTable( $this->{title} ) if $result > 0; @@ -119,7 +119,7 @@ sub nuke { my ( $this, $USER ) = @_; - my $result = $this->SUPER(); + my $result = $this->SUPER( $USER ); $this->{DB}->dropNodeTable( $this->{title} ) if $result > 0; Modified: trunk/ebase/t/Node/dbtable.t =================================================================== --- trunk/ebase/t/Node/dbtable.t 2006-05-03 00:14:22 UTC (rev 847) +++ trunk/ebase/t/Node/dbtable.t 2006-05-03 19:30:33 UTC (rev 848) @@ -1,108 +1,4 @@ -#!/usr/bin/perl +#! perl -use strict; -use warnings; - -BEGIN -{ - chdir 't' if -d 't'; - use lib 'lib'; -} - -use vars qw( $errors $AUTOLOAD ); - -use FakeNode; -use Test::More tests => 19; - -my $module = 'Everything::Node::dbtable'; -use_ok( $module ) or exit; - -ok( $module->isa( 'Everything::Node::node' ), 'dbtable should extend node' ); - -can_ok( $module, 'dbtables' ); -my @tables = $module->dbtables(); -is_deeply( \@tables, [ 'node' ], 'dbtables() should return node tables' ); - -local *Everything::logErrors; - -*Everything::logErrors = sub -{ - $main::errors = shift; -}; - -my $node = FakeNode->new(); - -# insert() -$node->{title} = 'foo'; -$node->{_subs} = { - SUPER => [ -1, 0, 1 ], - restrictTitle => [ 0, (1) x 4 ], -}; -$node->{DB} = $node; - -$node->{title} = 'afin3tit1e'; - -$node->{_calls} = []; -is( insert($node), -1, '... should return result of SUPER() call' ); -is( join( ' ', @{ $node->{_calls}[0] } ), - 'SUPER', '... and should not call createNodeTable() if SUPER() fails' ); - -$node->{_calls} = []; -insert($node); -is( scalar @{ $node->{_calls} }, - 1, '... or if SUPER() returns an invalid node_id' ); -is( insert($node), 1, '... should return node_id if insert() succeeds' ); -is( - join( ' ', @{ pop @{ $node->{_calls} } } ), - 'createNodeTable afin3tit1e', - '... and should call createNodeTable() if it succeeds' -); - -# nuke() -$node->{_subs}{SUPER} = [ -1, 0, 1 ]; -is( nuke($node), -1, 'nuke() should return result of SUPER() call' ); -is( join( ' ', @{ pop @{ $node->{_calls} } } ), - 'SUPER', '... and should not call dropNodeTable() if SUPER() fails' ); - -nuke($node); -is( join( ' ', @{ pop @{ $node->{_calls} } } ), - 'SUPER', '... or if SUPER() returns an invalid node_id' ); -nuke($node); -is( - join( ' ', @{ pop @{ $node->{_calls} } } ), - 'dropNodeTable afin3tit1e', - '... but should call dropNodeTable() if it succeeds' -); - -# restrictTitle() -ok( !restrictTitle( { foo => 1 } ), - 'restrictTitle() with no title field should return false' ); -ok( - !restrictTitle( { title => 'longblob' } ), - '... or if title is a db reserved word' -); - -ok( - !restrictTitle( { title => 'x' x 62 } ), - '... or if title exceeds 61 characters' -); -like( $errors, qr/exceed 61/, '.. and should log error' ); - -ok( !restrictTitle( { title => 'a b' } ), - '... should fail if title contains non-word characters' ); -like( $errors, qr/invalid characters/, '.. and should log error' ); - -sub AUTOLOAD -{ - return if $AUTOLOAD =~ /DESTROY$/; - - no strict 'refs'; - $AUTOLOAD =~ s/^main:://; - - my $sub = "Everything::Node::dbtable::$AUTOLOAD"; - if ( defined &{$sub} ) - { - *{$AUTOLOAD} = \&{$sub}; - goto &{$sub}; - } -} +use Everything::Node::Test::dbtable; +Everything::Node::Test::dbtable->runtests(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |