Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 58 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -303,7 +303,7 @@ Returns a list of customers with access to the package.

##### List an organization's credentials
```php
$packages = $client->credentials()->all();
$credentials = $client->credentials()->all();
```
Returns an array of credentials.

Expand Down Expand Up @@ -335,6 +335,63 @@ $credentialId = 42;
$client->credentials()->remove($credentialId);
```

#### Mirrored Repository

##### List an organization's mirrored repositories
```php
$mirroredRepositories = $client->mirroredRepositories()->all();
```
Returns an array of mirrored repositories.

##### Show a mirrored repository
```php
$mirroredRepositoryId = 42;
$mirroredRepository = $client->mirroredRepositories()->show($mirroredRepositoryId);
```
Returns the credential.

##### Create a mirrored repository
```php
$mirroredRepository = $client->mirroredRepositories()->create('Mirrored Repository', 'https://composer.example.com', 'add_on_use', 543);
```
Returns the new mirrored repository.

##### Edit a mirrored repository
```php
$mirroredRepositoryId = 42;
$mirroredRepository = $client->mirroredRepositories()->create($mirroredRepositoryId, 'Mirrored Repository', 'https://composer.example.com', 'add_on_use', 543);
```
Returns the edited mirrored repository.

##### Delete a mirrored repository
```php
$mirroredRepositoryId = 42;
$client->mirroredRepositories()->remove($mirroredRepositoryId);
```

##### List all mirrored packages from one repository
```php
$mirroredRepositoryId = 42;
$packages = $client->mirroredRepositories()->listPackages($mirroredRepositoryId);
```
Returns an array of packages.

##### Add mirrored packages from one repository
```php
$mirroredRepositoryId = 42;
$packages = [
'acme/cool-lib
];
$jobs = $client->mirroredRepositories()->addPackages($mirroredRepositoryId, $packages);
```
Returns an array of jobs.

##### Remove all mirrored packages from one repository
```php
$mirroredRepositoryId = 42;
$client->mirroredRepositories()->removePackages($mirroredRepositoryId);
```

#### Job

##### Show a job
Expand Down
63 changes: 63 additions & 0 deletions src/Api/MirroredRepositories.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
<?php

/*
* (c) Packagist Conductors UG (haftungsbeschränkt) <[email protected]>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

namespace PrivatePackagist\ApiClient\Api;

class MirroredRepositories extends AbstractApi
{
public function all()
{
return $this->get('/mirrored-repositories/');
}

public function create($name, $url, $mirroringBehavior, $credentials = null)
{
return $this->post('/mirrored-repositories/', [
'name' => $name,
'url' => $url,
'mirroringBehavior' => $mirroringBehavior,
'credentials' => $credentials,
]);
}

public function show($mirroredRepositoryId)
{
return $this->get(sprintf('/mirrored-repositories/%s/', $mirroredRepositoryId));
}

public function edit($mirroredRepositoryId, $name, $url, $mirroringBehavior, $credentials = null)
{
return $this->put(sprintf('/mirrored-repositories/%s/', $mirroredRepositoryId), [
'name' => $name,
'url' => $url,
'mirroringBehavior' => $mirroringBehavior,
'credentials' => $credentials,
]);
}

public function remove($mirroredRepositoryId)
{
return $this->delete(sprintf('/mirrored-repositories/%s/', $mirroredRepositoryId));
}

public function listPackages($mirroredRepositoryId)
{
return $this->get(sprintf('/mirrored-repositories/%s/packages/', $mirroredRepositoryId));
}

public function addPackages($mirroredRepositoryId, array $packages)
{
return $this->post(sprintf('/mirrored-repositories/%s/packages/', $mirroredRepositoryId), $packages);
}

public function removePackages($mirroredRepositoryId)
{
return $this->delete(sprintf('/mirrored-repositories/%s/packages/', $mirroredRepositoryId));
}
}
5 changes: 5 additions & 0 deletions src/Client.php
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,11 @@ public function jobs()
return new Api\Jobs($this, $this->responseMediator);
}

public function mirroredRepositories()
{
return new Api\MirroredRepositories($this, $this->responseMediator);
}

public function getHttpClient()
{
return $this->getHttpClientBuilder()->getHttpClient();
Expand Down
152 changes: 152 additions & 0 deletions tests/Api/MirroredRepositoriesTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
<?php

/*
* (c) Packagist Conductors UG (haftungsbeschränkt) <[email protected]>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

namespace PrivatePackagist\ApiClient\Api;

class MirroredRepositoriesTest extends ApiTestCase
{
public function testAll()
{
$expected = [
$this->getMirroredRepositoryDefinition(),
];

/** @var MirroredRepositories&\PHPUnit_Framework_MockObject_MockObject $api */
$api = $this->getApiMock();
$api->expects($this->once())
->method('get')
->with($this->equalTo('/mirrored-repositories/'))
->willReturn($expected);

$this->assertSame($expected, $api->all());
}

public function testShow()
{
$expected = $this->getMirroredRepositoryDefinition();

/** @var MirroredRepositories&\PHPUnit_Framework_MockObject_MockObject $api */
$api = $this->getApiMock();
$api->expects($this->once())
->method('get')
->with($this->equalTo('/mirrored-repositories/1/'))
->willReturn($expected);

$this->assertSame($expected, $api->show(1));
}

public function testCreate()
{
$expected = $this->getMirroredRepositoryDefinition();
$data = json_decode( json_encode($expected), true);
unset($data['id']);

/** @var MirroredRepositories&\PHPUnit_Framework_MockObject_MockObject $api */
$api = $this->getApiMock();
$api->expects($this->once())
->method('post')
->with($this->equalTo('/mirrored-repositories/'), $this->equalTo($data))
->willReturn($expected);

$this->assertSame($expected, $api->create($data['name'], $data['url'], $data['mirroringBehavior'], $data['credentials']));
}

public function testEdit()
{
$expected = $this->getMirroredRepositoryDefinition();
$data = json_decode( json_encode($expected), true);
unset($data['id']);

/** @var MirroredRepositories&\PHPUnit_Framework_MockObject_MockObject $api */
$api = $this->getApiMock();
$api->expects($this->once())
->method('put')
->with($this->equalTo('/mirrored-repositories/1/'), $this->equalTo($data))
->willReturn($expected);

$this->assertSame($expected, $api->edit(1, $data['name'], $data['url'], $data['mirroringBehavior'], $data['credentials']));
}
public function testRemove()
{
/** @var MirroredRepositories&\PHPUnit_Framework_MockObject_MockObject $api */
$api = $this->getApiMock();
$api->expects($this->once())
->method('delete')
->with($this->equalTo('/mirrored-repositories/1/'))
->willReturn([]);

$this->assertSame([], $api->remove(1));
}

public function testListPackages()
{
$expected = [[
'name' => 'acme/cool-lib',
'origin' => 'public-mirror',
'credentials' => null,
]];
/** @var MirroredRepositories&\PHPUnit_Framework_MockObject_MockObject $api */
$api = $this->getApiMock();
$api->expects($this->once())
->method('get')
->with($this->equalTo('/mirrored-repositories/1/packages/'))
->willReturn($expected);

$this->assertSame($expected, $api->listPackages(1));
}

public function testAddPackages()
{
$expected = [[
'id' => 'job-id',
'status' => 'queued',
]];

$packages = [
'acme/cool-lib',
];

/** @var MirroredRepositories&\PHPUnit_Framework_MockObject_MockObject $api */
$api = $this->getApiMock();
$api->expects($this->once())
->method('post')
->with($this->equalTo('/mirrored-repositories/1/packages/'), $this->equalTo($packages))
->willReturn($expected);

$this->assertSame($expected, $api->addPackages(1, $packages));
}

public function testRemovePackages()
{
/** @var MirroredRepositories&\PHPUnit_Framework_MockObject_MockObject $api */
$api = $this->getApiMock();
$api->expects($this->once())
->method('delete')
->with($this->equalTo('/mirrored-repositories/1/packages/'))
->willReturn([]);

$this->assertSame([], $api->removePackages(1));
}

protected function getApiClass()
{
return MirroredRepositories::class;
}

private function getMirroredRepositoryDefinition()
{
return [
'id' => 1,
'name' => 'Packagist.org',
'url' => 'https://packagist.org',
'mirroringBehavior' => 'add_on_use',
'credentials' => null,
];
}
}