Add testSimpleProfile.
authorFlorent Bruneau <florent.bruneau@polytechnique.org>
Sat, 1 May 2010 15:48:34 +0000 (17:48 +0200)
committerFlorent Bruneau <florent.bruneau@polytechnique.org>
Sat, 1 May 2010 15:48:34 +0000 (17:48 +0200)
Signed-off-by: Florent Bruneau <florent.bruneau@polytechnique.org>
core
ut/userfiltertest.php

diff --git a/core b/core
index 983284b..737f137 160000 (submodule)
--- a/core
+++ b/core
@@ -1 +1 @@
-Subproject commit 983284ba502852d0d50c9073274d6de3001acab6
+Subproject commit 737f1378c3bcebbbbf04fef0c0ffb9c99a1e4946
index da1d6d2..8f0baca 100644 (file)
@@ -32,6 +32,34 @@ class UserFilterTest extends PlTestCase
         }
     }
 
+    private static function buildAccountQuery()
+    {
+        $args = func_get_args();
+        $joinsAndWhere = XDB::_prepare($args);
+        return array('SELECT  DISTINCT a.uid
+                        FROM  accounts AS a
+                          ' . $joinsAndWhere,
+                     'SELECT  DISTINCT p.pid
+                        FROM  profiles AS p
+                  INNER JOIN  account_profiles AS ap ON (ap.pid = p.pid AND FIND_IN_SET(\'owner\', perms))
+                  INNER JOIN  accounts AS a ON (a.uid = ap.uid)
+                          ' . $joinsAndWhere);
+    }
+
+    private static function buildProfileQuery()
+    {
+        $args = func_get_args();
+        $joinsAndWhere = XDB::_prepare($args);
+        return array('SELECT  DISTINCT a.uid
+                        FROM  accounts AS a
+                  INNER JOIN  account_profiles AS ap ON (ap.uid = a.uid AND FIND_IN_SET(\'owner\', perms))
+                  INNER JOIN  profiles AS p ON (p.pid = ap.pid)
+                           ' . $joinsAndWhere,
+                     'SELECT  DISTINCT p.pid
+                        FROM  profiles AS p
+                          ' . $joinsAndWhere);
+    }
+
     public static function simpleUserProvider()
     {
         self::checkPlatal();
@@ -40,64 +68,41 @@ class UserFilterTest extends PlTestCase
         $tests[] = array(
             /* UFC_Hrpid
              */
-            array('SELECT  DISTINCT uid
-                     FROM  account_profiles
-                    WHERE  FIND_IN_SET(\'owner\', perms)',
+            array(self::buildAccountQuery('INNER JOIN  account_profiles AS ap2 ON (ap2.uid = a.uid)
+                                                WHERE  FIND_IN_SET(\'owner\', ap2.perms)'),
                   new UFC_HasProfile(), -1),
 
             /* UFC_Hruid
              */
-            array(XDB::format('SELECT  DISTINCT uid
-                                 FROM  accounts
-                                WHERE  hruid = {?}', 'florent.bruneau.2003'),
+            array(self::buildAccountQuery('WHERE  a.hruid = {?}', 'florent.bruneau.2003'),
                   new UFC_Hruid('florent.bruneau.2003'), 1),
-            array(XDB::format('SELECT  DISTINCT uid
-                                 FROM  accounts
-                                WHERE  hruid = {?}', 'florent.bruneau.2004'),
+            array(self::buildAccountQuery('WHERE  a.hruid = {?}', 'florent.bruneau.2004'),
                   new UFC_Hruid('florent.bruneau.2004'), 0),
-            array(XDB::format('SELECT  DISTINCT uid
-                                 FROM  accounts
-                                WHERE  hruid IN {?}', array('florent.bruneau.2003',
-                                                            'stephane.jacob.2004')),
+            array(self::buildAccountQuery('WHERE  a.hruid IN {?}', array('florent.bruneau.2003',
+                                                                       'stephane.jacob.2004')),
                   new UFC_Hruid('florent.bruneau.2003', 'stephane.jacob.2004'), 2),
-            array(XDB::format('SELECT  DISTINCT uid
-                                 FROM  accounts
-                                WHERE  hruid IN {?}', array('florent.bruneau.2004',
-                                                            'stephane.jacob.2004')),
+            array(self::buildAccountQuery('WHERE  a.hruid IN {?}', array('florent.bruneau.2004',
+                                                                       'stephane.jacob.2004')),
                   new UFC_Hruid('florent.bruneau.2004', 'stephane.jacob.2004'), 1),
 
             /* UFC_Hrpid
              */
-            array(XDB::format('SELECT  DISTINCT uid
-                                 FROM  account_profiles AS ap
-                           INNER JOIN  profiles AS p ON (ap.pid = p.pid AND FIND_IN_SET(\'owner\', perms))
-                                WHERE  hrpid = {?}', 'florent.bruneau.2003'),
+            array(self::buildProfileQuery('WHERE  p.hrpid = {?}', 'florent.bruneau.2003'),
                   new UFC_Hrpid('florent.bruneau.2003'), 1),
-            array(XDB::format('SELECT  DISTINCT uid
-                                 FROM  account_profiles AS ap
-                           INNER JOIN  profiles AS p ON (ap.pid = p.pid AND FIND_IN_SET(\'owner\', perms))
-                                WHERE  hrpid = {?}', 'florent.bruneau.2004'),
+            array(self::buildProfileQuery('WHERE  p.hrpid = {?}', 'florent.bruneau.2004'),
                   new UFC_Hrpid('florent.bruneau.2004'), 0),
-            array(XDB::format('SELECT  DISTINCT uid
-                                 FROM  account_profiles AS ap
-                           INNER JOIN  profiles AS p ON (ap.pid = p.pid AND FIND_IN_SET(\'owner\', perms))
-                                WHERE  hrpid IN {?}', array('florent.bruneau.2003',
-                                                            'stephane.jacob.2004')),
+            array(self::buildProfileQuery('WHERE  p.hrpid IN {?}', array('florent.bruneau.2003',
+                                                                        'stephane.jacob.2004')),
                   new UFC_Hrpid('florent.bruneau.2003', 'stephane.jacob.2004'), 2),
-            array(XDB::format('SELECT  DISTINCT uid
-                                 FROM  account_profiles AS ap
-                           INNER JOIN  profiles AS p ON (ap.pid = p.pid AND FIND_IN_SET(\'owner\', perms))
-                                WHERE  hrpid IN {?}', array('florent.bruneau.2004',
-                                                            'stephane.jacob.2004')),
+            array(self::buildProfileQuery('WHERE  p.hrpid IN {?}', array('florent.bruneau.2004',
+                                                                       'stephane.jacob.2004')),
                   new UFC_Hrpid('florent.bruneau.2004', 'stephane.jacob.2004'), 1),
 
             /* UFC_IP
              */
-            array(XDB::format('SELECT  DISTINCT a.uid
-                                 FROM  log_sessions
-                           INNER JOIN  accounts AS a USING(uid)
-                                WHERE  ip = {?} OR forward_ip = {?}',
-                              ip_to_uint('129.104.247.2'), ip_to_uint('129.104.247.2')),
+            array(self::buildAccountQuery('INNER JOIN  log_sessions AS s ON (s.uid = a.uid)
+                                                WHERE  s.ip = {?} OR s.forward_ip = {?}',
+                                          ip_to_uint('129.104.247.2'), ip_to_uint('129.104.247.2')),
                   new UFC_Ip('129.104.247.2'), -1),
         );
             /* TODO: UFC_Comment
@@ -106,58 +111,42 @@ class UserFilterTest extends PlTestCase
             /* UFC_Promo
              */
         $tests[] = array(
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                           INNER JOIN  profile_display AS pd ON (pd.pid = ap.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  pd.promo = {?}', 'X2004'),
+            array(self::buildProfileQuery('INNER JOIN  profile_display AS pd ON (pd.pid = p.pid)
+                                                WHERE  pd.promo = {?}', 'X2004'),
                 new UFC_Promo('=', UserFilter::DISPLAY, 'X2004'), -1),
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                           INNER JOIN  profile_display AS pd ON (pd.pid = ap.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  pd.promo < {?}', 'X2004'),
+            array(self::buildProfileQuery('INNER JOIN  profile_display AS pd ON (pd.pid = p.pid)
+                                                WHERE  pd.promo < {?}', 'X2004'),
                 new UFC_Promo('<', UserFilter::DISPLAY, 'X2004'), -1),
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                           INNER JOIN  profile_display AS pd ON (pd.pid = ap.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  pd.promo > {?}', 'X2004'),
+            array(self::buildProfileQuery('INNER JOIN  profile_display AS pd ON (pd.pid = p.pid)
+                                                WHERE  pd.promo > {?}', 'X2004'),
                 new UFC_Promo('>', UserFilter::DISPLAY, 'X2004'), -1),
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                           INNER JOIN  profile_display AS pd ON (pd.pid = ap.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  pd.promo < {?}', 'X1900'),
+            array(self::buildProfileQuery('INNER JOIN  profile_display AS pd ON (pd.pid = p.pid)
+                                                WHERE  pd.promo < {?}', 'X1900'),
                 new UFC_Promo('<', UserFilter::DISPLAY, 'X1900'), 0),
 
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                           INNER JOIN  profile_education AS pe ON (pe.pid = ap.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                            LEFT JOIN  profile_education_enum AS pee ON (pe.eduid = pee.id)
-                            LEFT JOIN  profile_education_degree_enum AS pede ON (pe.degreeid = pede.id)
-                                WHERE  pe.entry_year = {?} AND pee.abbreviation = \'X\' AND pede.abbreviation = {?}',
-                                '2004', 'Ing.'),
+            array(self::buildProfileQuery('INNER JOIN  profile_education AS pe ON (pe.pid = p.pid)
+                                            LEFT JOIN  profile_education_enum AS pee ON (pe.eduid = pee.id)
+                                            LEFT JOIN  profile_education_degree_enum AS pede ON (pe.degreeid = pede.id)
+                                                WHERE  pe.entry_year = {?} AND pee.abbreviation = \'X\' AND pede.abbreviation = {?}',
+                                          '2004', 'Ing.'),
                 new UFC_Promo('=', UserFilter::GRADE_ING, 2004), -1),
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                           INNER JOIN  profile_education AS pe ON (pe.pid = ap.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                            LEFT JOIN  profile_education_enum AS pee ON (pe.eduid = pee.id)
-                            LEFT JOIN  profile_education_degree_enum AS pede ON (pe.degreeid = pede.id)
-                                WHERE  pe.entry_year <= {?} AND pee.abbreviation = \'X\' AND pede.abbreviation = {?}',
-                                '1960', 'Ing.'),
+            array(self::buildProfileQuery('INNER JOIN  profile_education AS pe ON (pe.pid = p.pid)
+                                            LEFT JOIN  profile_education_enum AS pee ON (pe.eduid = pee.id)
+                                            LEFT JOIN  profile_education_degree_enum AS pede ON (pe.degreeid = pede.id)
+                                                WHERE  pe.entry_year <= {?} AND pee.abbreviation = \'X\' AND pede.abbreviation = {?}',
+                                          '1960', 'Ing.'),
                 new UFC_Promo('<=', UserFilter::GRADE_ING, 1960), -1),
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                           INNER JOIN  profile_education AS pe ON (pe.pid = ap.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                            LEFT JOIN  profile_education_enum AS pee ON (pe.eduid = pee.id)
-                            LEFT JOIN  profile_education_degree_enum AS pede ON (pe.degreeid = pede.id)
-                                WHERE  pe.entry_year > {?} AND pee.abbreviation = \'X\' AND pede.abbreviation = {?}',
-                                '2004', 'Ing.'),
+            array(self::buildProfileQuery('INNER JOIN  profile_education AS pe ON (pe.pid = p.pid)
+                                            LEFT JOIN  profile_education_enum AS pee ON (pe.eduid = pee.id)
+                                            LEFT JOIN  profile_education_degree_enum AS pede ON (pe.degreeid = pede.id)
+                                                WHERE  pe.entry_year > {?} AND pee.abbreviation = \'X\' AND pede.abbreviation = {?}',
+                                          '2004', 'Ing.'),
                 new UFC_Promo('>', UserFilter::GRADE_ING, 2004), -1),
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                           INNER JOIN  profile_education AS pe ON (pe.pid = ap.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                            LEFT JOIN  profile_education_enum AS pee ON (pe.eduid = pee.id)
-                            LEFT JOIN  profile_education_degree_enum AS pede ON (pe.degreeid = pede.id)
-                                WHERE  pe.entry_year < {?} AND pee.abbreviation = \'X\' AND pede.abbreviation = {?}',
-                                '1900', 'Ing.'),
+            array(self::buildProfileQuery('INNER JOIN  profile_education AS pe ON (pe.pid = p.pid)
+                                            LEFT JOIN  profile_education_enum AS pee ON (pe.eduid = pee.id)
+                                            LEFT JOIN  profile_education_degree_enum AS pede ON (pe.degreeid = pede.id)
+                                                WHERE  pe.entry_year < {?} AND pee.abbreviation = \'X\' AND pede.abbreviation = {?}',
+                                          '1900', 'Ing.'),
                 new UFC_Promo('<', UserFilter::GRADE_ING, 1900), 0),
 
             /* XXX : tests disabled until there are Masters and doctors in the DB
@@ -240,17 +229,13 @@ class UserFilterTest extends PlTestCase
                                        FROM  profile_education_enum
                                       WHERE  abbreviation = {?}', 'HEC');
         $tests[] = array(
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                           INNER JOIN  profile_education AS pe ON (pe.pid = ap.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                            LEFT JOIN  profile_education_enum AS pee ON (pe.eduid = pee.id)
-                                WHERE  pee.abbreviation = {?}', 'X'),
+            array(self::buildProfileQuery('INNER JOIN  profile_education AS pe ON (pe.pid = p.pid)
+                                            LEFT JOIN  profile_education_enum AS pee ON (pe.eduid = pee.id)
+                                                WHERE  pee.abbreviation = {?}', 'X'),
                 new UFC_EducationSchool($id_X), -1),
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                           INNER JOIN  profile_education AS pe ON (pe.pid = ap.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                            LEFT JOIN  profile_education_enum AS pee ON (pe.eduid = pee.id)
-                                WHERE  pee.abbreviation IN {?}', array('X', 'HEC')),
+            array(self::buildProfileQuery('INNER JOIN  profile_education AS pe ON (pe.pid = p.pid)
+                                            LEFT JOIN  profile_education_enum AS pee ON (pe.eduid = pee.id)
+                                                WHERE  pee.abbreviation IN {?}', array('X', 'HEC')),
                 new UFC_EducationSchool($id_X, $id_HEC), -1),
         );
 
@@ -263,17 +248,13 @@ class UserFilterTest extends PlTestCase
                                              FROM  profile_education_degree_enum
                                             WHERE  abbreviation = {?}', 'PhD');
         $tests[] = array(
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                           INNER JOIN  profile_education AS pe ON (pe.pid = ap.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                            LEFT JOIN  profile_education_degree_enum AS pede ON (pe.degreeid = pede.id)
-                                WHERE  pede.abbreviation = {?}', 'Ing.'),
+            array(self::buildProfileQuery('INNER JOIN  profile_education AS pe ON (pe.pid = p.pid)
+                                            LEFT JOIN  profile_education_degree_enum AS pede ON (pe.degreeid = pede.id)
+                                                WHERE  pede.abbreviation = {?}', 'Ing.'),
                 new UFC_EducationDegree($id_DegreeIng), -1),
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                           INNER JOIN  profile_education AS pe ON (pe.pid = ap.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                            LEFT JOIN  profile_education_degree_enum AS pede ON (pe.degreeid = pede.id)
-                                WHERE  pede.abbreviation IN {?}', array('Ing.', 'PhD')),
+            array(self::buildProfileQuery('INNER JOIN  profile_education AS pe ON (pe.pid = p.pid)
+                                            LEFT JOIN  profile_education_degree_enum AS pede ON (pe.degreeid = pede.id)
+                                                WHERE  pede.abbreviation IN {?}', array('Ing.', 'PhD')),
                 new UFC_EducationDegree($id_DegreeIng, $id_DegreePhd), -1),
         );
             /* UFC_EducationField
@@ -286,17 +267,13 @@ class UserFilterTest extends PlTestCase
                                              WHERE  field = {?}', 'Droit');
         // FIXME: Replace 0 by -1 in following queries when profile_education will be filled with fieldids
         $tests[] = array(
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                           INNER JOIN  profile_education AS pe ON (pe.pid = ap.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                            LEFT JOIN  profile_education_field_enum AS pefe ON (pe.fieldid = pefe.id)
-                                WHERE  pefe.field = {?}', 'Informatique'),
+            array(self::buildProfileQuery('INNER JOIN  profile_education AS pe ON (pe.pid = p.pid)
+                                            LEFT JOIN  profile_education_field_enum AS pefe ON (pe.fieldid = pefe.id)
+                                                WHERE  pefe.field = {?}', 'Informatique'),
                 new UFC_EducationField($id_FieldInfo), 0), // FIXME: should be -1
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                           INNER JOIN  profile_education AS pe ON (pe.pid = ap.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                            LEFT JOIN  profile_education_field_enum AS pefe ON (pe.fieldid = pefe.id)
-                                WHERE  pefe.field IN {?}', array('Informatique', 'Droit')),
+            array(self::buildProfileQuery('INNER JOIN  profile_education AS pe ON (pe.pid = p.pid)
+                                            LEFT JOIN  profile_education_field_enum AS pefe ON (pe.fieldid = pefe.id)
+                                                WHERE  pefe.field IN {?}', array('Informatique', 'Droit')),
                 new UFC_EducationField($id_FieldInfo, $id_FieldDroit), 0), // FIXME: should be -1
         );
 
@@ -310,142 +287,92 @@ class UserFilterTest extends PlTestCase
 
         $tests[] = array(
             // Lastname
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                            LEFT JOIN  profile_name AS pn ON (ap.pid = pn.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  pn.name LIKE {?} AND pn.typeid = {?}', 'BARROIS', $id_Lastname),
+            array(self::buildProfileQuery('LEFT JOIN  profile_name AS pn ON (pn.pid = p.pid)
+                                               WHERE  pn.name LIKE {?} AND pn.typeid = {?}', 'BARROIS', $id_Lastname),
                 new UFC_Name(Profile::LASTNAME, 'BARROIS', UFC_Name::EXACT), -1),
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                            LEFT JOIN  profile_name AS pn ON (ap.pid = pn.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  pn.name LIKE \'BARR%\' AND pn.typeid = {?}', $id_Lastname),
+            array(self::buildProfileQuery('LEFT JOIN  profile_name AS pn ON (pn.pid = p.pid)
+                                               WHERE  pn.name LIKE \'BARR%\' AND pn.typeid = {?}', $id_Lastname),
                 new UFC_Name(Profile::LASTNAME, 'BARR', UFC_Name::PREFIX), -1),
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                            LEFT JOIN  profile_name AS pn ON (ap.pid = pn.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  pn.name LIKE \'%OIS\' AND pn.typeid = {?}', $id_Lastname),
+            array(self::buildProfileQuery('LEFT JOIN  profile_name AS pn ON (pn.pid = p.pid)
+                                               WHERE  pn.name LIKE \'%OIS\' AND pn.typeid = {?}', $id_Lastname),
                 new UFC_Name(Profile::LASTNAME, 'OIS', UFC_Name::SUFFIX), -1),
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                            LEFT JOIN  profile_name AS pn ON (ap.pid = pn.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  pn.name LIKE \'%ARRO%\' AND pn.typeid = {?}', $id_Lastname),
+            array(self::buildProfileQuery('LEFT JOIN  profile_name AS pn ON (p.pid = pn.pid)
+                                               WHERE  pn.name LIKE \'%ARRO%\' AND pn.typeid = {?}', $id_Lastname),
                 new UFC_Name(Profile::LASTNAME, 'ARRO', UFC_Name::CONTAINS), -1),
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                            LEFT JOIN  profile_name AS pn ON (ap.pid = pn.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  pn.name LIKE \'%ZZZZZZ%\' AND pn.typeid = {?}', $id_Lastname),
+            array(self::buildProfileQuery('LEFT JOIN  profile_name AS pn ON (p.pid = pn.pid)
+                                               WHERE  pn.name LIKE \'%ZZZZZZ%\' AND pn.typeid = {?}', $id_Lastname),
                 new UFC_Name(Profile::LASTNAME, 'ZZZZZZ', UFC_Name::CONTAINS), 0),
 
             // Firstname
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                            LEFT JOIN  profile_name AS pn ON (ap.pid = pn.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  pn.name LIKE {?} AND pn.typeid = {?}', 'Raphaël', $id_Firstname),
+            array(self::buildProfileQuery('LEFT JOIN  profile_name AS pn ON (p.pid = pn.pid)
+                                               WHERE  pn.name LIKE {?} AND pn.typeid = {?}', 'Raphaël', $id_Firstname),
                 new UFC_Name(Profile::FIRSTNAME, 'Raphaël', UFC_Name::EXACT), -1),
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                            LEFT JOIN  profile_name AS pn ON (ap.pid = pn.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  pn.name LIKE \'Raph%\' AND pn.typeid = {?}', $id_Firstname),
+            array(self::buildProfileQuery('LEFT JOIN  profile_name AS pn ON (p.pid = pn.pid)
+                                               WHERE  pn.name LIKE \'Raph%\' AND pn.typeid = {?}', $id_Firstname),
                 new UFC_Name(Profile::FIRSTNAME, 'Raph', UFC_Name::PREFIX), -1),
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                            LEFT JOIN  profile_name AS pn ON (ap.pid = pn.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  pn.name LIKE \'%aël\' AND pn.typeid = {?}', $id_Firstname),
+            array(self::buildProfileQuery('LEFT JOIN  profile_name AS pn ON (p.pid = pn.pid)
+                                               WHERE  pn.name LIKE \'%aël\' AND pn.typeid = {?}', $id_Firstname),
                 new UFC_Name(Profile::FIRSTNAME, 'aël', UFC_Name::SUFFIX), -1),
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                            LEFT JOIN  profile_name AS pn ON (ap.pid = pn.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  pn.name LIKE \'%apha%\' AND pn.typeid = {?}', $id_Firstname),
+            array(self::buildProfileQuery('LEFT JOIN  profile_name AS pn ON (p.pid = pn.pid)
+                                               WHERE  pn.name LIKE \'%apha%\' AND pn.typeid = {?}', $id_Firstname),
                 new UFC_Name(Profile::FIRSTNAME, 'apha', UFC_Name::CONTAINS), -1),
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                            LEFT JOIN  profile_name AS pn ON (ap.pid = pn.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  pn.name LIKE \'%zzzzzz%\' AND pn.typeid = {?}', $id_Firstname),
+            array(self::buildProfileQuery('LEFT JOIN  profile_name AS pn ON (p.pid = pn.pid)
+                                               WHERE  pn.name LIKE \'%zzzzzz%\' AND pn.typeid = {?}', $id_Firstname),
                 new UFC_Name(Profile::FIRSTNAME, 'zzzzzz', UFC_Name::CONTAINS), 0),
 
             // Nickname
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                            LEFT JOIN  profile_name AS pn ON (ap.pid = pn.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  pn.name LIKE {?} AND pn.typeid = {?}', 'Xelnor', $id_Nickname),
+            array(self::buildProfileQuery('LEFT JOIN  profile_name AS pn ON (p.pid = pn.pid)
+                                               WHERE  pn.name LIKE {?} AND pn.typeid = {?}', 'Xelnor', $id_Nickname),
                 new UFC_Name(Profile::NICKNAME, 'Xelnor', UFC_Name::EXACT), -1),
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                            LEFT JOIN  profile_name AS pn ON (ap.pid = pn.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  pn.name LIKE \'Xel%\' AND pn.typeid = {?}', $id_Nickname),
+            array(self::buildProfileQuery('LEFT JOIN  profile_name AS pn ON (p.pid = pn.pid)
+                                               WHERE  pn.name LIKE \'Xel%\' AND pn.typeid = {?}', $id_Nickname),
                 new UFC_Name(Profile::NICKNAME, 'Xel', UFC_Name::PREFIX), -1),
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                            LEFT JOIN  profile_name AS pn ON (ap.pid = pn.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  pn.name LIKE \'%nor\' AND pn.typeid = {?}', $id_Nickname),
+            array(self::buildProfileQuery('LEFT JOIN  profile_name AS pn ON (p.pid = pn.pid)
+                                               WHERE  pn.name LIKE \'%nor\' AND pn.typeid = {?}', $id_Nickname),
                 new UFC_Name(Profile::NICKNAME, 'nor', UFC_Name::SUFFIX), -1),
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                            LEFT JOIN  profile_name AS pn ON (ap.pid = pn.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  pn.name LIKE \'%lno%\' AND pn.typeid = {?}', $id_Nickname),
+            array(self::buildProfileQuery('LEFT JOIN  profile_name AS pn ON (p.pid = pn.pid)
+                                               WHERE  pn.name LIKE \'%lno%\' AND pn.typeid = {?}', $id_Nickname),
                 new UFC_Name(Profile::NICKNAME, 'lno', UFC_Name::CONTAINS), -1),
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                            LEFT JOIN  profile_name AS pn ON (ap.pid = pn.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  pn.name LIKE \'%zzzzzz%\' AND pn.typeid = {?}', $id_Nickname),
+            array(self::buildProfileQuery('LEFT JOIN  profile_name AS pn ON (p.pid = pn.pid)
+                                               WHERE  pn.name LIKE \'%zzzzzz%\' AND pn.typeid = {?}', $id_Nickname),
                 new UFC_Name(Profile::NICKNAME, 'zzzzzz', UFC_Name::CONTAINS), 0),
 
             // Lastname + particle
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                            LEFT JOIN  profile_name AS pn ON (ap.pid = pn.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  CONCAT(pn.particle, \' \', pn.name) LIKE {?} AND pn.typeid = {?}', 'DE SINGLY', $id_Lastname),
+            array(self::buildProfileQuery('LEFT JOIN  profile_name AS pn ON (p.pid = pn.pid)
+                                               WHERE  CONCAT(pn.particle, \' \', pn.name) LIKE {?} AND pn.typeid = {?}', 'DE SINGLY', $id_Lastname),
                 new UFC_Name(Profile::LASTNAME, 'DE SINGLY', UFC_Name::PARTICLE | UFC_Name::EXACT), -1),
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                            LEFT JOIN  profile_name AS pn ON (ap.pid = pn.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  CONCAT(pn.particle, \' \', pn.name) LIKE \'DE SI%\' AND pn.typeid = {?}', $id_Lastname),
+            array(self::buildProfileQuery('LEFT JOIN  profile_name AS pn ON (p.pid = pn.pid)
+                                               WHERE  CONCAT(pn.particle, \' \', pn.name) LIKE \'DE SI%\' AND pn.typeid = {?}', $id_Lastname),
                 new UFC_Name(Profile::LASTNAME, 'DE SI', UFC_Name::PARTICLE | UFC_Name::PREFIX), -1),
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                            LEFT JOIN  profile_name AS pn ON (ap.pid = pn.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  CONCAT(pn.particle, \' \', pn.name) LIKE \'%GLY\' AND pn.typeid = {?}', $id_Lastname),
+            array(self::buildProfileQuery('LEFT JOIN  profile_name AS pn ON (p.pid = pn.pid)
+                                               WHERE  CONCAT(pn.particle, \' \', pn.name) LIKE \'%GLY\' AND pn.typeid = {?}', $id_Lastname),
                 new UFC_Name(Profile::LASTNAME, 'GLY', UFC_NAME::PARTICLE | UFC_Name::SUFFIX), -1),
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                            LEFT JOIN  profile_name AS pn ON (ap.pid = pn.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  CONCAT(pn.particle, \' \', pn.name) LIKE \'%E SIN%\' AND pn.typeid = {?}', $id_Lastname),
+            array(self::buildProfileQuery('LEFT JOIN  profile_name AS pn ON (p.pid = pn.pid)
+                                               WHERE  CONCAT(pn.particle, \' \', pn.name) LIKE \'%E SIN%\' AND pn.typeid = {?}', $id_Lastname),
                 new UFC_Name(Profile::LASTNAME, 'E SIN', UFC_Name::PARTICLE | UFC_Name::CONTAINS), -1),
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                            LEFT JOIN  profile_name AS pn ON (ap.pid = pn.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  CONCAT(pn.particle, \' \', pn.name) LIKE \'%ZZZZZZ%\' AND pn.typeid = {?}', $id_Lastname),
+            array(self::buildProfileQuery('LEFT JOIN  profile_name AS pn ON (p.pid = pn.pid)
+                                               WHERE  CONCAT(pn.particle, \' \', pn.name) LIKE \'%ZZZZZZ%\' AND pn.typeid = {?}', $id_Lastname),
                 new UFC_Name(Profile::LASTNAME, 'ZZZZZZ', UFC_Name::PARTICLE | UFC_Name::CONTAINS), 0),
 
             // Lastname_ordinary
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                            LEFT JOIN  profile_name AS pn ON (ap.pid = pn.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  pn.name LIKE {?} AND pn.typeid IN {?}',
+            array(self::buildProfileQuery('LEFT JOIN  profile_name AS pn ON (p.pid = pn.pid)
+                                               WHERE  pn.name LIKE {?} AND pn.typeid IN {?}',
                                 'ALBIZZATI', array($id_Lastname, $id_Lastname_Marital, $id_Lastname_Ordinary)),
                 new UFC_Name(Profile::LASTNAME, 'ALBIZZATI', UFC_Name::VARIANTS | UFC_Name::EXACT), -1),
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                            LEFT JOIN  profile_name AS pn ON (ap.pid = pn.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  pn.name LIKE {?} AND pn.typeid IN {?}',
+            array(self::buildProfileQuery('LEFT JOIN  profile_name AS pn ON (p.pid = pn.pid)
+                                               WHERE  pn.name LIKE {?} AND pn.typeid IN {?}',
                                 'ALBIZ%', array($id_Lastname, $id_Lastname_Marital, $id_Lastname_Ordinary)),
                 new UFC_Name(Profile::LASTNAME, 'ALBIZ', UFC_Name::VARIANTS | UFC_Name::PREFIX), -1),
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                            LEFT JOIN  profile_name AS pn ON (ap.pid = pn.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  pn.name LIKE {?} AND pn.typeid IN {?}',
+            array(self::buildProfileQuery('LEFT JOIN  profile_name AS pn ON (p.pid = pn.pid)
+                                               WHERE  pn.name LIKE {?} AND pn.typeid IN {?}',
                                 '%ZATI', array($id_Lastname, $id_Lastname_Marital, $id_Lastname_Ordinary)),
                 new UFC_Name(Profile::LASTNAME, 'ZATI', UFC_NAME::VARIANTS | UFC_Name::SUFFIX), -1),
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                            LEFT JOIN  profile_name AS pn ON (ap.pid = pn.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  pn.name LIKE {?} AND pn.typeid IN {?}',
+            array(self::buildProfileQuery('LEFT JOIN  profile_name AS pn ON (p.pid = pn.pid)
+                                               WHERE  pn.name LIKE {?} AND pn.typeid IN {?}',
                                 '%BIZZ%', array($id_Lastname, $id_Lastname_Marital, $id_Lastname_Ordinary)),
                 new UFC_Name(Profile::LASTNAME, 'BIZZ', UFC_Name::VARIANTS | UFC_Name::CONTAINS), -1),
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                            LEFT JOIN  profile_name AS pn ON (ap.pid = pn.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  pn.name LIKE {?} AND pn.typeid IN {?}',
+            array(self::buildProfileQuery('LEFT JOIN  profile_name AS pn ON (p.pid = pn.pid)
+                                               WHERE  pn.name LIKE {?} AND pn.typeid IN {?}',
                                 '%ZZZZZZ%', array($id_Lastname, $id_Lastname_Marital, $id_Lastname_Ordinary)),
                 new UFC_Name(Profile::LASTNAME, 'ZZZZZZ', UFC_Name::VARIANTS | UFC_Name::CONTAINS), 0),
         );
@@ -454,79 +381,51 @@ class UserFilterTest extends PlTestCase
              */
         $tests[] = array(
             // !soundex, !exact
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                            LEFT JOIN  search_name AS sn ON (ap.pid = sn.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  sn.token LIKE \'xelnor%\''),
+            array(self::buildProfileQuery('LEFT JOIN  search_name AS sn ON (p.pid = sn.pid)
+                                               WHERE  sn.token LIKE \'xelnor%\''),
                 new UFC_NameTokens('xelnor'), 1),
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                            LEFT JOIN  search_name AS sn ON (ap.pid = sn.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  sn.token LIKE \'xe%\''),
+            array(self::buildProfileQuery('LEFT JOIN  search_name AS sn ON (p.pid = sn.pid)
+                                               WHERE  sn.token LIKE \'xe%\''),
                 new UFC_NameTokens('xe'), -1),
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                            LEFT JOIN  search_name AS sn ON (ap.pid = sn.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  sn.token LIKE \'xe%\' OR sn.token LIKE \'barr%\''),
+            array(self::buildProfileQuery('LEFT JOIN  search_name AS sn ON (p.pid = sn.pid)
+                                               WHERE  sn.token LIKE \'xe%\' OR sn.token LIKE \'barr%\''),
                 new UFC_NameTokens(array('xe', 'barr')), -1),
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                            LEFT JOIN  search_name AS sn ON (ap.pid = sn.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  sn.token LIKE \'zzzzzzzz%\''),
+            array(self::buildProfileQuery('LEFT JOIN  search_name AS sn ON (p.pid = sn.pid)
+                                               WHERE  sn.token LIKE \'zzzzzzzz%\''),
                 new UFC_NameTokens('zzzzzzzz'), 0),
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                            LEFT JOIN  search_name AS sn ON (ap.pid = sn.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  sn.token LIKE \'barr%\' AND FIND_IN_SET(\'public\', sn.flags)'),
+            array(self::buildProfileQuery('LEFT JOIN  search_name AS sn ON (p.pid = sn.pid)
+                                               WHERE  sn.token LIKE \'barr%\' AND FIND_IN_SET(\'public\', sn.flags)'),
                 new UFC_NameTokens('barr', UFC_NameTokens::FLAG_PUBLIC), -1),
 
             // !soundex, exact
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                            LEFT JOIN  search_name AS sn ON (ap.pid = sn.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  sn.token = \'xelnor\''),
+            array(self::buildProfileQuery('LEFT JOIN  search_name AS sn ON (p.pid = sn.pid)
+                                               WHERE  sn.token = \'xelnor\''),
                 new UFC_NameTokens('xelnor', array(), false, true), 1),
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                            LEFT JOIN  search_name AS sn ON (ap.pid = sn.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  sn.token IN (\'xelnor\', \'barrois\')'),
+            array(self::buildProfileQuery('LEFT JOIN  search_name AS sn ON (p.pid = sn.pid)
+                                               WHERE  sn.token IN (\'xelnor\', \'barrois\')'),
                 new UFC_NameTokens(array('xelnor', 'barrois'), array(), false, true), -1),
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                            LEFT JOIN  search_name AS sn ON (ap.pid = sn.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  sn.token = \'zzzzzzzz\''),
+            array(self::buildProfileQuery('LEFT JOIN  search_name AS sn ON (p.pid = sn.pid)
+                                               WHERE  sn.token = \'zzzzzzzz\''),
                 new UFC_NameTokens('zzzzzzzz', array(), false, true), 0),
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                            LEFT JOIN  search_name AS sn ON (ap.pid = sn.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  sn.token IN (\'zzzzzzzz\', \'yyyyyyyy\')'),
+            array(self::buildProfileQuery('LEFT JOIN  search_name AS sn ON (p.pid = sn.pid)
+                                               WHERE  sn.token IN (\'zzzzzzzz\', \'yyyyyyyy\')'),
                 new UFC_NameTokens(array('zzzzzzzz', 'yyyyyyyy'), array(), false, true), 0),
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                            LEFT JOIN  search_name AS sn ON (ap.pid = sn.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  sn.token = \'barrois\' AND FIND_IN_SET(\'public\', sn.flags)'),
+            array(self::buildProfileQuery('LEFT JOIN  search_name AS sn ON (p.pid = sn.pid)
+                                               WHERE  sn.token = \'barrois\' AND FIND_IN_SET(\'public\', sn.flags)'),
                 new UFC_NameTokens('barrois', UFC_NameTokens::FLAG_PUBLIC, false, true), -1),
 
             // soundex, !exact
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                            LEFT JOIN  search_name AS sn ON (ap.pid = sn.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  sn.soundex = \'XLNO\''),
+            array(self::buildProfileQuery('LEFT JOIN  search_name AS sn ON (p.pid = sn.pid)
+                                               WHERE  sn.soundex = \'XLNO\''),
                 new UFC_NameTokens('XLNO', array(), true), -1),
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                            LEFT JOIN  search_name AS sn ON (ap.pid = sn.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  sn.soundex IN (\'XLNO\', \'BROS\')'),
+            array(self::buildProfileQuery('LEFT JOIN  search_name AS sn ON (p.pid = sn.pid)
+                                               WHERE  sn.soundex IN (\'XLNO\', \'BROS\')'),
                 new UFC_NameTokens(array('XLNO', 'BROS'), array(), true), -1),
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                            LEFT JOIN  search_name AS sn ON (ap.pid = sn.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  sn.soundex = \'ZZZZZZ\''),
+            array(self::buildProfileQuery('LEFT JOIN  search_name AS sn ON (p.pid = sn.pid)
+                                               WHERE  sn.soundex = \'ZZZZZZ\''),
                 new UFC_NameTokens('ZZZZZZ', array(), true), 0),
-            array(XDB::format('SELECT  DISTINCT ap.uid
-                                 FROM  account_profiles AS ap
-                            LEFT JOIN  search_name AS sn ON (ap.pid = sn.pid AND FIND_IN_SET(\'owner\', ap.perms))
-                                WHERE  sn.soundex = \'BROS\' AND FIND_IN_SET(\'public\', sn.flags)'),
+            array(self::buildProfileQuery('LEFT JOIN  search_name AS sn ON (p.pid = sn.pid)
+                                               WHERE  sn.soundex = \'BROS\' AND FIND_IN_SET(\'public\', sn.flags)'),
                 new UFC_NameTokens('BROS', UFC_NameTokens::FLAG_PUBLIC, true), -1),
         );
 
@@ -543,11 +442,13 @@ class UserFilterTest extends PlTestCase
     public function testSimpleUser($query, $cond, $expcount = null)
     {
         /*
-         * @param $query A MySQL query
+         * @param $query A pair MySQL query (one for user selector, one for profile selector)
          * @param $cond  The UFC to test
          * @param $expcount The expected number of results (-1 if that number is unknown)
          */
 
+        $query = $query[0];
+
         self::checkPlatal();
 
         $query = XDB::query($query);
@@ -575,8 +476,52 @@ class UserFilterTest extends PlTestCase
         $this->assertEquals($count, count($got));
         sort($got);
         $this->assertEquals($ids, $got);
-        $this->assertEquals($count, $uf->getTotalCount());
+        $this->assertEquals($count, $uf->getTotalUserCount());
+    }
+
+    /**
+     * @dataProvider simpleUserProvider
+     */
+    public function testSimpleProfile($query, $cond, $expcount = null)
+    {
+        /*
+         * @param $query A pair MySQL query (one for user selector, one for profile selector)
+         * @param $cond  The UFC to test
+         * @param $expcount The expected number of results (-1 if that number is unknown)
+         */
+
+        $query = $query[1];
+
+        self::checkPlatal();
+
+        $query = XDB::query($query);
+        $count = $query->numRows();
+        if (!is_null($expcount)) {
+            if ($expcount < 0) {
+                $this->assertNotEquals(0, $count);
+            } else {
+                $this->assertEquals($expcount, $count);
+            }
+        }
+        $ids = $query->fetchColumn();
+        $this->assertEquals($count, count($ids));
+        sort($ids);
+
+        $uf = new UserFilter($cond);
+        $this->assertEquals($count, $uf->getTotalProfileCount());
+        $got = $uf->getPIDs();
+        $this->assertEquals($count, count($got));
+        sort($got);
+        $this->assertEquals($ids, $got);
+
+        $uf = new UserFilter($cond);
+        $got = $uf->getPIDs();
+        $this->assertEquals($count, count($got));
+        sort($got);
+        $this->assertEquals($ids, $got);
+        $this->assertEquals($count, $uf->getTotalProfileCount());
     }
+
 }
 
 // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: