From 5b3f6e4455b37cdfec30b8e412a0e5b4420c7d10 Mon Sep 17 00:00:00 2001 From: Florent Bruneau Date: Sat, 1 May 2010 17:48:34 +0200 Subject: [PATCH] Add testSimpleProfile. Signed-off-by: Florent Bruneau --- core | 2 +- ut/userfiltertest.php | 489 ++++++++++++++++++++++---------------------------- 2 files changed, 218 insertions(+), 273 deletions(-) diff --git a/core b/core index 983284b..737f137 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit 983284ba502852d0d50c9073274d6de3001acab6 +Subproject commit 737f1378c3bcebbbbf04fef0c0ffb9c99a1e4946 diff --git a/ut/userfiltertest.php b/ut/userfiltertest.php index da1d6d2..8f0baca 100644 --- a/ut/userfiltertest.php +++ b/ut/userfiltertest.php @@ -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: -- 2.1.4