[Jifty-commit] r5620 - in Jifty-DBI/branches/tisql: t/tisql

Jifty commits jifty-commit at lists.jifty.org
Wed Jul 30 16:34:45 EDT 2008


Author: ruz
Date: Wed Jul 30 16:34:41 2008
New Revision: 5620

Added:
   Jifty-DBI/branches/tisql/t/tisql/column_refers_tisql.t
Modified:
   Jifty-DBI/branches/tisql/   (props changed)

Log:
 r5632 at ruslan-zakirovs-computer:  ruz | 2008-07-31 00:29:31 +0400
 * add tests


Added: Jifty-DBI/branches/tisql/t/tisql/column_refers_tisql.t
==============================================================================
--- (empty file)
+++ Jifty-DBI/branches/tisql/t/tisql/column_refers_tisql.t	Wed Jul 30 16:34:41 2008
@@ -0,0 +1,215 @@
+#!/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 => 21;
+
+my $total = scalar(@available_drivers) * TESTS_PER_DRIVER;
+plan tests => $total;
+
+use Data::Dumper;
+
+foreach my $d ( @available_drivers ) {
+SKIP: {
+    unless( has_schema( 'TestApp', $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', $handle );
+    isa_ok($ret, 'DBI::st', "Inserted the schema. got a statement handle back");
+
+    my $count_users = init_data( 'TestApp::User', $handle );
+    ok( $count_users,  "init users data" );
+    my $count_attributes = init_data( 'TestApp::Attribute', $handle );
+    ok( $count_attributes,  "init attributes data" );
+
+# ivan
+{
+    my $user = TestApp::User->load('ivan', _handle => $handle);
+    ok $user->id, "loaded ivan's record";
+    my $attrs = $user->attrs;
+    $attrs->order_by(column => 'value', order => 'asc');
+    is $attrs->count, 1, "found one ivan's attribute";
+    is $attrs->next->value, 'foo', "correct value";
+    is $attrs->next, undef, "correct value";
+}
+
+# john
+{
+    my $user = TestApp::User->load('john', _handle => $handle);
+    ok $user->id, "loaded john's record";
+    my $attrs = $user->attrs;
+    $attrs->order_by(column => 'value', order => 'asc');
+    is $attrs->count, 1, "found one john's attribute";
+    is $attrs->next->value, 'bar', "correct value";
+    is $attrs->next, undef, "correct value";
+}
+
+# bob
+{
+    my $user = TestApp::User->load('bob', _handle => $handle);
+    ok $user->id, "loaded bob's record";
+    my $attrs = $user->attrs;
+    $attrs->order_by(column => 'value', order => 'asc');
+    is $attrs->count, 3, "found three bob's attribute";
+    is $attrs->next->value, 'bar', "correct value";
+    is $attrs->next->value, 'foo', "correct value";
+    is $attrs->next->value, 'zoo', "correct value";
+    is $attrs->next, undef, "correct value";
+}
+
+# aurelia
+{
+    my $user = TestApp::User->load('aurelia', _handle => $handle);
+    ok $user->id, "loaded aurelia's record";
+    my $attrs = $user->attrs;
+    $attrs->order_by(column => 'value', order => 'asc');
+    is $attrs->count, 0, "havn't found aurelia's attributes";
+    is $attrs->next, undef, "correct value";
+}
+    cleanup_schema( 'TestApp', $handle );
+
+}} # SKIP, foreach blocks
+
+1;
+
+
+package TestApp;
+sub schema_sqlite {
+[
+q{
+CREATE TABLE users (
+    id integer primary key,
+    login varchar(36)
+) },
+q{
+CREATE TABLE attributes (
+    id integer primary key,
+    model varchar(36),
+    record integer,
+    value varchar(36)
+) },
+]
+}
+
+package TestApp::Attribute;
+
+use base qw/Jifty::DBI::Record/;
+our $VERSION = '0.01';
+
+BEGIN {
+use Jifty::DBI::Schema;
+use Jifty::DBI::Record schema {
+    column model => type is 'varchar(36)';
+    column record => type is 'integer';
+    column value => type is 'varchar(36)';
+};
+}
+
+sub _init {
+    my $self = shift;
+    $self->table('attributes');
+    return $self->SUPER::_init( @_ );
+}
+
+sub init_data {
+    return (
+    [ 'model', 'record', 'value' ],
+
+    [ 'User', '1', 'foo' ], # ivan
+    [ 'User', '2', 'bar' ], # john
+    [ 'User', '3', 'foo' ], # bob
+    [ 'User', '3', 'bar' ], # bob
+    [ 'User', '3', 'zoo' ], # bob
+# no attributes for aurelia
+# some attributes for 'Group' records matching users' ids
+    [ 'Group', '1', 'wrong' ],
+    [ 'Group', '2', 'wrong' ],
+    [ 'Group', '3', 'wrong' ],
+    [ 'Group', '4', 'wrong' ],
+    );
+}
+
+package TestApp::AttributeCollection;
+
+use base qw/Jifty::DBI::Collection/;
+our $VERSION = '0.01';
+
+sub _init {
+    my $self = shift;
+    $self->table('attributes');
+    return $self->SUPER::_init( @_ );
+}
+
+1;
+package TestApp::User;
+
+use base qw/Jifty::DBI::Record/;
+our $VERSION = '0.01';
+
+BEGIN {
+use Jifty::DBI::Schema;
+use Jifty::DBI::Record schema {
+    column login => type is 'varchar(36)';
+    column attrs =>
+        refers_to TestApp::AttributeCollection
+            by tisql => ".model = 'User' AND .record = record.id",
+        is virtual;
+};
+}
+
+sub _init {
+    my $self = shift;
+    $self->table('users');
+    $self->SUPER::_init( @_ );
+}
+
+sub load {
+    my $self= shift;
+    my $ident = shift;
+    return $self->SUPER::load( $ident, @_ )
+        if $ident =~ /^\d+$/;
+    return $self->load_by_cols(
+        login => $ident,
+        @_
+    );
+}
+
+
+sub init_data {
+    return (
+    [ 'login' ],
+
+    [ 'ivan' ],
+    [ 'john' ],
+    [ 'bob' ],
+    [ 'aurelia' ],
+    );
+}
+
+package TestApp::UserCollection;
+
+use base qw/Jifty::DBI::Collection/;
+our $VERSION = '0.01';
+
+sub _init {
+    my $self = shift;
+    $self->table('users');
+    return $self->SUPER::_init( @_ );
+}
+
+1;


More information about the Jifty-commit mailing list