Skip to content

Commit f363461

Browse files
authored
Merge pull request #474 from MiamiOH/master
Update fromArray method to handle correct 'shared_with_groups' field …
2 parents d64c116 + fbaff2d commit f363461

File tree

2 files changed

+75
-14
lines changed

2 files changed

+75
-14
lines changed

lib/Gitlab/Model/Project.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,10 @@ public static function fromArray(Client $client, array $data)
117117
if (isset($data['shared_with_groups'])) {
118118
$groups = [];
119119
foreach ($data['shared_with_groups'] as $group) {
120+
foreach ($group as $keys => $value) {
121+
$group[str_replace('group_', '', $keys)] = $value;
122+
unset($group[$keys]);
123+
}
120124
$groups[] = Group::fromArray($client, $group);
121125
}
122126
$data['shared_with_groups'] = $groups;

test/Gitlab/Tests/Model/ProjectTest.php

Lines changed: 71 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,9 @@
1111

1212
class ProjectTest extends TestCase
1313
{
14-
public function testFromArray()
14+
public function defaultArray(array $overrides = [])
1515
{
16-
$client = $this->getMockBuilder(Client::class)
17-
->disableOriginalConstructor()
18-
->getMock();
19-
20-
$data = [
16+
$defaults = array_merge([
2117
'id' => 4,
2218
'description' => null,
2319
'default_branch' => 'master',
@@ -59,15 +55,24 @@ public function testFromArray()
5955
'star_count' => 0,
6056
'runners_token' => 'b8547b1dc37721d05889db52fa2f02',
6157
'public_jobs' => true,
62-
'shared_with_groups' => [
63-
['id' => 12]
64-
],
58+
'shared_with_groups' => [],
6559
'only_allow_merge_if_pipeline_succeeds' => false,
6660
'only_allow_merge_if_all_discussions_are_resolved' => false,
6761
'request_access_enabled' => false,
6862
'merge_method' => 'merge',
6963
'approvals_before_merge' => 0,
70-
];
64+
], $overrides);
65+
66+
return $defaults;
67+
}
68+
69+
public function testFromArray()
70+
{
71+
$client = $this->getMockBuilder(Client::class)
72+
->disableOriginalConstructor()
73+
->getMock();
74+
75+
$data = $this->defaultArray();
7176

7277
$project = Project::fromArray($client, $data);
7378

@@ -106,12 +111,64 @@ public function testFromArray()
106111
$this->assertSame($data['star_count'], $project->star_count);
107112
$this->assertSame($data['runners_token'], $project->runners_token);
108113
$this->assertSame($data['public_jobs'], $project->public_jobs);
109-
$this->assertCount(1, $project->shared_with_groups);
110-
$this->assertInstanceOf(Group::class, $project->shared_with_groups[0]);
111-
$this->assertSame($data['only_allow_merge_if_pipeline_succeeds'], $project->only_allow_merge_if_pipeline_succeeds);
112-
$this->assertSame($data['only_allow_merge_if_all_discussions_are_resolved'], $project->only_allow_merge_if_all_discussions_are_resolved);
114+
$this->assertCount(0, $project->shared_with_groups);
115+
$this->assertSame($data['only_allow_merge_if_pipeline_succeeds'],
116+
$project->only_allow_merge_if_pipeline_succeeds);
117+
$this->assertSame($data['only_allow_merge_if_all_discussions_are_resolved'],
118+
$project->only_allow_merge_if_all_discussions_are_resolved);
113119
$this->assertSame($data['request_access_enabled'], $project->request_access_enabled);
114120
$this->assertSame($data['merge_method'], $project->merge_method);
115121
$this->assertSame($data['approvals_before_merge'], $project->approvals_before_merge);
116122
}
123+
124+
public function testCreateProjectWhenSharedWithGroup()
125+
{
126+
$client = $this->getMockBuilder(Client::class)
127+
->disableOriginalConstructor()
128+
->getMock();
129+
130+
$data = $this->defaultArray([
131+
'shared_with_groups' => [
132+
[
133+
'group_id' => 4,
134+
'group_name' => 'Twitter',
135+
'group_full_path' => 'twitter',
136+
'group_access_level' => 30
137+
]
138+
]
139+
]);
140+
141+
$project = Project::fromArray($client, $data);
142+
$this->assertCount(1, $project->shared_with_groups);
143+
$this->assertInstanceOf(Group::class, $project->shared_with_groups[0]);
144+
}
145+
146+
public function testCreateProjectCanSharedWithMultipleGroups()
147+
{
148+
$client = $this->getMockBuilder(Client::class)
149+
->disableOriginalConstructor()
150+
->getMock();
151+
152+
$data = $this->defaultArray([
153+
'shared_with_groups' => [
154+
[
155+
'group_id' => 4,
156+
'group_name' => 'Twitter',
157+
'group_full_path' => 'twitter',
158+
'group_access_level' => 30
159+
],
160+
[
161+
'group_id' => 3,
162+
'group_name' => 'Gitlab Org',
163+
'group_full_path' => 'gitlab-org',
164+
'group_access_level' => 10
165+
]
166+
167+
]
168+
]);
169+
170+
$project = Project::fromArray($client, $data);
171+
$this->assertCount(2, $project->shared_with_groups);
172+
$this->assertInstanceOf(Group::class, $project->shared_with_groups[0]);
173+
}
117174
}

0 commit comments

Comments
 (0)