import rt 3.8.9
[freeside.git] / rt / lib / t / regression / 22search_tix_by_watcher.t
index 4dd11af..204c41c 100644 (file)
@@ -3,7 +3,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 79;
+use Test::More tests => 119;
 use_ok('RT');
 RT::LoadConfig();
 RT::Init();
@@ -95,6 +95,56 @@ sub run_tests {
 }
 run_tests();
 
+# mixing searches by watchers with other conditions
+# http://rt3.fsck.com/Ticket/Display.html?id=9322
+%test = (
+    'Subject LIKE "x" AND Requestor = "y@example.com"' =>
+        { xy => 1, x => 0, y => 0, '-' => 0, z => 0 },
+    'Subject NOT LIKE "x" AND Requestor = "y@example.com"' =>
+        { xy => 0, x => 0, y => 1, '-' => 0, z => 0 },
+    'Subject LIKE "x" AND Requestor != "y@example.com"' =>
+        { xy => 0, x => 1, y => 0, '-' => 0, z => 0 },
+    'Subject NOT LIKE "x" AND Requestor != "y@example.com"' =>
+        { xy => 0, x => 0, y => 0, '-' => 1, z => 1 },
+
+    'Subject LIKE "x" OR Requestor = "y@example.com"' =>
+        { xy => 1, x => 1, y => 1, '-' => 0, z => 0 },
+    'Subject NOT LIKE "x" OR Requestor = "y@example.com"' =>
+        { xy => 1, x => 0, y => 1, '-' => 1, z => 1 },
+    'Subject LIKE "x" OR Requestor != "y@example.com"' =>
+        { xy => 1, x => 1, y => 0, '-' => 1, z => 1 },
+    'Subject NOT LIKE "x" OR Requestor != "y@example.com"' =>
+        { xy => 0, x => 1, y => 1, '-' => 1, z => 1 },
+
+# group of cases when user doesn't exist in DB at all
+    'Subject LIKE "x" AND Requestor = "not-exist@example.com"' =>
+        { xy => 0, x => 0, y => 0, '-' => 0, z => 0 },
+    'Subject NOT LIKE "x" AND Requestor = "not-exist@example.com"' =>
+        { xy => 0, x => 0, y => 0, '-' => 0, z => 0 },
+    'Subject LIKE "x" AND Requestor != "not-exist@example.com"' =>
+        { xy => 1, x => 1, y => 0, '-' => 0, z => 0 },
+    'Subject NOT LIKE "x" AND Requestor != "not-exist@example.com"' =>
+        { xy => 0, x => 0, y => 1, '-' => 1, z => 1 },
+    'Subject LIKE "x" OR Requestor = "not-exist@example.com"' =>
+        { xy => 1, x => 1, y => 0, '-' => 0, z => 0 },
+    'Subject NOT LIKE "x" OR Requestor = "not-exist@example.com"' =>
+        { xy => 0, x => 0, y => 1, '-' => 1, z => 1 },
+    'Subject LIKE "x" OR Requestor != "not-exist@example.com"' =>
+        { xy => 1, x => 1, y => 1, '-' => 1, z => 1 },
+    'Subject NOT LIKE "x" OR Requestor != "not-exist@example.com"' =>
+        { xy => 1, x => 1, y => 1, '-' => 1, z => 1 },
+
+    'Subject LIKE "z" AND (Requestor = "x@example.com" OR Requestor = "y@example.com")' =>
+        { xy => 0, x => 0, y => 0, '-' => 0, z => 0 },
+    'Subject NOT LIKE "z" AND (Requestor = "x@example.com" OR Requestor = "y@example.com")' =>
+        { xy => 1, x => 1, y => 1, '-' => 0, z => 0 },
+    'Subject LIKE "z" OR (Requestor = "x@example.com" OR Requestor = "y@example.com")' =>
+        { xy => 1, x => 1, y => 1, '-' => 0, z => 1 },
+    'Subject NOT LIKE "z" OR (Requestor = "x@example.com" OR Requestor = "y@example.com")' =>
+        { xy => 1, x => 1, y => 1, '-' => 1, z => 0 },
+);
+run_tests();
+
 TODO: {
     local $TODO = "we can't generate this query yet";
     %test = (
@@ -142,6 +192,7 @@ TODO: {
 }
 run_tests();
 
+
 # owner is special watcher because reference is duplicated in two places,
 # owner was an ENUM field now it's WATCHERFIELD, but should support old
 # style ENUM searches for backward compatibility