Skip to content

Commit 607221d

Browse files
authored
API: support mirrored repository endpoints (#23)
API: support mirrored repository endpoints
2 parents 43c308f + 3695989 commit 607221d

File tree

4 files changed

+277
-0
lines changed

4 files changed

+277
-0
lines changed

README.md

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,63 @@ $credentialId = 42;
335335
$client->credentials()->remove($credentialId);
336336
```
337337

338+
#### Mirrored Repository
339+
340+
##### List an organization's mirrored repositories
341+
```php
342+
$mirroredRepositories = $client->mirroredRepositories()->all();
343+
```
344+
Returns an array of mirrored repositories.
345+
346+
##### Show a mirrored repository
347+
```php
348+
$mirroredRepositoryId = 42;
349+
$mirroredRepository = $client->mirroredRepositories()->show($mirroredRepositoryId);
350+
```
351+
Returns the credential.
352+
353+
##### Create a mirrored repository
354+
```php
355+
$mirroredRepository = $client->mirroredRepositories()->create('Mirrored Repository', 'https://composer.example.com', 'add_on_use', 543);
356+
```
357+
Returns the new mirrored repository.
358+
359+
##### Edit a mirrored repository
360+
```php
361+
$mirroredRepositoryId = 42;
362+
$mirroredRepository = $client->mirroredRepositories()->create($mirroredRepositoryId, 'Mirrored Repository', 'https://composer.example.com', 'add_on_use', 543);
363+
```
364+
Returns the edited mirrored repository.
365+
366+
##### Delete a mirrored repository
367+
```php
368+
$mirroredRepositoryId = 42;
369+
$client->mirroredRepositories()->remove($mirroredRepositoryId);
370+
```
371+
372+
##### List all mirrored packages from one repository
373+
```php
374+
$mirroredRepositoryId = 42;
375+
$packages = $client->mirroredRepositories()->listPackages($mirroredRepositoryId);
376+
```
377+
Returns an array of packages.
378+
379+
##### Add mirrored packages from one repository
380+
```php
381+
$mirroredRepositoryId = 42;
382+
$packages = [
383+
'acme/cool-lib
384+
];
385+
$jobs = $client->mirroredRepositories()->addPackages($mirroredRepositoryId, $packages);
386+
```
387+
Returns an array of jobs.
388+
389+
##### Remove all mirrored packages from one repository
390+
```php
391+
$mirroredRepositoryId = 42;
392+
$client->mirroredRepositories()->removePackages($mirroredRepositoryId);
393+
```
394+
338395
#### Job
339396

340397
##### Show a job

src/Api/MirroredRepositories.php

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
<?php
2+
3+
/*
4+
* (c) Packagist Conductors UG (haftungsbeschränkt) <[email protected]>
5+
*
6+
* For the full copyright and license information, please view the LICENSE
7+
* file that was distributed with this source code.
8+
*/
9+
10+
namespace PrivatePackagist\ApiClient\Api;
11+
12+
class MirroredRepositories extends AbstractApi
13+
{
14+
public function all()
15+
{
16+
return $this->get('/mirrored-repositories/');
17+
}
18+
19+
public function create($name, $url, $mirroringBehavior, $credentials = null)
20+
{
21+
return $this->post('/mirrored-repositories/', [
22+
'name' => $name,
23+
'url' => $url,
24+
'mirroringBehavior' => $mirroringBehavior,
25+
'credentials' => $credentials,
26+
]);
27+
}
28+
29+
public function show($mirroredRepositoryId)
30+
{
31+
return $this->get(sprintf('/mirrored-repositories/%s/', $mirroredRepositoryId));
32+
}
33+
34+
public function edit($mirroredRepositoryId, $name, $url, $mirroringBehavior, $credentials = null)
35+
{
36+
return $this->put(sprintf('/mirrored-repositories/%s/', $mirroredRepositoryId), [
37+
'name' => $name,
38+
'url' => $url,
39+
'mirroringBehavior' => $mirroringBehavior,
40+
'credentials' => $credentials,
41+
]);
42+
}
43+
44+
public function remove($mirroredRepositoryId)
45+
{
46+
return $this->delete(sprintf('/mirrored-repositories/%s/', $mirroredRepositoryId));
47+
}
48+
49+
public function listPackages($mirroredRepositoryId)
50+
{
51+
return $this->get(sprintf('/mirrored-repositories/%s/packages/', $mirroredRepositoryId));
52+
}
53+
54+
public function addPackages($mirroredRepositoryId, array $packages)
55+
{
56+
return $this->post(sprintf('/mirrored-repositories/%s/packages/', $mirroredRepositoryId), $packages);
57+
}
58+
59+
public function removePackages($mirroredRepositoryId)
60+
{
61+
return $this->delete(sprintf('/mirrored-repositories/%s/packages/', $mirroredRepositoryId));
62+
}
63+
}

src/Client.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,11 @@ public function jobs()
8585
return new Api\Jobs($this, $this->responseMediator);
8686
}
8787

88+
public function mirroredRepositories()
89+
{
90+
return new Api\MirroredRepositories($this, $this->responseMediator);
91+
}
92+
8893
public function getHttpClient()
8994
{
9095
return $this->getHttpClientBuilder()->getHttpClient();
Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
<?php
2+
3+
/*
4+
* (c) Packagist Conductors UG (haftungsbeschränkt) <[email protected]>
5+
*
6+
* For the full copyright and license information, please view the LICENSE
7+
* file that was distributed with this source code.
8+
*/
9+
10+
namespace PrivatePackagist\ApiClient\Api;
11+
12+
class MirroredRepositoriesTest extends ApiTestCase
13+
{
14+
public function testAll()
15+
{
16+
$expected = [
17+
$this->getMirroredRepositoryDefinition(),
18+
];
19+
20+
/** @var MirroredRepositories&\PHPUnit_Framework_MockObject_MockObject $api */
21+
$api = $this->getApiMock();
22+
$api->expects($this->once())
23+
->method('get')
24+
->with($this->equalTo('/mirrored-repositories/'))
25+
->willReturn($expected);
26+
27+
$this->assertSame($expected, $api->all());
28+
}
29+
30+
public function testShow()
31+
{
32+
$expected = $this->getMirroredRepositoryDefinition();
33+
34+
/** @var MirroredRepositories&\PHPUnit_Framework_MockObject_MockObject $api */
35+
$api = $this->getApiMock();
36+
$api->expects($this->once())
37+
->method('get')
38+
->with($this->equalTo('/mirrored-repositories/1/'))
39+
->willReturn($expected);
40+
41+
$this->assertSame($expected, $api->show(1));
42+
}
43+
44+
public function testCreate()
45+
{
46+
$expected = $this->getMirroredRepositoryDefinition();
47+
$data = json_decode( json_encode($expected), true);
48+
unset($data['id']);
49+
50+
/** @var MirroredRepositories&\PHPUnit_Framework_MockObject_MockObject $api */
51+
$api = $this->getApiMock();
52+
$api->expects($this->once())
53+
->method('post')
54+
->with($this->equalTo('/mirrored-repositories/'), $this->equalTo($data))
55+
->willReturn($expected);
56+
57+
$this->assertSame($expected, $api->create($data['name'], $data['url'], $data['mirroringBehavior'], $data['credentials']));
58+
}
59+
60+
public function testEdit()
61+
{
62+
$expected = $this->getMirroredRepositoryDefinition();
63+
$data = json_decode( json_encode($expected), true);
64+
unset($data['id']);
65+
66+
/** @var MirroredRepositories&\PHPUnit_Framework_MockObject_MockObject $api */
67+
$api = $this->getApiMock();
68+
$api->expects($this->once())
69+
->method('put')
70+
->with($this->equalTo('/mirrored-repositories/1/'), $this->equalTo($data))
71+
->willReturn($expected);
72+
73+
$this->assertSame($expected, $api->edit(1, $data['name'], $data['url'], $data['mirroringBehavior'], $data['credentials']));
74+
}
75+
public function testRemove()
76+
{
77+
/** @var MirroredRepositories&\PHPUnit_Framework_MockObject_MockObject $api */
78+
$api = $this->getApiMock();
79+
$api->expects($this->once())
80+
->method('delete')
81+
->with($this->equalTo('/mirrored-repositories/1/'))
82+
->willReturn([]);
83+
84+
$this->assertSame([], $api->remove(1));
85+
}
86+
87+
public function testListPackages()
88+
{
89+
$expected = [[
90+
'name' => 'acme/cool-lib',
91+
'origin' => 'public-mirror',
92+
'credentials' => null,
93+
]];
94+
/** @var MirroredRepositories&\PHPUnit_Framework_MockObject_MockObject $api */
95+
$api = $this->getApiMock();
96+
$api->expects($this->once())
97+
->method('get')
98+
->with($this->equalTo('/mirrored-repositories/1/packages/'))
99+
->willReturn($expected);
100+
101+
$this->assertSame($expected, $api->listPackages(1));
102+
}
103+
104+
public function testAddPackages()
105+
{
106+
$expected = [[
107+
'id' => 'job-id',
108+
'status' => 'queued',
109+
]];
110+
111+
$packages = [
112+
'acme/cool-lib',
113+
];
114+
115+
/** @var MirroredRepositories&\PHPUnit_Framework_MockObject_MockObject $api */
116+
$api = $this->getApiMock();
117+
$api->expects($this->once())
118+
->method('post')
119+
->with($this->equalTo('/mirrored-repositories/1/packages/'), $this->equalTo($packages))
120+
->willReturn($expected);
121+
122+
$this->assertSame($expected, $api->addPackages(1, $packages));
123+
}
124+
125+
public function testRemovePackages()
126+
{
127+
/** @var MirroredRepositories&\PHPUnit_Framework_MockObject_MockObject $api */
128+
$api = $this->getApiMock();
129+
$api->expects($this->once())
130+
->method('delete')
131+
->with($this->equalTo('/mirrored-repositories/1/packages/'))
132+
->willReturn([]);
133+
134+
$this->assertSame([], $api->removePackages(1));
135+
}
136+
137+
protected function getApiClass()
138+
{
139+
return MirroredRepositories::class;
140+
}
141+
142+
private function getMirroredRepositoryDefinition()
143+
{
144+
return [
145+
'id' => 1,
146+
'name' => 'Packagist.org',
147+
'url' => 'https://packagist.org',
148+
'mirroringBehavior' => 'add_on_use',
149+
'credentials' => null,
150+
];
151+
}
152+
}

0 commit comments

Comments
 (0)