1#!/usr/bin/perl -w 2 3use strict; 4 5use Test::More tests => 1 + (5 * 1); 6 7BEGIN 8{ 9 require 't/test-lib.pl'; 10 use_ok('Rose::DB::Object::Loader'); 11} 12 13our %Have; 14 15# 16# Tests 17# 18 19#$Rose::DB::Object::Manager::Debug = 1; 20 21foreach my $db_type (qw(sqlite)) 22{ 23 SKIP: 24 { 25 skip("$db_type tests", 5) unless($Have{$db_type}); 26 } 27 28 next unless($Have{$db_type}); 29 30 Rose::DB::Object::Metadata->unregister_all_classes; 31 Rose::DB->default_type($db_type); 32 33 my $class_prefix = ucfirst($db_type); 34 35 my $loader = 36 Rose::DB::Object::Loader->new( 37 db => Rose::DB->new, 38 class_prefix => $class_prefix); 39 40 my @classes = $loader->make_classes(include_tables => '^(foos|bars)$'); 41 42 #foreach my $class (@classes) 43 #{ 44 # print $class->meta->perl_class_definition if($class->can('meta')); 45 #} 46 47 my $foo_class = $class_prefix . '::Foo'; 48 my $bar_class = $class_prefix . '::Bar'; 49 50 is($foo_class->meta->relationship('bar')->type, 'one to one', "check rel type - $db_type"); 51 52 my $bar = $bar_class->new; 53 my $foo = $foo_class->new(foo => 'xyz'); 54 55 #$Rose::DB::Object::Debug = 1; 56 57 $foo->bar($bar); 58 $foo->bar->bar('some text'); 59 $foo->save; 60 61 my $check_foo = $foo_class->new(id => $foo->id)->load; 62 my $check_bar = $bar_class->new(foo_id => $bar->foo_id)->load; 63 64 is($check_foo->foo, 'xyz', "check foo - $db_type"); 65 is($check_bar->bar, 'some text', "check bar - $db_type"); 66 67 is($bar_class->meta->relationship('foo')->type, 'one to one', "check foo one to one - $db_type"); 68 is($bar_class->meta->relationship('foo')->foreign_key, 69 $bar_class->meta->foreign_key('foo'), "check foo fk rel - $db_type"); 70 71 #foreach my $rel ($bar_class->meta->relationships) 72 #{ 73 # print $rel->name, ' ', $rel->type, "\n"; 74 #} 75} 76 77BEGIN 78{ 79 our %Have; 80 81 my $dbh; 82 83 # 84 # SQLite 85 # 86 87 eval 88 { 89 $dbh = Rose::DB->new('sqlite_admin')->retain_dbh() 90 or die Rose::DB->error; 91 }; 92 93 if(!$@ && $dbh) 94 { 95 $Have{'sqlite'} = 1; 96 97 # Drop existing tables and create schema, ignoring errors 98 { 99 local $dbh->{'RaiseError'} = 0; 100 local $dbh->{'PrintError'} = 0; 101 102 $dbh->do('DROP TABLE bars'); 103 $dbh->do('DROP TABLE foos'); 104 } 105 106 $dbh->do(<<"EOF"); 107CREATE TABLE foos 108( 109 id INTEGER PRIMARY KEY AUTOINCREMENT, 110 foo VARCHAR(255) 111) 112EOF 113 114 $dbh->do(<<"EOF"); 115CREATE TABLE "bars" 116( 117 "foo_id" INTEGER PRIMARY KEY AUTOINCREMENT REFERENCES foos (id), 118 bar VARCHAR(255) 119) 120EOF 121 122 $dbh->disconnect; 123 } 124} 125 126END 127{ 128 # Delete test tables 129 130 if($Have{'sqlite'}) 131 { 132 my $dbh = Rose::DB->new('sqlite_admin')->retain_dbh() 133 or die Rose::DB->error; 134 135 $dbh->do('DROP TABLE bars'); 136 $dbh->do('DROP TABLE foos'); 137 138 $dbh->disconnect; 139 } 140} 141