Skip to content

Commit 35000ed

Browse files
authored
[11.9] Add support for allowed_to_create in Projects::addProtectedTag (#736)
1 parent 89ffa54 commit 35000ed

File tree

2 files changed

+22
-7
lines changed

2 files changed

+22
-7
lines changed

src/Api/Projects.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1545,6 +1545,19 @@ public function addProtectedTag($project_id, array $parameters = [])
15451545
->setAllowedTypes('create_access_level', 'int')
15461546
->setAllowedValues('create_access_level', [0, 30, 40])
15471547
;
1548+
$resolver->setDefined('allowed_to_create')
1549+
->setAllowedTypes('allowed_to_create', 'array')
1550+
->setAllowedValues('allowed_to_create', function (array $value) {
1551+
$keys = \array_keys((array) \call_user_func_array('array_merge', $value));
1552+
$diff = \array_diff($keys, ['user_id', 'group_id', 'access_level']);
1553+
$values = \array_map(function ($item) {
1554+
return \array_values($item)[0] ?? '';
1555+
}, $value);
1556+
$integer = \count($values) === \count(\array_filter($values, 'is_int'));
1557+
1558+
return \count($value) > 0 && 0 === \count($diff) && $integer;
1559+
})
1560+
;
15481561

15491562
return $this->post($this->getProjectPath($project_id, 'protected_tags'), $resolver->resolve($parameters));
15501563
}

tests/Api/ProjectsTest.php

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2766,19 +2766,21 @@ public function shouldAddProtectedTag(): void
27662766
$expectedArray = [
27672767
'name' => 'release-*',
27682768
'create_access_level' => [
2769-
'access_level' => 40,
2770-
'access_level_description' => 'Maintainers',
2769+
['access_level' => 40, 'access_level_description' => 'Maintainers'],
2770+
['group_id' => 123],
27712771
],
27722772
];
27732773
$api = $this->getApiMock();
2774+
$params = [
2775+
'name' => 'release-*',
2776+
'create_access_level' => 40,
2777+
'allowed_to_create' => [['group_id' => 123]],
2778+
];
27742779
$api->expects($this->once())
27752780
->method('post')
2776-
->with(
2777-
'projects/1/protected_tags',
2778-
['name' => 'release-*', 'create_access_level' => 40]
2779-
)
2781+
->with('projects/1/protected_tags', $params)
27802782
->will($this->returnValue($expectedArray));
2781-
$this->assertEquals($expectedArray, $api->addProtectedTag(1, ['name' => 'release-*', 'create_access_level' => 40]));
2783+
$this->assertEquals($expectedArray, $api->addProtectedTag(1, $params));
27822784
}
27832785

27842786
/**

0 commit comments

Comments
 (0)