Mercurial > pub > Impl
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; |