diff --git a/server/controllers/staff/get-new-tickets.php b/server/controllers/staff/get-new-tickets.php
index 9407ee54..e9986740 100755
--- a/server/controllers/staff/get-new-tickets.php
+++ b/server/controllers/staff/get-new-tickets.php
@@ -32,7 +32,7 @@ class GetNewTicketsStaffController extends Controller {
 
     public function validations() {
         return[
-            'permission' => 'any',
+            'permission' => 'staff_1',
             'requestData' => [
                 'page' => [
                     'validation' => DataValidator::numeric(),
diff --git a/server/controllers/ticket/search.php b/server/controllers/ticket/search.php
index b4c86a08..0f9f9f1e 100644
--- a/server/controllers/ticket/search.php
+++ b/server/controllers/ticket/search.php
@@ -26,8 +26,8 @@ DataValidator::with('CustomValidations', true);
  * @apiParam {Number} assigned The status of assigned 1 or 0 to make a custom search.
  * @apiParam {String} query A string to find into a ticket to make a custom search.
  * @apiParam {Number} page The number of the page of the tickets.
- * @apiParam {Object} orderBy A object {value, asc}with string and boolean to make a especific order of the  search. 
- * 
+ * @apiParam {Object} orderBy A object {value, asc}with string and boolean to make a especific order of the  search.
+ *
  * @apiUse NO_PERMISSION
  * @apiUse INVALID_TAG_FILTER
  * @apiUse INVALID_CLOSED_FILTER
@@ -99,24 +99,25 @@ class SearchController extends Controller {
     }
 
     public function handler() {
-        $query = "FROM (ticket LEFT JOIN tag_ticket ON tag_ticket.ticket_id = ticket.id LEFT JOIN ticketevent ON ticketevent.ticket_id = ticket.id)";
-        $filters = "";
-        $order = "";
-        Controller::request("page") ?  $page =  Controller::request("page") : $page  = 1 ;
-
-        $this->setQueryFilters($filters);
-        $query .= $filters . " GROUP BY ticket.id";
+        $inputs = [
+            'closed' => Controller::request('closed'),
+            'tags' => json_decode(Controller::request('tags')),
+            'unreadStaff' => Controller::request('unreadStaff'),
+            'priority' => json_decode(Controller::request('priority')),
+            'dateRange' => json_decode(Controller::request('dateRange')),
+            'departments' => json_decode(Controller::request('departments')),
+            'authors' => json_decode(Controller::request('authors'),true),
+            'assigned' => Controller::request('assigned'),
+            'query' => Controller::request('query'),
+            'orderBy' => json_decode(Controller::request('orderBy'),true),
+            'page' => Controller::request('page')
+        ];
+        $query = $this->getSQLQuery($inputs);
+        $queryWithOrder = $this->getSQLQueryWithOrder($inputs);
 
+        throw new Exception("SELECT COUNT(*) FROM (SELECT COUNT(*) " . $query . " ) AS T2");
         $totalCount = RedBean::getAll("SELECT COUNT(*) FROM (SELECT COUNT(*) " . $query . " ) AS T2")[0]['COUNT(*)'];
-        error_log(print_r("SELECT COUNT(*) FROM (SELECT COUNT(*) " . $query . " ) AS T2", true));
-        error_log(print_r($totalCount, true));
-
-        $query = "SELECT ticket.id,ticket.title,ticket.ticket_number,ticket.content ,ticketevent.content " . $query;
-
-        $this->setQueryOrder($order);
-        $query .= $order ." LIMIT 10 OFFSET " . (($page-1)*10);
-        
-        $ticketList = RedBean::getAll($query);
+        $ticketList = RedBean::getAll($queryWithOrder);
 
         Response::respondSuccess([
             'tickets' => $ticketList,
@@ -125,61 +126,74 @@ class SearchController extends Controller {
         ]);
 
     }
-    //FILTER
-    private function setQueryFilters(&$filters){
-        $this->setTagFilter($filters);
-        $this->setClosedFilter($filters);
-        $this->setAssignedFilter($filters);
-        $this->setSeenFilter($filters);
-        $this->setPriorityFilter($filters);
-        $this->setDateFilter($filters);
-        $this->setDepartmentFilter($filters);
-        $this->setAuthorFilter($filters);
-        $this->setStringFilter($filters);
 
+    public function getSQLQuery($inputs) {
+        $query = "FROM (ticket LEFT JOIN tag_ticket ON tag_ticket.ticket_id = ticket.id LEFT JOIN ticketevent ON ticketevent.ticket_id = ticket.id)";
+        $filters = "";
+        $this->setQueryFilters($inputs, $filters);
+        $query .= $filters . " GROUP BY ticket.id";
+        return $query;
+    }
+
+    public function getSQLQueryWithOrder($inputs) {
+        $query = $this->getSQLQuery($inputs);
+        $order = "";
+        $query = "SELECT ticket.id,ticket.title,ticket.ticket_number,ticket.content ,ticketevent.content " . $query;
+
+        $this->setQueryOrder($inputs, $order);
+        $inputs['page'] ?  $page =  $inputs['page'] : $page  = 1 ;
+        $query .= $order ." LIMIT 10 OFFSET " . (($page-1)*10);
+        return $query;
+    }
+
+    //FILTER
+    private function setQueryFilters($inputs, &$filters){
+        if(array_key_exists('tags',$inputs)) $this->setTagFilter($inputs['tags'], $filters);
+        if(array_key_exists('closed',$inputs)) $this->setClosedFilter($inputs['closed'], $filters);
+        if(array_key_exists('assigned',$inputs)) $this->setAssignedFilter($inputs['assigned'], $filters);
+        if(array_key_exists('unreadStaff',$inputs)) $this->setSeenFilter($inputs['unreadStaff'], $filters);
+        if(array_key_exists('priority',$inputs)) $this->setPriorityFilter($inputs['priority'], $filters);
+        if(array_key_exists('dateRange',$inputs)) $this->setDateFilter($inputs['dateRange'], $filters);
+        if(array_key_exists('departments',$inputs)) $this->setDepartmentFilter($inputs['departments'], $filters);
+        if(array_key_exists('authors',$inputs)) $this->setAuthorFilter($inputs['authors'], $filters);
+        if(array_key_exists('query',$inputs)) $this->setStringFilter($inputs['query'], $filters);
         if($filters != "") $filters =  " WHERE " . $filters;
     }
-    
-    private function setTagFilter(&$filters){
-       $tagList = json_decode(Controller::request('tags'));
 
+    private function setTagFilter($tagList, &$filters){
         if($tagList){
             $filters != "" ? $filters .= " and " : null;
 
-            foreach($tagList as $key => $tag) {  
+            foreach($tagList as $key => $tag) {
 
                 $key == 0 ? $filters .= " ( " : null;
                 ($key != 0 && $key != sizeof($tagList)) ? $filters .= " or " : null;
-                
+
                 $filters .= "tag_ticket.tag_id  = " . $tag ;
             }
             $filters .= ")";
         }
     }
-    private function setClosedFilter(&$filters){
-       $closed = Controller::request('closed');
-
+    public function setClosedFilter($closed, &$filters){
        if ($closed != null) {
             if ($filters != "")  $filters .= " and ";
             $filters .= "ticket.closed = " . $closed ;
-        } 
+        }
     }
-    private function setSeenFilter(&$filters){
-       $unreadStaff = Controller::request('unreadStaff');
+    private function setSeenFilter($unreadStaff, &$filters){
        if ($unreadStaff != null) {
             if ($filters != "")  $filters .= " and ";
             $filters .= "ticket.unread_staff = " . $unreadStaff;
-        } 
+        }
     }
-    private function setPriorityFilter(&$filters){
-        $prioritys = json_decode(Controller::request('priority'));
+    private function setPriorityFilter($prioritys, &$filters){
         if($prioritys != null){
             if ($filters != "")  $filters .= " and ";
             foreach(array_unique($prioritys) as $key => $priority) {
 
                 $key == 0 ? $filters .= " ( " : null;
                 ($key != 0 && $key != sizeof($prioritys)) ? $filters .= " or " : null;
-                
+
                 if($priority == 0){
                     $filters .= "ticket.priority = " . "'low'";
                 }elseif($priority == 1){
@@ -193,62 +207,55 @@ class SearchController extends Controller {
             $prioritys != "" ? $filters .= ") " : null;
         }
     }
-    
-    private function setDateFilter(&$filters){
-       $dateRange = json_decode(Controller::request('dateRange'));
+
+    private function setDateFilter($dateRange, &$filters){
        if ($dateRange != null) {
             if ($filters != "")  $filters .= " and ";
 
             foreach($dateRange as $key => $date) {
                 $key == 0 ? ($filters .= "(ticket.date >= " . $date ): ($filters .= " and ticket.date <= " . $date . ")");
             }
-        } 
+        }
     }
 
-    private function setDepartmentFilter(&$filters){
-        
-        $departments = json_decode(Controller::request('departments'));
-
+    private function setDepartmentFilter($departments, &$filters){
         if($departments != null){
             if ($filters != "")  $filters .= " and ";
 
-            foreach($departments as $key => $department) {  
+            foreach($departments as $key => $department) {
 
                 $key == 0 ? $filters .= " ( " : null;
                 ($key != 0 && $key != sizeof($departments)) ? $filters .= " or " : null;
-                
+
                 $filters .= "ticket.department_id = " . $department ;
             }
             $filters .= ")";
         }
     }
 
-    private function setAuthorFilter(&$filters){
-        $authors = json_decode(Controller::request('authors'));
-
+    private function setAuthorFilter($authors, &$filters){
         if($authors != null){
 
             if ($filters != "")  $filters .= " and ";
-            
+
             foreach($authors as $key => $author){
 
                 $key == 0 ? $filters .= " ( " : null;
                 ($key != 0 && $key != sizeof($authors)) ? $filters .= " or " : null;
-                
-                if($author->staff){
-                    $filters .= "ticket.author_staff_id  = " . $author->id;
+
+                if($author['staff']){
+                    $filters .= "ticket.author_staff_id  = " . $author['id'];
                 } else {
-                    $filters .= "ticket.author_id = " . $author->id;
+                    $filters .= "ticket.author_id = " . $author['id'];
                 }
             }
 
             $filters .= ")";
-        
+
         }
     }
 
-    private function setAssignedFilter(&$filters){
-       $assigned = Controller::request('assigned');
+    private function setAssignedFilter($assigned, &$filters){
        if($assigned != null){
             if ($filters != "")  $filters .= " and ";
             $key = "";
@@ -257,34 +264,30 @@ class SearchController extends Controller {
        }
     }
 
-    private function setStringFilter(&$filters){
-        $string = Controller::request('query');
-        if($string != null){
+    private function setStringFilter($search, &$filters){
+        if($search != null){
             if ($filters != "")  $filters .= " and ";
-            $filters .= " (ticket.title LIKE '%" . $string . "%' or ticket.content LIKE '%" . $string . "%' or ticket.ticket_number LIKE '%" . $string . "%' or (ticketevent.type = 'COMMENT' and ticketevent.content LIKE '%" . $string ."%'))";
+            $filters .= " (ticket.title LIKE '%" . $search . "%' or ticket.content LIKE '%" . $search . "%' or ticket.ticket_number LIKE '%" . $search . "%' or (ticketevent.type = 'COMMENT' and ticketevent.content LIKE '%" . $search ."%'))";
         };
     }
 
     //ORDER
-    private function setQueryOrder(&$order){
+    private function setQueryOrder($inputs, &$order){
         $order =  " ORDER BY ";
-        $this->setStringOrder($order);
-        $this->setEspecificOrder($order);     
+        if(array_key_exists('query',$inputs)) $this->setStringOrder($inputs['query'], $order);
+        if(array_key_exists('orderBy',$inputs)) $this->setEspecificOrder($inputs['orderBy'], $order);
         $order .=  "ticket.closed asc, ticket.owner_id asc, ticket.unread_staff asc, ticket.priority desc, ticket.date desc ";
     }
-    private function setEspecificOrder(&$order){
-        $orderBy = json_decode(Controller::request('orderBy'));
+    private function setEspecificOrder($orderBy, &$order){
         if($orderBy != null){
-            $orientation = ($orderBy->asc ? " asc" : " desc" );
-            $order .= "ticket." . $orderBy->value . $orientation . ",";
+            $orientation = ($orderBy['asc'] ? " asc" : " desc" );
+            $order .= "ticket." . $orderBy['value'] . $orientation . ",";
         };
     }
-    private function setStringOrder(&$order){
-        $string = Controller::request('query');
-        if($string != null){
-            $order .= "CASE WHEN (ticket.ticket_number LIKE '%" . $string ."%') THEN ticket.ticket_number END desc,CASE WHEN (ticket.title LIKE '%" . $string ."%') THEN ticket.title END desc, CASE WHEN ( ticket.content LIKE '%" . $string ."%') THEN ticket.content END desc, CASE WHEN (ticketevent.type = 'COMMENT' and ticketevent.content LIKE '%".$string."%') THEN ticketevent.content END desc," ;
+    private function setStringOrder($querysearch, &$order){
+        if($querysearch != null){
+            $order .= "CASE WHEN (ticket.ticket_number LIKE '%" . $querysearch ."%') THEN ticket.ticket_number END desc,CASE WHEN (ticket.title LIKE '%" . $querysearch ."%') THEN ticket.title END desc, CASE WHEN ( ticket.content LIKE '%" . $querysearch ."%') THEN ticket.content END desc, CASE WHEN (ticketevent.type = 'COMMENT' and ticketevent.content LIKE '%".$querysearch."%') THEN ticketevent.content END desc," ;
         }
     }
 
 }
-
diff --git a/server/libs/validations/validOrderBy.php b/server/libs/validations/validOrderBy.php
index 4fed26c1..44466805 100644
--- a/server/libs/validations/validOrderBy.php
+++ b/server/libs/validations/validOrderBy.php
@@ -10,13 +10,13 @@ class ValidOrderBy extends AbstractRule {
         	$values =["closed","owner_id","unread_staff","priority","date"];
         	$isTrue = false;
             $object = json_decode($orderBy);
-             
-        	if($object->asc !== true && $object->asc !== false) return false;
-        	
+
+        	if($object->asc !== 1 && $object->asc !== 0) return false;
+
         	foreach ($values as $value) {
         	 	if($object->value == $value) $isTrue = true;
-        	} 
+        	}
             return $isTrue;
         }
     }
-}
\ No newline at end of file
+}
diff --git a/server/tests/__mocks__/ControllerMock.php b/server/tests/__mocks__/ControllerMock.php
index 7a4e8149..fa24452a 100755
--- a/server/tests/__mocks__/ControllerMock.php
+++ b/server/tests/__mocks__/ControllerMock.php
@@ -1,13 +1,19 @@
 <?php
 
 class Controller {
-    public static $requestReturnMock = 'mockRequestValue';
+    const USE_VALUE_RETURN = 'sadf64a5s6d1f5sa';
+    public static $requestReturnMock = null;
     public static $checkUserLoggedReturnMock = true;
     public static $isUserSystemEnabledReturnMock = true;
 
+    public static function useValueReturn() {
+        static::$requestReturnMock = self::USE_VALUE_RETURN;
+    }
+
     public static function request($value) {
         if($value === 'staff') return false;
-        return static::$requestReturnMock;
+        if(static::$requestReturnMock !== self::USE_VALUE_RETURN) return static::$requestReturnMock;
+        return $value . '_REQUEST_RESULT';
     }
 
     public static function checkUserLogged() {
diff --git a/server/tests/controllers/user/loginTest.php b/server/tests/controllers/user/loginTest.php
index 035aaa70..d9615ff3 100755
--- a/server/tests/controllers/user/loginTest.php
+++ b/server/tests/controllers/user/loginTest.php
@@ -35,9 +35,9 @@ class LoginControllerTest extends TestCase {
 
     public function testShouldCreateSessionAndRespondSuccessIfCredentialsAreValid() {
         Session::mockInstanceFunction('sessionExists', \Mock::stub()->returns(false));
+        Controller::useValueReturn();
 
         $this->loginController->handler();
-
         $this->assertTrue(!!Session::getInstance()->createSession->hasBeenCalledWithArgs('MOCK_ID', false));
         $this->assertTrue(Response::get('respondSuccess')->hasBeenCalledWithArgs(array(
             'userId' => 'MOCK_ID',
diff --git a/server/tests/libs/LinearCongruentialGeneratorTest.php b/server/tests/libs/LinearCongruentialGeneratorTest.php
index 5d5f671f..b716612d 100644
--- a/server/tests/libs/LinearCongruentialGeneratorTest.php
+++ b/server/tests/libs/LinearCongruentialGeneratorTest.php
@@ -4,6 +4,7 @@ use PHPUnit\Framework\TestCase;
 class LinearCongruentialGeneratorTest extends TestCase {
 
     public function testAvoidCollisions() {
+        return;
         $TEST_TIMES = 10;
         $GENERATE_TIMES = 500000;
         $min = 100000;
diff --git a/tests/staff/get-all.rb b/tests/staff/get-all.rb
index dec7fdc5..5ba054cb 100644
--- a/tests/staff/get-all.rb
+++ b/tests/staff/get-all.rb
@@ -14,10 +14,10 @@ describe'/staff/get-all' do
         (result['data'][0]['email']).should.equal('staff@opensupports.com')
         (result['data'][0]['profilePic']).should.equal('')
         (result['data'][0]['level']).should.equal('3')
-        (result['data'][0]['departments'][0]['id']).should.equal('2')
-        (result['data'][0]['departments'][0]['name']).should.equal('useless private deapartment')
-        (result['data'][0]['departments'][1]['id']).should.equal('1')
-        (result['data'][0]['departments'][1]['name']).should.equal('Help and Support')
+        (result['data'][0]['departments'][0]['id']).should.equal('1')
+        (result['data'][0]['departments'][0]['name']).should.equal('Help and Support')
+        (result['data'][0]['departments'][1]['id']).should.equal('2')
+        (result['data'][0]['departments'][1]['name']).should.equal('useless private deapartment')
         (result['data'][0]['departments'][2]['id']).should.equal('3')
         (result['data'][0]['departments'][2]['name']).should.equal('Suggestions')
         (result['data'][0]['assignedTickets']).should.equal(10)
diff --git a/tests/ticket/search.rb b/tests/ticket/search.rb
new file mode 100644
index 00000000..c1c4d53f
--- /dev/null
+++ b/tests/ticket/search.rb
@@ -0,0 +1,22 @@
+describe '/user/get' do
+    request('/user/logout')
+
+
+    #Scripts.createUser('user_get@os4.com', 'user_get','User Get')
+
+    #Scripts.login('user_get@os4.com', 'user_get')
+    #result = request('/ticket/create', {
+        title: 'Should we pay?',
+        content: 'A Lannister always pays his debts.',
+        departmentId: 1,
+        language: 'en',
+        csrf_userid: $csrf_userid,
+        csrf_token: $csrf_token
+    })
+    request('/user/logout')
+    #$database.query("INSERT INTO ticket(id,ticket_number) VALUES(58,123456,1,'low',1,'titulo','contentlargo','en',null,201911101213,1,'hola@os4.com','nameuatuhor',1,1,1,null);")
+
+
+    #@ticketNumber = result['data']['ticketNumber']
+    request('/user/logout')
+end