19 declare(strict_types=1);
49 protected function setUp(): void
51 if (!defined(
'ILIAS_HTTP_PATH')) {
52 define(
'ILIAS_HTTP_PATH',
'https://ilias.unit.test');
55 $this->file_info_repository = $this->createMock(\ilObjFileInfoRepository::class);
56 $this->
access = $this->createMock(\ilAccessHandler::class);
57 $this->
ctrl = $this->createMock(\ilCtrlInterface::class);
58 $this->action_repository = $this->createMock(ActionRepository::class);
59 $this->
http = $this->createMock(Services::class);
60 $this->type_resolver = $this->createMock(TypeResolver::class);
61 $this->workspace_access_handler = $this->createMock(ilWorkspaceAccessHandler::class);
63 $this->type_resolver->method(
'resolveTypeByObjectId')
68 $this->file_info_repository,
71 $this->action_repository,
74 $this->workspace_access_handler
84 if (!self::$update_readme) {
96 'infopage_first' =>
true,
97 'user_permissions' => [
100 Permissions::VISIBLE,
101 Permissions::EDIT_CONTENT,
102 Permissions::VIEW_CONTENT
104 'expected_best' => Capabilities::FORCED_INFO_PAGE
109 'infopage_first' =>
false,
110 'user_permissions' => [
113 Permissions::VISIBLE,
114 Permissions::EDIT_CONTENT,
115 Permissions::VIEW_CONTENT
117 'expected_best' => Capabilities::EDIT_EXTERNAL
122 'infopage_first' =>
false,
123 'user_permissions' => [
124 Permissions::EDIT_CONTENT,
125 Permissions::VIEW_CONTENT
127 'expected_best' => Capabilities::EDIT_EXTERNAL
130 'wopi_view' =>
false,
131 'wopi_edit' =>
false,
132 'infopage_first' =>
true,
133 'user_permissions' => [
137 'expected_best' => Capabilities::FORCED_INFO_PAGE
142 'infopage_first' =>
false,
143 'user_permissions' => [
144 Permissions::EDIT_CONTENT,
146 'expected_best' => Capabilities::EDIT_EXTERNAL
151 'infopage_first' =>
false,
152 'user_permissions' => [
155 'expected_best' => Capabilities::DOWNLOAD
160 'infopage_first' =>
false,
161 'user_permissions' => [
165 'expected_best' => Capabilities::DOWNLOAD
170 'infopage_first' =>
false,
171 'user_permissions' => [
174 'expected_best' => Capabilities::MANAGE_VERSIONS
179 'infopage_first' =>
false,
180 'user_permissions' => [
181 Permissions::VISIBLE,
183 'expected_best' => Capabilities::INFO_PAGE
188 'infopage_first' =>
true,
189 'user_permissions' => [
193 'expected_best' => Capabilities::FORCED_INFO_PAGE
198 'infopage_first' =>
false,
199 'user_permissions' => [
202 'expected_best' => Capabilities::NONE
213 bool $infopage_first,
224 Context::CONTEXT_REPO
227 $this->
access->method(
'checkAccess')
228 ->willReturnCallback(
229 function (
string $permission) use ($permissions):
bool {
230 $checked_permissions = explode(
',', $permission);
231 $common_permissions = array_intersect(
232 array_map(
static fn(
Permissions $p):
string => $p->value, $permissions),
235 return $common_permissions !== [];
239 $file_info = $this->createMock(\ilObjFileInfo::class);
240 $file_info->method(
'shouldDownloadDirectly')
241 ->willReturn(!$infopage_first);
243 $this->file_info_repository->method(
'getByObjectId')
245 ->willReturn($file_info);
247 $this->action_repository->method(
'hasEditActionForSuffix')
248 ->willReturn($wopi_edit);
250 $this->action_repository->method(
'hasViewActionForSuffix')
251 ->willReturn($wopi_view);
253 $capabilities = $this->capability_builder->get(
$context);
254 $best = $capabilities->getBest();
256 $this->assertEquals($expected_best, $best->getCapability());
258 self::$readme_infos[] = [
259 implode(
', ', array_map(fn(
Permissions $p):
string => $p->value, $permissions)),
260 ($wopi_view ?
'Yes' :
'No'),
261 ($wopi_edit ?
'Yes' :
'No'),
262 ($infopage_first ?
'Info-Page' :
'Open'),
263 $best->getCapability()->name
270 $readme_file = __DIR__ .
'/../../docs/README.md';
271 $readme_content = file_get_contents($readme_file);
275 'User\'s Permissions',
276 'WOPI View Action av.',
277 'WOPI Edit Action av.',
279 'Expected Capability' 282 $readme_infos = self::$readme_infos;
284 usort($readme_infos,
static function (
$a,
$b):
int {
285 $a_string = implode(
'', array_reverse(
$a));
286 $b_string = implode(
'', array_reverse(
$b));
288 return strcmp((
string) $a_string, (
string) $b_string);
291 $table = array_merge($table, $readme_infos);
294 $start_marker =
"<!-- START CAPABILITY_TABLE -->";
295 $end_marker =
"<!-- END CAPABILITY_TABLE -->";
298 $new_block = $start_marker .
"\n\n" . self::arrayToMarkdownTable($table) .
"\n\n" . $end_marker;
301 $pattern =
'/' . preg_quote($start_marker,
'/') .
'.*?' . preg_quote($end_marker,
'/') .
'/s';
302 $readme_content = preg_replace($pattern, $new_block, $readme_content);
304 file_put_contents($readme_file, $readme_content);
310 if (empty($data) || !is_array($data[0])) {
315 $col_widths = array_map(
316 static fn($col_index):
int => max(
318 static fn($row):
int => isset($row[$col_index]) ? mb_strlen((
string) $row[$col_index]) : 0,
326 $pad_row =
static fn($row): array => array_map(
static function ($value, $index) use ($col_widths):
string {
328 return str_pad($value, $col_widths[$index],
" ", STR_PAD_RIGHT);
329 }, $row, array_keys($col_widths));
332 $header = $pad_row($data[0]);
333 $rows = array_map($pad_row, array_slice($data, 1));
337 . implode(
" | ", $header)
340 . implode(
" | ", array_map(
static fn($width):
string => str_repeat(
"-", $width), $col_widths))
342 $data_rows = array_map(
static fn($row):
string =>
"| " . implode(
" | ", $row) .
" |", $rows);
345 return implode(
"\n", array_merge([$header_row, $sep_row], $data_rows));
ActionRepository MockObject $action_repository
CapabilityBuilder $capability_builder
ilObjFileInfoRepository MockObject $file_info_repository
testCapabilityPriority(bool $wopi_view, bool $wopi_edit, bool $infopage_first, array $permissions, Capabilities $expected_best)
environmentProvider
ilAccessHandler MockObject $access
static array $readme_infos
PHPUnit Framework MockObject MockObject $workspace_access_handler
static environmentProvider()
static bool $update_readme
static http()
Fetches the global http state from ILIAS.
static arrayToMarkdownTable(array $data)
Services MockObject $http
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
$a
thx to https://mlocati.github.io/php-cs-fixer-configurator for the examples
PHPUnit Framework MockObject MockObject TypeResolver $type_resolver
ilCtrlInterface MockObject $ctrl
static tearDownAfterClass()