id = $id; } function Id() { return $this->id; } } $langdir = sys_get_temp_dir().'/zm_self_edit_'.getmypid(); @mkdir($langdir.'/lang', 0700, true); touch($langdir.'/lang/en_gb.php'); define('ZM_PATH_WEB', $langdir); define('ZM_USER_SELF_EDIT', true); eval('class SelfEditHarness { public $request; '.$methods.' }'); function selfEdit($action, $pass, $uid) { global $user; $user = $uid ? new FakeUser($uid) : null; $h = new SelfEditHarness(); $h->request = (object)array('params' => array('action' => $action, 'pass' => $pass)); return $h->isSelfEdit(); } function data($in) { $h = new SelfEditHarness(); try { return $h->selfEditData($in); } catch (BadRequestException $e) { return 'BadRequest'; } } check('view of own id is self edit', selfEdit('view', array('2'), 2), true); check('edit of own id is self edit', selfEdit('edit', array('2'), 2), true); check('edit of another id is not', selfEdit('edit', array('1'), 2), false); check('index is not', selfEdit('index', array(), 2), false); check('delete of own id is not', selfEdit('delete', array('2'), 2), false); check('add is not', selfEdit('add', array('2'), 2), false); check('no id is not', selfEdit('edit', array(), 2), false); check('no user is not', selfEdit('edit', array('2'), null), false); check('only Password, Language and HomeView are kept', data(array('User' => array('Password' => 'p', 'Language' => 'en_gb', 'HomeView' => 'console', 'System' => 'Edit', 'Monitors' => 'Edit', 'Id' => '1', 'Username' => 'admin', 'Enabled' => '1'))), array('User' => array('Password' => 'p', 'Language' => 'en_gb', 'HomeView' => 'console'))); check('bare fields are read the same way', data(array('HomeView' => 'console', 'System' => 'Edit', 'Id' => '1')), array('User' => array('HomeView' => 'console'))); check('bare fields next to a User entry are dropped', data(array('User' => array('HomeView' => 'console'), 'System' => 'Edit')), array('User' => array('HomeView' => 'console'))); check('an empty password is not saved', data(array('User' => array('Password' => '', 'HomeView' => 'x'))), array('User' => array('HomeView' => 'x'))); check('a language without a lang file is refused', data(array('User' => array('Language' => '../x'))), 'BadRequest'); check('a language given as an array is refused', data(array('User' => array('Language' => array('a')))), 'BadRequest'); check('an empty language is kept (clears it, as in the UI)', data(array('User' => array('Language' => ''))), array('User' => array('Language' => ''))); check('nothing allowed leaves nothing', data(array('User' => array('System' => 'Edit'))), array('User' => array())); check('non-array data leaves nothing', data('junk'), array('User' => array())); unlink($langdir.'/lang/en_gb.php'); rmdir($langdir.'/lang'); rmdir($langdir); echo "\n$passes passed, $failures failed\n"; exit($failures ? 1 : 0);