[Rt-commit] r10928 - in rt/branches/3.7-EXPERIMENTAL: . etc html/Ticket/Elements lib/RT t/mail t/ticket t/web

ruz at bestpractical.com ruz at bestpractical.com
Mon Feb 25 15:24:22 EST 2008


Author: ruz
Date: Mon Feb 25 15:24:13 2008
New Revision: 10928

Added:
   rt/branches/3.7-EXPERIMENTAL/t/ticket/search_by_links.t
Modified:
   rt/branches/3.7-EXPERIMENTAL/   (props changed)
   rt/branches/3.7-EXPERIMENTAL/configure.ac
   rt/branches/3.7-EXPERIMENTAL/etc/RT_Config.pm.in
   rt/branches/3.7-EXPERIMENTAL/html/Ticket/Elements/ShowMessageHeaders
   rt/branches/3.7-EXPERIMENTAL/html/Ticket/Elements/ShowTransaction
   rt/branches/3.7-EXPERIMENTAL/html/Ticket/Elements/ShowTransactionAttachments
   rt/branches/3.7-EXPERIMENTAL/lib/RT/Crypt/GnuPG.pm
   rt/branches/3.7-EXPERIMENTAL/lib/RT/GroupMember_Overlay.pm
   rt/branches/3.7-EXPERIMENTAL/lib/RT/Group_Overlay.pm
   rt/branches/3.7-EXPERIMENTAL/lib/RT/Tickets_Overlay.pm
   rt/branches/3.7-EXPERIMENTAL/releng.cnf
   rt/branches/3.7-EXPERIMENTAL/t/mail/crypt-gnupg.t
   rt/branches/3.7-EXPERIMENTAL/t/ticket/search_by_watcher.t
   rt/branches/3.7-EXPERIMENTAL/t/web/compilation_errors.t

Log:
merge 3.7-RTIR-RELENG -> 3.7-EXPERIMENTAL
 r10762 at localhost (orig r10728):  ruz | 2008-02-05 23:14:39 +0300
 * turn off gnupg wornings and show log if something went wrong
 r10763 at localhost (orig r10729):  ruz | 2008-02-05 23:19:59 +0300
 * use new test method instead old style things
 r10764 at localhost (orig r10730):  ruz | 2008-02-06 00:15:11 +0300
 * add t/ticket/search_by_links.t
 r10765 at localhost (orig r10731):  ruz | 2008-02-06 00:20:45 +0300
 * fix searches by link
 * replace queries with more robust variants when search uses OR
 r10784 at localhost (orig r10750):  ruz | 2008-02-07 04:42:14 +0300
 * add complex tests to t/ticket/search_by_links.t
 r10814 at localhost (orig r10780):  ruz | 2008-02-09 07:45:53 +0300
 * delete unused variables
 r10828 at localhost (orig r10794):  ruz | 2008-02-10 19:58:38 +0300
 * we should use 7bit encodings when send signed only content
 r10873 at localhost (orig r10836):  ruz | 2008-02-14 15:25:00 +0300
  r10830 at localhost:  cubic | 2008-02-12 04:02:50 +0300
  * add config option that allow users to see BCC header in the UI
 
 r10874 at localhost (orig r10837):  ruz | 2008-02-14 15:25:17 +0300
  r10872 at localhost:  cubic | 2008-02-14 15:19:13 +0300
  * rollback transactions on errors
 
 r10875 at localhost (orig r10838):  ruz | 2008-02-14 15:31:40 +0300
 * bump version
 r10876 at localhost (orig r10839):  ruz | 2008-02-14 17:06:21 +0300
 * fix a regression in t/ticket/link_search.t
 r10877 at localhost (orig r10840):  ruz | 2008-02-14 17:07:37 +0300
 * fix number of tests
 r10878 at localhost (orig r10841):  ruz | 2008-02-14 18:00:12 +0300
 * error handle is not always filled


Modified: rt/branches/3.7-EXPERIMENTAL/configure.ac
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/configure.ac	(original)
+++ rt/branches/3.7-EXPERIMENTAL/configure.ac	Mon Feb 25 15:24:13 2008
@@ -7,7 +7,7 @@
 
 dnl Setup autoconf
 AC_PREREQ(2.53)
-AC_INIT(RT, [3.7.22], [rt-bugs at bestpractical.com])
+AC_INIT(RT, [3.7.23], [rt-bugs at bestpractical.com])
 AC_CONFIG_SRCDIR([lib/RT.pm.in])
 
 dnl Extract RT version number components

Modified: rt/branches/3.7-EXPERIMENTAL/etc/RT_Config.pm.in
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/etc/RT_Config.pm.in	(original)
+++ rt/branches/3.7-EXPERIMENTAL/etc/RT_Config.pm.in	Mon Feb 25 15:24:13 2008
@@ -235,7 +235,6 @@
 # @MailParams defines a list of options passed to $MailCommand if it
 # is not 'sendmailpipe', 'sendmail', or 'smtp'
 Set(@MailParams, ());
-# }}}
 
 # RT is designed such that any mail which already has a ticket-id associated
 # with it will get to the right place automatically.
@@ -293,11 +292,15 @@
 
 # By default, RT forwards a message using queue's address and adds RT's tag into
 # subject of the outgoing message, so recipients' replies go into RT as correspondents.
-# To change this behavior, set $ForwardFromUser to 0 and RT will use address of the
-# current user and leave subject without RT's tag.
+# To change this behavior, set $ForwardFromUser to true value and RT will use
+# address of the current user and leave subject without RT's tag.
 
 Set($ForwardFromUser, 0);
 
+# By default RT hides from the web UI information about blind copies user sent on
+# reply or comment, to change this set the following option to true value
+Set($ShowBccHeader, 0);
+
 # }}}
 
 # {{{ GnuPG

Modified: rt/branches/3.7-EXPERIMENTAL/html/Ticket/Elements/ShowMessageHeaders
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/html/Ticket/Elements/ShowMessageHeaders	(original)
+++ rt/branches/3.7-EXPERIMENTAL/html/Ticket/Elements/ShowMessageHeaders	Mon Feb 25 15:24:13 2008
@@ -55,7 +55,7 @@
 </table>
 <%INIT>
 my @headers;
-foreach my $field( $Message->SplitHeaders ) {
+foreach my $field( RT->Config->Get('ShowBccHeader')? $Message->_SplitHeaders : $Message->SplitHeaders ) {
     my ($tag, $value) = split /:/, $field, 2;
     next unless $tag && $value;
     push @headers, { Tag => $tag, Value => $value };

Modified: rt/branches/3.7-EXPERIMENTAL/html/Ticket/Elements/ShowTransaction
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/html/Ticket/Elements/ShowTransaction	(original)
+++ rt/branches/3.7-EXPERIMENTAL/html/Ticket/Elements/ShowTransaction	Mon Feb 25 15:24:13 2008
@@ -158,10 +158,7 @@
 }
 my $titlebar_commands = '&nbsp;';
 
-my @DisplayHeaders=qw ( _all);
-
 if ( $type =~ /EmailRecord$/ ) {
-    @DisplayHeaders = qw(To Cc Bcc);
 
     $titlebar_commands .=
         "[<a target=\"_blank\" href=\"$EmailRecordPath?id="
@@ -178,10 +175,6 @@
 # If the transaction has anything attached to it at all
 else {
 
-    unless ( $ShowHeaders ) {
-        @DisplayHeaders = qw(To From RT-Send-Cc Cc Bcc Date Subject);
-    }
-
     if ( $Attachments->[0] && $ShowTitleBarCommands ) {
         my $ticket = $Transaction->TicketObj;
         my $can_modify = $ticket->CurrentUserHasRight('ModifyTicket');

Modified: rt/branches/3.7-EXPERIMENTAL/html/Ticket/Elements/ShowTransactionAttachments
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/html/Ticket/Elements/ShowTransactionAttachments	(original)
+++ rt/branches/3.7-EXPERIMENTAL/html/Ticket/Elements/ShowTransactionAttachments	Mon Feb 25 15:24:13 2008
@@ -183,6 +183,7 @@
 # If the transaction has anything attached to it at all
 elsif (!$ShowHeaders)  {
     @DisplayHeaders = qw(To From RT-Send-Cc Cc Bcc Date Subject);
+    push @DisplayHeaders, 'RT-Send-Bcc' if RT->Config->Get('ShowBccHeader');
 }
 
 my $size_to_str = sub {

Modified: rt/branches/3.7-EXPERIMENTAL/lib/RT/Crypt/GnuPG.pm
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/lib/RT/Crypt/GnuPG.pm	(original)
+++ rt/branches/3.7-EXPERIMENTAL/lib/RT/Crypt/GnuPG.pm	Mon Feb 25 15:24:13 2008
@@ -478,7 +478,14 @@
     my %res;
     if ( $args{'Sign'} && !$args{'Encrypt'} ) {
         # required by RFC3156(Ch. 5) and RFC1847(Ch. 2.1)
-        $entity->head->mime_attr('Content-Transfer-Encoding' => 'quoted-printable');
+        foreach ( grep !$_->is_multipart, $entity->parts_DFS ) {
+            my $tenc = $_->head->mime_encoding;
+            unless ( $tenc =~ m/^(?:7bit|quoted-printable|base64)$/i ) {
+                $_->head->mime_attr( 'Content-Transfer-Encoding'
+                    => $_->effective_type =~ m{^text/}? 'quoted-printable': 'base64'
+                );
+            }
+        }
 
         my %handle;
         my $handles = GnuPG::Handles->new(

Modified: rt/branches/3.7-EXPERIMENTAL/lib/RT/GroupMember_Overlay.pm
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/lib/RT/GroupMember_Overlay.pm	(original)
+++ rt/branches/3.7-EXPERIMENTAL/lib/RT/GroupMember_Overlay.pm	Mon Feb 25 15:24:13 2008
@@ -133,10 +133,12 @@
         my $member_object = $args{'Member'}->Object;
         if ($member_object->HasMemberRecursively($args{'Group'})) {
             $RT::Logger->debug("Adding that group would create a loop");
+            $RT::Handle->Rollback() unless ($args{'InsideTransaction'});
             return(undef);
         }
         elsif ( $args{'Member'}->Id == $args{'Group'}->Id) {
             $RT::Logger->debug("Can't add a group to itself");
+            $RT::Handle->Rollback() unless ($args{'InsideTransaction'});
             return(undef);
         }
     }

Modified: rt/branches/3.7-EXPERIMENTAL/lib/RT/Group_Overlay.pm
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/lib/RT/Group_Overlay.pm	(original)
+++ rt/branches/3.7-EXPERIMENTAL/lib/RT/Group_Overlay.pm	Mon Feb 25 15:24:13 2008
@@ -425,6 +425,7 @@
     );
     my $id = $self->Id;
     unless ($id) {
+        $RT::Handle->Rollback() unless ($args{'InsideTransaction'});
         return ( 0, $self->loc('Could not create group') );
     }
 

Modified: rt/branches/3.7-EXPERIMENTAL/lib/RT/Tickets_Overlay.pm
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/lib/RT/Tickets_Overlay.pm	(original)
+++ rt/branches/3.7-EXPERIMENTAL/lib/RT/Tickets_Overlay.pm	Mon Feb 25 15:24:13 2008
@@ -338,6 +338,13 @@
     my $meta = $FIELD_METADATA{$field};
     die "Invalid Operator $op for $field" unless $op =~ /^(=|!=|IS|IS NOT)$/io;
 
+    my $is_negative = 0;
+    if ( $op eq '!=' || $op =~ /\bNOT\b/i ) {
+        $is_negative = 1;
+    }
+    my $is_null = 0;
+    $is_null = 1 if !$value || $value =~ /^null$/io;
+
     my $direction = $meta->[1] || '';
     my ($matchfield, $linkfield) = ('', '');
     if ( $direction eq 'To' ) {
@@ -348,11 +355,19 @@
     }
     elsif ( $direction ) {
         die "Invalid link direction '$direction' for $field\n";
+    } else {
+        $sb->_OpenParen;
+        $sb->_LinkLimit( 'LinkedTo', $op, $value, @rest );
+        $sb->_LinkLimit(
+            'LinkedFrom', $op, $value, @rest,
+            ENTRYAGGREGATOR => (($is_negative && $is_null) || (!$is_null && !$is_negative))? 'OR': 'AND',
+        );
+        $sb->_CloseParen;
+        return;
     }
 
-    my ($is_local, $is_null) = (1, 0);
-    if ( !$value || $value =~ /^null$/io ) {
-        $is_null = 1;
+    my $is_local = 1;
+    if ( $is_null ) {
         $op = ($op =~ /^(=|IS)$/)? 'IS': 'IS NOT';
     }
     elsif ( $value =~ /\D/ ) {
@@ -360,12 +375,6 @@
     }
     $matchfield = "Local$matchfield" if $is_local;
 
-    my $is_negative = 0;
-    if ( $op eq '!=' ) {
-        $is_negative = 1;
-        $op = '=';
-    }
-
 #For doing a left join to find "unlinked tickets" we want to generate a query that looks like this
 #    SELECT main.* FROM Tickets main
 #        LEFT JOIN Links Links_1 ON (     (Links_1.Type = 'MemberOf')
@@ -395,7 +404,7 @@
             QUOTEVALUE => 0,
         );
     }
-    elsif ( $is_negative ) {
+    else {
         my $linkalias = $sb->Join(
             TYPE   => 'LEFT',
             ALIAS1 => 'main',
@@ -412,83 +421,18 @@
         $sb->SUPER::Limit(
             LEFTJOIN => $linkalias,
             FIELD    => $matchfield,
-            OPERATOR => $op,
+            OPERATOR => '=',
             VALUE    => $value,
         );
         $sb->_SQLLimit(
             @rest,
             ALIAS      => $linkalias,
             FIELD      => $matchfield,
-            OPERATOR   => 'IS',
+            OPERATOR   => $is_negative? 'IS': 'IS NOT',
             VALUE      => 'NULL',
             QUOTEVALUE => 0,
         );
     }
-    else {
-        my $linkalias = $sb->NewAlias('Links');
-        $sb->_OpenParen;
-
-        $sb->_SQLLimit(
-            @rest,
-            ALIAS    => $linkalias,
-            FIELD    => 'Type',
-            OPERATOR => '=',
-            VALUE    => $meta->[2],
-        ) if $meta->[2];
-
-        $sb->_OpenParen;
-        if ( $direction ) {
-            $sb->_SQLLimit(
-                ALIAS           => $linkalias,
-                FIELD           => 'Local' . $linkfield,
-                OPERATOR        => '=',
-                VALUE           => 'main.id',
-                QUOTEVALUE      => 0,
-                ENTRYAGGREGATOR => 'AND',
-            );
-            $sb->_SQLLimit(
-                ALIAS           => $linkalias,
-                FIELD           => $matchfield,
-                OPERATOR        => '=',
-                VALUE           => $value,
-                ENTRYAGGREGATOR => 'AND',
-            );
-        } else {
-            $sb->_OpenParen;
-            $sb->_SQLLimit(
-                ALIAS           => $linkalias,
-                FIELD           => 'LocalBase',
-                VALUE           => 'main.id',
-                QUOTEVALUE      => 0,
-                ENTRYAGGREGATOR => 'AND',
-            );
-            $sb->_SQLLimit(
-                ALIAS           => $linkalias,
-                FIELD           => $matchfield .'Target',
-                VALUE           => $value,
-                ENTRYAGGREGATOR => 'AND',
-            );
-            $sb->_CloseParen;
-
-            $sb->_OpenParen;
-            $sb->_SQLLimit(
-                ALIAS           => $linkalias,
-                FIELD           => 'LocalTarget',
-                VALUE           => 'main.id',
-                QUOTEVALUE      => 0,
-                ENTRYAGGREGATOR => 'OR',
-            );
-            $sb->_SQLLimit(
-                ALIAS           => $linkalias,
-                FIELD           => $matchfield .'Base',
-                VALUE           => $value,
-                ENTRYAGGREGATOR => 'AND',
-            );
-            $sb->_CloseParen;
-        }
-        $sb->_CloseParen;
-        $sb->_CloseParen;
-    }
 }
 
 =head2 _DateLimit

Modified: rt/branches/3.7-EXPERIMENTAL/releng.cnf
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/releng.cnf	(original)
+++ rt/branches/3.7-EXPERIMENTAL/releng.cnf	Mon Feb 25 15:24:13 2008
@@ -1,5 +1,5 @@
 PRODUCT			        = rt
-TAG			            = 3.7.22
+TAG			            = 3.7.23
 CANONICAL_REPO		    = svn+ssh://svn.bestpractical.com/svn/bps-public/rt/
 TAGS		            = tags/
 TRUNK	                = branches/3.7-EXPERIMENTAL

Modified: rt/branches/3.7-EXPERIMENTAL/t/mail/crypt-gnupg.t
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/t/mail/crypt-gnupg.t	(original)
+++ rt/branches/3.7-EXPERIMENTAL/t/mail/crypt-gnupg.t	Mon Feb 25 15:24:13 2008
@@ -5,12 +5,11 @@
 use Test::More;
 eval 'use GnuPG::Interface; 1' or plan skip_all => 'GnuPG required.';
 
-plan tests => 94;
+plan tests => 92;
 use RT::Test nodata => 1;
 
 RT->Config->Set( LogToScreen => 'debug' );
 RT->Config->Set( LogStackTraces => 'error' );
-use Data::Dumper;
 
 use File::Spec ();
 use Cwd;
@@ -25,7 +24,9 @@
                  OutgoingMessagesFormat => 'RFC' );
 
 RT->Config->Set( 'GnuPGOptions',
-                 homedir => $homedir );
+                 homedir => $homedir,
+                 'no-permission-warning' => undef,
+);
 
 
 diag 'only signing. correct passphrase' if $ENV{'TEST_VERBOSE'};
@@ -37,7 +38,7 @@
     );
     my %res = RT::Crypt::GnuPG::SignEncrypt( Entity => $entity, Encrypt => 0, Passphrase => 'test' );
     ok( $entity, 'signed entity');
-    ok( !$res{'logger'}, "log is here as well" );
+    ok( !$res{'logger'}, "log is here as well" ) or diag $res{'logger'};
     my @status = RT::Crypt::GnuPG::ParseStatus( $res{'status'} );
     is( scalar @status, 2, 'two records: passphrase, signing');
     is( $status[0]->{'Operation'}, 'PassphraseCheck', 'operation is correct');
@@ -73,8 +74,7 @@
     );
     my %res = RT::Crypt::GnuPG::SignEncrypt( Entity => $entity, Encrypt => 0, Passphrase => '' );
     ok( $res{'exit_code'}, "couldn't sign without passphrase");
-    ok( $res{'error'}, "error is here" );
-    ok( $res{'logger'}, "log is here as well" );
+    ok( $res{'error'} || $res{'logger'}, "error is here" );
 
     my @status = RT::Crypt::GnuPG::ParseStatus( $res{'status'} );
     is( scalar @status, 1, 'one record');
@@ -91,8 +91,7 @@
     );
     my %res = RT::Crypt::GnuPG::SignEncrypt( Entity => $entity, Encrypt => 0, Passphrase => 'wrong' );
     ok( $res{'exit_code'}, "couldn't sign with bad passphrase");
-    ok( $res{'error'}, "error is here" );
-    ok( $res{'logger'}, "log is here as well" );
+    ok( $res{'error'} || $res{'logger'}, "error is here" );
 
     my @status = RT::Crypt::GnuPG::ParseStatus( $res{'status'} );
     is( scalar @status, 1, 'one record');

Added: rt/branches/3.7-EXPERIMENTAL/t/ticket/search_by_links.t
==============================================================================
--- (empty file)
+++ rt/branches/3.7-EXPERIMENTAL/t/ticket/search_by_links.t	Mon Feb 25 15:24:13 2008
@@ -0,0 +1,133 @@
+#!/usr/bin/perl -w
+
+use strict;
+use warnings;
+
+use Test::More tests => 80;
+use RT::Test;
+use RT::Ticket;
+
+my $q = RT::Test->load_or_create_queue( Name => 'Regression' );
+ok $q && $q->id, 'loaded or created queue';
+
+my ($total, @data, @tickets, %test) = (0, ());
+
+sub add_tix_from_data {
+    my @res = ();
+    while (@data) {
+        my $t = RT::Ticket->new($RT::SystemUser);
+        my %args = %{ shift(@data) };
+        $args{$_} = $res[ $args{$_} ]->id foreach grep $args{$_}, keys %RT::Ticket::LINKTYPEMAP;
+        my ( $id, undef $msg ) = $t->Create(
+            Queue => $q->id,
+            %args,
+        );
+        ok( $id, "ticket created" ) or diag("error: $msg");
+        push @res, $t;
+        $total++;
+    }
+    return @res;
+}
+
+sub run_tests {
+    my $query_prefix = join ' OR ', map 'id = '. $_->id, @tickets;
+    foreach my $key ( sort keys %test ) {
+        my $tix = RT::Tickets->new($RT::SystemUser);
+        $tix->FromSQL( "( $query_prefix ) AND ( $key )" );
+
+        my $error = 0;
+
+        my $count = 0;
+        $count++ foreach grep $_, values %{ $test{$key} };
+        is($tix->Count, $count, "found correct number of ticket(s) by '$key'") or $error = 1;
+
+        my $good_tickets = 1;
+        while ( my $ticket = $tix->Next ) {
+            next if $test{$key}->{ $ticket->Subject };
+            diag $ticket->Subject ." ticket has been found when it's not expected";
+            $good_tickets = 0;
+        }
+        ok( $good_tickets, "all tickets are good with '$key'" ) or $error = 1;
+
+        diag "Wrong SQL query for '$key':". $tix->BuildSelectQuery if $error;
+    }
+}
+
+# simple set with "no links", "parent and child"
+ at data = (
+    { Subject => '-', },
+    { Subject => 'p', },
+    { Subject => 'c', MemberOf => -1 },
+);
+ at tickets = add_tix_from_data();
+%test = (
+    'Linked     IS NOT NULL'  => { '-' => 0, c => 1, p => 1 },
+    'Linked     IS     NULL'  => { '-' => 1, c => 0, p => 0 },
+    'LinkedTo   IS NOT NULL'  => { '-' => 0, c => 1, p => 0 },
+    'LinkedTo   IS     NULL'  => { '-' => 1, c => 0, p => 1 },
+    'LinkedFrom IS NOT NULL'  => { '-' => 0, c => 0, p => 1 },
+    'LinkedFrom IS     NULL'  => { '-' => 1, c => 1, p => 0 },
+
+    'HasMember  IS NOT NULL'  => { '-' => 0, c => 0, p => 1 },
+    'HasMember  IS     NULL'  => { '-' => 1, c => 1, p => 0 },
+    'MemberOf   IS NOT NULL'  => { '-' => 0, c => 1, p => 0 },
+    'MemberOf   IS     NULL'  => { '-' => 1, c => 0, p => 1 },
+
+    'RefersTo   IS NOT NULL'  => { '-' => 0, c => 0, p => 0 },
+    'RefersTo   IS     NULL'  => { '-' => 1, c => 1, p => 1 },
+
+    'Linked      = '. $tickets[0]->id  => { '-' => 0, c => 0, p => 0 },
+    'Linked     != '. $tickets[0]->id  => { '-' => 1, c => 1, p => 1 },
+
+    'MemberOf    = '. $tickets[1]->id  => { '-' => 0, c => 1, p => 0 },
+    'MemberOf   != '. $tickets[1]->id  => { '-' => 1, c => 0, p => 1 },
+);
+{
+    my $tix = RT::Tickets->new($RT::SystemUser);
+    $tix->FromSQL("Queue = '". $q->id ."'");
+    is($tix->Count, $total, "found $total tickets");
+}
+run_tests();
+
+# another set with tests of combinations searches
+ at data = (
+    { Subject => '-', },
+    { Subject => 'p', },
+    { Subject => 'rp',  RefersTo => -1 },
+    { Subject => 'c',   MemberOf => -2 },
+    { Subject => 'rc1', RefersTo => -1 },
+    { Subject => 'rc2', RefersTo => -2 },
+);
+ at tickets = add_tix_from_data();
+my $pid = $tickets[1]->id;
+%test = (
+    'RefersTo IS NOT NULL'  => { '-' => 0, c => 0, p => 0, rp => 1, rc1 => 1, rc2 => 1 },
+    'RefersTo IS     NULL'  => { '-' => 1, c => 1, p => 1, rp => 0, rc1 => 0, rc2 => 0 },
+
+    'RefersTo IS NOT NULL AND MemberOf IS NOT NULL'  => { '-' => 0, c => 0, p => 0, rp => 0, rc1 => 0, rc2 => 0 },
+    'RefersTo IS NOT NULL AND MemberOf IS     NULL'  => { '-' => 0, c => 0, p => 0, rp => 1, rc1 => 1, rc2 => 1 },
+    'RefersTo IS     NULL AND MemberOf IS NOT NULL'  => { '-' => 0, c => 1, p => 0, rp => 0, rc1 => 0, rc2 => 0 },
+    'RefersTo IS     NULL AND MemberOf IS     NULL'  => { '-' => 1, c => 0, p => 1, rp => 0, rc1 => 0, rc2 => 0 },
+
+    'RefersTo IS NOT NULL OR  MemberOf IS NOT NULL'  => { '-' => 0, c => 1, p => 0, rp => 1, rc1 => 1, rc2 => 1 },
+    'RefersTo IS NOT NULL OR  MemberOf IS     NULL'  => { '-' => 1, c => 0, p => 1, rp => 1, rc1 => 1, rc2 => 1 },
+    'RefersTo IS     NULL OR  MemberOf IS NOT NULL'  => { '-' => 1, c => 1, p => 1, rp => 0, rc1 => 0, rc2 => 0 },
+    'RefersTo IS     NULL OR  MemberOf IS     NULL'  => { '-' => 1, c => 1, p => 1, rp => 1, rc1 => 1, rc2 => 1 },
+
+    "RefersTo  = $pid AND MemberOf  = $pid" => { '-' => 0, c => 0, p => 0, rp => 0, rc1 => 0, rc2 => 0 },
+    "RefersTo  = $pid AND MemberOf != $pid" => { '-' => 0, c => 0, p => 0, rp => 1, rc1 => 0, rc2 => 0 },
+    "RefersTo != $pid AND MemberOf  = $pid" => { '-' => 0, c => 1, p => 0, rp => 0, rc1 => 0, rc2 => 0 },
+    "RefersTo != $pid AND MemberOf != $pid" => { '-' => 1, c => 0, p => 1, rp => 0, rc1 => 1, rc2 => 1 },
+
+    "RefersTo  = $pid OR  MemberOf  = $pid" => { '-' => 0, c => 1, p => 0, rp => 1, rc1 => 0, rc2 => 0 },
+    "RefersTo  = $pid OR  MemberOf != $pid" => { '-' => 1, c => 0, p => 1, rp => 1, rc1 => 1, rc2 => 1 },
+    "RefersTo != $pid OR  MemberOf  = $pid" => { '-' => 1, c => 1, p => 1, rp => 0, rc1 => 1, rc2 => 1 },
+    "RefersTo != $pid OR  MemberOf != $pid" => { '-' => 1, c => 1, p => 1, rp => 1, rc1 => 1, rc2 => 1 },
+);
+{
+    my $tix = RT::Tickets->new($RT::SystemUser);
+    $tix->FromSQL("Queue = '". $q->id ."'");
+    is($tix->Count, $total, "found $total tickets");
+}
+run_tests();
+

Modified: rt/branches/3.7-EXPERIMENTAL/t/ticket/search_by_watcher.t
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/t/ticket/search_by_watcher.t	(original)
+++ rt/branches/3.7-EXPERIMENTAL/t/ticket/search_by_watcher.t	Mon Feb 25 15:24:13 2008
@@ -3,13 +3,13 @@
 use strict;
 use warnings;
 
-use Test::More tests => 78;
+use Test::More tests => 79;
 use RT::Test;
 use RT::Ticket;
 
-my $q = RT::Queue->new( $RT::SystemUser );
-my $queue = 'SearchTests-'. rand(200);
-$q->Create( Name => $queue );
+my $q = RT::Test->load_or_create_queue( Name => 'Regression' );
+ok $q && $q->id, 'loaded or created queue';
+my $queue = $q->Name;
 
 my ($total, @data, @tickets, %test) = (0, ());
 

Modified: rt/branches/3.7-EXPERIMENTAL/t/web/compilation_errors.t
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/t/web/compilation_errors.t	(original)
+++ rt/branches/3.7-EXPERIMENTAL/t/web/compilation_errors.t	Mon Feb 25 15:24:13 2008
@@ -2,7 +2,7 @@
 
 use strict;
 use Test::More;
-plan tests => 391;
+plan tests => 395;
 use HTTP::Request::Common;
 use HTTP::Cookies;
 use LWP;


More information about the Rt-commit mailing list