Skip to content

Commit 8242c5f

Browse files
[11.8] Add support for group merge requests (#687)
* Get group merge requests * fix styleci Co-authored-by: Sergey Zachesov <zachesov@self.team>
1 parent c7b720e commit 8242c5f

File tree

2 files changed

+147
-0
lines changed

2 files changed

+147
-0
lines changed

src/Api/Groups.php

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,31 @@
1919

2020
class Groups extends AbstractApi
2121
{
22+
/**
23+
* @var string
24+
*/
25+
public const STATE_ALL = 'all';
26+
27+
/**
28+
* @var string
29+
*/
30+
public const STATE_MERGED = 'merged';
31+
32+
/**
33+
* @var string
34+
*/
35+
public const STATE_OPENED = 'opened';
36+
37+
/**
38+
* @var string
39+
*/
40+
public const STATE_CLOSED = 'closed';
41+
42+
/**
43+
* @var string
44+
*/
45+
public const STATE_LOCKED = 'locked';
46+
2247
/**
2348
* @param array $parameters {
2449
*
@@ -491,6 +516,108 @@ public function removeVariable($group_id, string $key)
491516
return $this->delete('groups/'.self::encodePath($group_id).'/variables/'.self::encodePath($key));
492517
}
493518

519+
/**
520+
* @param int|string $group_id
521+
* @param array $parameters {
522+
*
523+
* @var int[] $iids return the request having the given iid
524+
* @var string $state return all merge requests or just those that are opened, closed, or
525+
* merged
526+
* @var string $scope Return merge requests for the given scope: created-by-me,
527+
* assigned-to-me or all (default is created-by-me)
528+
* @var string $order_by return requests ordered by created_at or updated_at fields (default is created_at)
529+
* @var string $sort return requests sorted in asc or desc order (default is desc)
530+
* @var string $milestone return merge requests for a specific milestone
531+
* @var string $view if simple, returns the iid, URL, title, description, and basic state of merge request
532+
* @var string $labels return merge requests matching a comma separated list of labels
533+
* @var \DateTimeInterface $created_after return merge requests created after the given time (inclusive)
534+
* @var \DateTimeInterface $created_before return merge requests created before the given time (inclusive)
535+
* }
536+
*
537+
* @return mixed
538+
*/
539+
public function mergeRequests($group_id, array $parameters = [])
540+
{
541+
$resolver = $this->createOptionsResolver();
542+
$datetimeNormalizer = function (Options $resolver, \DateTimeInterface $value): string {
543+
return $value->format('c');
544+
};
545+
$resolver->setDefined('state')
546+
->setAllowedValues('state', [self::STATE_ALL, self::STATE_MERGED, self::STATE_OPENED, self::STATE_CLOSED])
547+
;
548+
$resolver->setDefined('order_by')
549+
->setAllowedValues('order_by', ['created_at', 'updated_at'])
550+
;
551+
$resolver->setDefined('sort')
552+
->setAllowedValues('sort', ['asc', 'desc'])
553+
;
554+
$resolver->setDefined('milestone');
555+
$resolver->setDefined('view')
556+
->setAllowedValues('view', ['simple'])
557+
;
558+
$resolver->setDefined('labels');
559+
$resolver->setDefined('with_labels_details')
560+
->setAllowedTypes('with_labels_details', 'bool')
561+
;
562+
563+
$resolver->setDefined('created_after')
564+
->setAllowedTypes('created_after', \DateTimeInterface::class)
565+
->setNormalizer('created_after', $datetimeNormalizer)
566+
;
567+
$resolver->setDefined('created_before')
568+
->setAllowedTypes('created_before', \DateTimeInterface::class)
569+
->setNormalizer('created_before', $datetimeNormalizer)
570+
;
571+
572+
$resolver->setDefined('updated_after')
573+
->setAllowedTypes('updated_after', \DateTimeInterface::class)
574+
->setNormalizer('updated_after', $datetimeNormalizer)
575+
;
576+
$resolver->setDefined('updated_before')
577+
->setAllowedTypes('updated_before', \DateTimeInterface::class)
578+
->setNormalizer('updated_before', $datetimeNormalizer)
579+
;
580+
581+
$resolver->setDefined('scope')
582+
->setAllowedValues('scope', ['created_by_me', 'assigned_to_me', 'all'])
583+
;
584+
$resolver->setDefined('author_id')
585+
->setAllowedTypes('author_id', 'integer');
586+
$resolver->setDefined('author_username');
587+
588+
$resolver->setDefined('assignee_id')
589+
->setAllowedTypes('assignee_id', 'integer');
590+
591+
$resolver->setDefined('approver_ids')
592+
->setAllowedTypes('approver_ids', 'array')
593+
->setAllowedValues('approver_ids', function (array $value) {
594+
return \count($value) === \count(\array_filter($value, 'is_int'));
595+
})
596+
;
597+
$resolver->setDefined('non_archived')
598+
->setAllowedTypes('non_archived', 'bool')
599+
;
600+
$resolver->setDefined('reviewer_id')
601+
->setAllowedTypes('reviewer_id', 'integer');
602+
$resolver->setDefined('reviewer_username');
603+
$resolver->setDefined('my_reaction_emoji');
604+
605+
$resolver->setDefined('search');
606+
$resolver->setDefined('source_branch');
607+
$resolver->setDefined('target_branch');
608+
$resolver->setDefined('with_merge_status_recheck')
609+
->setAllowedTypes('with_merge_status_recheck', 'bool')
610+
;
611+
$resolver->setDefined('approved_by_ids')
612+
->setAllowedTypes('approved_by_ids', 'array')
613+
->setAllowedValues('approved_by_ids', function (array $value) {
614+
return \count($value) === \count(\array_filter($value, 'is_int'));
615+
})
616+
;
617+
618+
return $this->get('groups/'.self::encodePath($group_id).'/merge_requests', $resolver->resolve($parameters));
619+
}
620+
494621
/**
495622
* @param int|string $group_id
496623
* @param array $parameters {

tests/Api/GroupsTest.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -715,4 +715,24 @@ public function shouldGetPackages(): void
715715

716716
$this->assertEquals($expectedArray, $api->packages(1));
717717
}
718+
719+
/**
720+
* @test
721+
*/
722+
public function shouldGetGroupMergeRequests(): void
723+
{
724+
$expectedArray = [
725+
['id' => 1, 'title' => 'A merge request'],
726+
['id' => 2, 'title' => 'Another merge request'],
727+
];
728+
729+
$api = $this->getApiMock();
730+
$api->expects($this->once())
731+
->method('get')
732+
->with('groups/1/merge_requests')
733+
->will($this->returnValue($expectedArray))
734+
;
735+
736+
$this->assertEquals($expectedArray, $api->mergeRequests(1, []));
737+
}
718738
}

0 commit comments

Comments
 (0)