Skip to content

Commit e78bc3b

Browse files
committed
Update fromArray method to handle correct 'shared_with_groups' field names
1 parent 8693991 commit e78bc3b

File tree

2 files changed

+76
-14
lines changed

2 files changed

+76
-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: 72 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,25 @@ 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+
70+
public function testFromArray()
71+
{
72+
$client = $this->getMockBuilder(Client::class)
73+
->disableOriginalConstructor()
74+
->getMock();
75+
76+
$data = $this->defaultArray();
7177

7278
$project = Project::fromArray($client, $data);
7379

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

0 commit comments

Comments
 (0)