RT 4.2.11, ticket#13852
[freeside.git] / rt / t / api / db_indexes.t
1 use strict;
2 use warnings;
3 use Test::Warn;
4
5 use RT::Test tests => undef;
6
7 my $handle = $RT::Handle;
8 my $db_type = RT->Config->Get('DatabaseType');
9
10 # Pg,Oracle needs DBA
11 RT::Test::__reconnect_rt('as dba');
12 ok( $handle->dbh->do("ALTER SESSION SET CURRENT_SCHEMA=". RT->Config->Get('DatabaseUser') ) )
13     if $db_type eq 'Oracle';
14
15 note "test handle->Indexes method";
16 {
17     my %indexes = $handle->Indexes;
18     ok grep $_ eq 'tickets1', @{ $indexes{'tickets'} };
19     ok grep $_ eq 'tickets2', @{ $indexes{'tickets'} };
20     ok grep $_ eq 'users1', @{ $indexes{'users'} };
21     ok grep $_ eq 'users4', @{ $indexes{'users'} };
22 }
23
24 note "test handle->DropIndex method";
25 {
26     my ($status, $msg) = $handle->DropIndex( Table => 'Tickets', Name => 'Tickets1' );
27     ok $status, $msg;
28
29     my %indexes = $handle->Indexes;
30     ok !grep $_ eq 'tickets1', @{ $indexes{'tickets'} };
31
32     ($status, $msg) = $handle->DropIndex( Table => 'Tickets', Name => 'Tickets1' );
33     ok !$status, $msg;
34 }
35
36 note "test handle->DropIndexIfExists method";
37 {
38     my ($status, $msg) = $handle->DropIndexIfExists( Table => 'Tickets', Name => 'Tickets2' );
39     ok $status, $msg;
40
41     my %indexes = $handle->Indexes;
42     ok !grep $_ eq 'tickets2', @{ $indexes{'tickets'} };
43
44     ($status, $msg) = $handle->DropIndexIfExists( Table => 'Tickets', Name => 'Tickets2' );
45     ok $status, $msg;
46 }
47
48 note "test handle->IndexInfo method";
49 {
50     if ($db_type ne 'Oracle' && $db_type ne 'mysql') {
51         my %res = $handle->IndexInfo( Table => 'Attachments', Name => 'Attachments1' );
52         is_deeply(
53             \%res,
54             {
55                 Table => 'attachments', Name => 'attachments1',
56                 Unique => 0, Functional => 0,
57                 Columns => ['parent']
58             }
59         );
60     } else {
61         my %res = $handle->IndexInfo( Table => 'Attachments', Name => 'Attachments2' );
62         is_deeply(
63             \%res,
64             {
65                 Table => 'attachments', Name => 'attachments2',
66                 Unique => 0, Functional => 0,
67                 Columns => ['transactionid']
68             }
69         );
70     }
71
72     my %res = $handle->IndexInfo( Table => 'GroupMembers', Name => 'GroupMembers1' );
73     is_deeply(
74         \%res,
75         {
76             Table => 'groupmembers', Name => 'groupmembers1',
77             Unique => 1, Functional => 0,
78             Columns => ['groupid', 'memberid']
79         }
80     );
81
82     if ( $db_type eq 'Pg' || $db_type eq 'Oracle' ) {
83         %res = $handle->IndexInfo( Table => 'Queues', Name => 'Queues1' );
84         is_deeply(
85             \%res,
86             {
87                 Table => 'queues', Name => 'queues1',
88                 Unique => 1, Functional => 1,
89                 Columns => ['name'],
90                 CaseInsensitive => { name => 1 },
91             }
92         );
93     }
94 }
95
96 note "test ->CreateIndex and ->IndexesThatBeginWith methods";
97 {
98     {
99         my ($name, $msg) = $handle->CreateIndex(
100             Table => 'Users', Name => 'test_users1',
101             Columns => ['Organization'],
102         );
103         ok $name, $msg;
104     }
105     {
106         my ($name, $msg) = $handle->CreateIndex(
107             Table => 'Users', Name => 'test_users2',
108             Columns => ['Organization', 'Name'],
109         );
110         ok $name, $msg;
111     }
112
113     my @list = $handle->IndexesThatBeginWith( Table => 'Users', Columns => ['Organization'] );
114     is_deeply([sort map $_->{Name}, @list], [qw(test_users1 test_users2)]);
115
116     my ($status, $msg) = $handle->DropIndex( Table => 'Users', Name => 'test_users1' );
117     ok $status, $msg;
118     ($status, $msg) = $handle->DropIndex( Table => 'Users', Name => 'test_users2' );
119     ok $status, $msg;
120 }
121
122 note "Test some cases sensitivity aspects";
123 {
124     {
125         my %res = $handle->IndexInfo( Table => 'groupmembers', Name => 'groupmembers1' );
126         is_deeply(
127             \%res,
128             {
129                 Table => 'groupmembers', Name => 'groupmembers1',
130                 Unique => 1, Functional => 0,
131                 Columns => ['groupid', 'memberid']
132             }
133         );
134     }
135
136     {
137         my ($status, $msg) = $handle->DropIndex( Table => 'groupmembers', Name => 'groupmembers1' );
138         ok $status, $msg;
139
140         my %indexes = $handle->Indexes;
141         ok !grep $_ eq 'groupmembers1', @{ $indexes{'groupmembers'} };
142     }
143
144     {
145         my ($name, $msg) = $handle->CreateIndex(
146             Table => 'groupmembers', Name => 'groupmembers1',
147             Unique => 1,
148             Columns => ['groupid', 'memberid']
149         );
150         ok $name, $msg;
151
152         my %indexes = $handle->Indexes;
153         ok grep $_ eq 'groupmembers1', @{ $indexes{'groupmembers'} };
154     }
155
156     {
157         my ($status, $msg) = $handle->DropIndexIfExists( Table => 'groupmembers', Name => 'groupmembers1' );
158         ok $status, $msg;
159
160         my %indexes = $handle->Indexes;
161         ok !grep $_ eq 'groupmembers1', @{ $indexes{'groupmembers'} };
162     }
163 }
164
165 done_testing();