You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

164 lines
5.5 KiB

<?php
// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project
//
// All Rights Reserved. See copyright.txt for details and a complete list of authors.
// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details.
// $Id$
/**
* @group integration
*/
class TrackerItemPermissionTest extends TikiTestCase
{
protected static $trklib;
protected static $unifiedlib;
protected static $trackerId;
protected static $old_pref;
protected static $old_user;
public static function setUpBeforeClass(): void
{
global $prefs;
self::$old_pref = $prefs['feature_trackers'];
$prefs['feature_trackers'] = 'y';
parent::setUpBeforeClass();
self::$trklib = TikiLib::lib('trk');
// create tracker and couple of fields
self::$trackerId = self::$trklib->replace_tracker(null, 'Test Tracker', '', [], 'n');
$fields = [[
'name' => 'Name',
'type' => 't',
'isHidden' => 'n',
'isMandatory' => 'y',
'visibleBy' => null,
'permName' => 'test_name',
], [
'name' => 'Admin info',
'type' => 't',
'isHidden' => 'y',
'isMandatory' => 'n',
'visibleBy' => null,
'permName' => 'test_admin',
], [
'name' => 'Registered info',
'type' => 't',
'isHidden' => 'n',
'isMandatory' => 'n',
'visibleBy' => ['Registered'],
'permName' => 'test_registered',
], [
'name' => 'Special info',
'type' => 't',
'isHidden' => 'n',
'isMandatory' => 'n',
'visibleBy' => ['SpecialGroup'],
'permName' => 'test_special',
]];
foreach ($fields as $i => $field) {
self::$trklib->replace_tracker_field(
self::$trackerId,
0,
$field['name'],
$field['type'],
'y',
'y',
'y',
'y',
$field['isHidden'],
$field['isMandatory'],
($i + 1) * 10,
'',
'',
'',
null,
'',
$field['visibleBy'],
null,
'n',
'',
'',
'',
$field['permName']
);
}
$definition = Tracker_Definition::get(self::$trackerId);
$fields = $definition->getFields();
$fields[0]['value'] = 'Test item';
$fields[1]['value'] = 'Secret value';
$fields[2]['value'] = 'Secret value';
$fields[3]['value'] = 'Secret value';
self::$trklib->replace_item(self::$trackerId, 0, ['data' => $fields], 'o');
TikiDb::get()->query("INSERT INTO `users_grouppermissions` VALUES('Registered', 'tiki_p_view_trackers', '')");
$builder = new Perms_Builder();
Perms::set($builder->build());
self::$unifiedlib = TikiLib::lib('unifiedsearch');
self::$unifiedlib->rebuild();
}
public static function tearDownAfterClass(): void
{
global $prefs, $tikilib;
$prefs['feature_trackers'] = self::$old_pref;
parent::tearDownAfterClass();
self::$trklib->remove_tracker(self::$trackerId);
if (! empty($prefs['unified_mysql_index_current'])) {
TikiDb::get()->query("DROP TABLE `{$prefs['unified_mysql_index_current']}`");
$tikilib->delete_preference('unified_mysql_index_current');
}
self::$unifiedlib->invalidateIndicesCache();
TikiDb::get()->query("DELETE FROM `users_grouppermissions` WHERE `groupName` = 'Registered' AND `permName` = 'tiki_p_view_trackers'");
$builder = new Perms_Builder();
Perms::set($builder->build());
}
public function testAdminCanSeeAllFields(): void
{
// impersonate admin
new Perms_Context('admin');
$perms = Perms::getInstance();
$perms->setGroups(['Admins']);
$query = self::$unifiedlib->buildQuery([
'type' => 'trackeritem',
'tracker_id' => self::$trackerId,
]);
$result = $query->search(self::$unifiedlib->getIndex());
$resultArray = $result->getArrayCopy();
$this->assertEquals('Test item', $resultArray[0]['tracker_field_test_name']);
$this->assertEquals('Secret value', $resultArray[0]['tracker_field_test_admin']);
$this->assertEquals('Secret value', $resultArray[0]['tracker_field_test_registered']);
$this->assertEquals('Secret value', $resultArray[0]['tracker_field_test_special']);
}
public function testRegisteredCanSeeSpecificFields(): void
{
// impersonate a regitered user
new Perms_Context('someone');
$perms = Perms::getInstance();
$perms->setGroups(['Registered']);
$query = self::$unifiedlib->buildQuery([
'type' => 'trackeritem',
'tracker_id' => self::$trackerId,
]);
$result = $query->search(self::$unifiedlib->getIndex());
$resultArray = $result->getArrayCopy();
$this->assertEquals('Test item', $resultArray[0]['tracker_field_test_name']);
$this->assertEquals('', $resultArray[0]['tracker_field_test_admin']);
$this->assertEquals('Secret value', $resultArray[0]['tracker_field_test_registered']);
$this->assertEquals('', $resultArray[0]['tracker_field_test_special']);
}
}