comparison _test/Test/SQL/Schema.pm @ 33:0004faa276dc

small fixes, some new tests
author Sergey
date Mon, 09 Nov 2009 16:49:39 +0300
parents 56cef8e3cda6
children 16ada169ca75
comparison
equal deleted inserted replaced
32:56cef8e3cda6 33:0004faa276dc
3 use warnings; 3 use warnings;
4 4
5 use base qw(IMPL::Test::Unit); 5 use base qw(IMPL::Test::Unit);
6 __PACKAGE__->PassThroughArgs; 6 __PACKAGE__->PassThroughArgs;
7 7
8 use IMPL::Class::Property;
9 use IMPL::Class::Property::Direct;
10
11 use IMPL::Test qw(test shared failed);
12
13 BEGIN {
14 shared public property schemaDB => prop_all;
15 }
16
17 require IMPL::SQL::Schema;
18 require IMPL::SQL::Schema::Constraint::Unique;
19
20 use IMPL::SQL::Types qw(Integer Varchar);
21
22 test CreateSchema => sub {
23 my ($this) = @_;
24
25 my $schema = new IMPL::SQL::Schema(Name => 'dbTest', Version => 1) or failed "Failed to create schema";
26
27 failed "Failed to set a schema name" unless $schema->Name eq 'dbTest';
28 failed "Failed to set a schema version" unless $schema->Version == 1;
29
30 $this->schemaDB($schema);
31 };
32
33 test AddTable => sub {
34 my ($this) = @_;
35
36 my $table = $this->schemaDB->AddTable({Name => 'User'}) or failed "Failed to add a table to the schema";
37 $table->InsertColumn({
38 Name => 'Id',
39 Type => Integer
40 });
41 $table->InsertColumn({
42 Name => 'Login',
43 Type => Varchar(255)
44 });
45 $table->InsertColumn({
46 Name => 'DisplayName',
47 CanBeNull => 1,
48 Type => Varchar(255)
49 });
50 $table->InsertColumn({
51 Name => 'RoleId',
52 CanBeNull => 1,
53 Type => Integer
54 });
55
56 $table->SetPrimaryKey('Id');
57
58 my $colCount = @{$table->Columns};
59
60 failed "Failed to add columns", "Expected: 4", "Got: ".$colCount unless $colCount == 4;
61 failed "Failed to set a primary key" unless $table->PrimaryKey;
62
63 my $table2 = $this->schemaDB->AddTable({Name => 'Role'});
64 $table2->InsertColumn({
65 Name => 'Id',
66 Type => Integer
67 });
68 $table2->InsertColumn({
69 Name => 'Description',
70 Type => Varchar(255)
71 });
72 $table2->InsertColumn({
73 Name => 'ObsoleteId',
74 Type => Integer
75 });
76
77 $table2->SetPrimaryKey('Id');
78
79 $table->LinkTo($table2,'RoleId');
80 };
81
82 test Constraints => sub {
83 my ($this) = @_;
84
85 my $table = $this->schemaDB->Tables->{Role} or failed "Failed to get a table";
86
87 my $constraint = $table->AddConstraint(
88 new IMPL::SQL::Schema::Constraint::Unique(
89 Name => 'Role_ObsoleteId_Uniq',
90 Table => $table,
91 Columns => ['ObsoleteId']
92 )
93 ) or failed "Failed to add constraint";
94
95 failed "Failed to retrieve a constraint" unless ($table->GetColumnConstraints('ObsoleteId'))[0] == $constraint;
96
97 $table->RemoveColumn('ObsoleteId',1);
98
99 failed "A constraint remains alive after column deletion" unless $constraint->isDisposed;
100
101 };
102
103 test Dispose => sub {
104 my ($this) = @_;
105
106 $this->schemaDB->Dispose();
107 };
108
109
8 1; 110 1;