Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 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
55 changes: 55 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,10 @@
* [Edit a custom package in a suborganization](#edit-a-custom-package-in-a-suborganization)
* [Delete a package from a suborganization](#delete-a-package-from-a-suborganization)
* [List all dependents of a suborganization package](#list-all-dependents-of-a-suborganization-package)
* [Create an artifact package file in a suborganization](#create-an-artifact-package-file-in-a-suborganization)
* [Create an artifact package in a suborganization](#create-an-artifact-package-in-a-suborganization)
* [Add an artifact file to an existing package in a suborganization](#add-an-artifact-file-to-an-existing-package-in-a-suborganization)
* [Update or replace artifact files of a package in a suborganization](#update-or-replace-artifact-files-of-a-package-in-a-suborganization)
* [List a suborganization's authentication tokens](#list-a-suborganizations-authentication-tokens)
* [Create a suborganization authentication token](#create-a-suborganization-authentication-token)
* [Delete a suborganization authentication token](#delete-a-suborganization-authentication-token)
Expand Down Expand Up @@ -702,6 +706,57 @@ $client->suborganizations()->packages()->listDependents($suborganizationName, 'a
```
Returns a list of packages.

#### Create an artifact package file in a suborganization

```php
$suborganizationName = 'suborganization';
$fileName = 'package1.zip'; // your package archive artifact containing a valid composer.json in root directory
$file = file_get_contents($fileName);
$client->suborganizations()->packages()->artifacts()->create($suborganizationName, $file, 'application/zip', $fileName);
```

#### Create an artifact package in a suborganization

```php
$suborganizationName = 'suborganization';
$fileName = 'package1.zip';
$file = file_get_contents($fileName);
$response = $client->suborganizations()->packages()->artifacts()->create($suborganizationName, $file, 'application/zip', $fileName);
$artifactId = $response['id'];
$client->suborganizations()->packages()->createArtifactPackage($suborganizationName, [$artifactId]);
```

#### Add an artifact file to an existing package in a suborganization

```php
$suborganizationName = 'suborganization';
$packageName = 'acme/artifact';
$fileName = 'package1.zip';
$file = file_get_contents($fileName);
$client->suborganizations()->packages()->artifacts()->add($suborganizationName, $packageName, $file, 'application/zip', $fileName);
```

#### Update or replace artifact files of a package in a suborganization

```php
$suborganizationName = 'suborganization';
// in case you want to replace the artifact file with a newly uploaded one
// 1. get current artifact ids
$result = $client->suborganizations()->packages()->artifacts()->showPackageArtifacts($suborganizationName, 'acme-website/package');
$artifactIds = array_column($result, 'id'); // [41, 42]

// 2. upload the new artifact file
$fileName = 'package1.zip';
$file = file_get_contents($fileName);
$response = $client->suborganizations()->packages()->artifacts()->create($suborganizationName, $file, 'application/zip', $fileName);
$newArtifactId = $response['id'];

// 3. let's say we don't want to have the artifact file id = 41 and use the newly uploaded file instead
$artifactIds = array_shift($artifactIds);
Comment thread
eiriksm marked this conversation as resolved.
Outdated
$artifactIds[] = $newArtifactId;
$client->suborganizations()->packages()->editArtifactPackage($suborganizationName, 'acme-website/package', $artifactIds);
```

#### List a suborganization's authentication tokens
```php
$suborganizationName = 'suborganization';
Expand Down
21 changes: 21 additions & 0 deletions src/Api/Suborganizations/Packages.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@
namespace PrivatePackagist\ApiClient\Api\Suborganizations;

use PrivatePackagist\ApiClient\Api\AbstractApi;
use PrivatePackagist\ApiClient\Api\Suborganizations\Packages\Artifacts;
use PrivatePackagist\ApiClient\Exception\InvalidArgumentException;
use PrivatePackagist\ApiClient\Payload\ArtifactPackageConfig;
use PrivatePackagist\ApiClient\Payload\CustomPackageConfig;
use PrivatePackagist\ApiClient\Payload\VcsPackageConfig;

Expand Down Expand Up @@ -44,6 +46,13 @@ public function createCustomPackage($suborganizationName, $customJson, $credenti
return $this->post(sprintf('/suborganizations/%s/packages/', $suborganizationName), $data->toParameters());
}

public function createArtifactPackage($suborganizationName, array $artifactPackageFileIds, $defaultSuborganizationAccess = null)
{
$data = new ArtifactPackageConfig($artifactPackageFileIds, $defaultSuborganizationAccess);
Comment thread
eiriksm marked this conversation as resolved.
Outdated

return $this->post(sprintf('/suborganizations/%s/packages/', $suborganizationName), $data->toParameters());
}

public function editVcsPackage($suborganizationName, $packageIdOrName, $url, $credentialId = null, $type = 'vcs', $defaultSuborganizationAccess = null)
{
$data = new VcsPackageConfig($url, $credentialId, $type, $defaultSuborganizationAccess);
Expand All @@ -58,6 +67,13 @@ public function editCustomPackage($suborganizationName, $packageIdOrName, $custo
return $this->put(sprintf('/suborganizations/%s/packages/%s/', $suborganizationName, $packageIdOrName), $data->toParameters());
}

public function editArtifactPackage($suborganizationName, $packageIdOrName, array $artifactPackageFileIds, $defaultSuborganizationAccess = null)
{
$data = new ArtifactPackageConfig($artifactPackageFileIds, $defaultSuborganizationAccess);
Comment thread
eiriksm marked this conversation as resolved.
Outdated

return $this->put(sprintf('/suborganizations/%s/packages/%s/', $suborganizationName, $packageIdOrName), $data->toParameters());
}

public function remove($suborganizationName, $packageIdOrName)
{
return $this->delete(sprintf('/suborganizations/%s/packages/%s/', $suborganizationName, $packageIdOrName));
Expand All @@ -67,4 +83,9 @@ public function listDependents($suborganizationName, $packageIdOrName)
{
return $this->getCollection(sprintf('/suborganizations/%s/packages/%s/dependents/', $suborganizationName, $packageIdOrName));
}

public function artifacts()
{
return new Artifacts($this->client, $this->client->getResponseMediator());
}
}
41 changes: 41 additions & 0 deletions src/Api/Suborganizations/Packages/Artifacts.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?php

/**
* (c) Packagist Conductors GmbH <contact@packagist.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

namespace PrivatePackagist\ApiClient\Api\Suborganizations\Packages;

use PrivatePackagist\ApiClient\Api\AbstractApi;

class Artifacts extends AbstractApi
{
public function create($suborganizationName, $file, $contentType, $fileName)
{
return $this->postFile(sprintf('/suborganizations/%s/packages/artifacts/', $suborganizationName), $file, array_filter([
'Content-Type' => $contentType,
'X-FILENAME' => $fileName
]));
}

public function add($suborganizationName, $packageIdOrName, $file, $contentType, $fileName)
{
return $this->postFile(sprintf('/suborganizations/%s/packages/%s/artifacts/', $suborganizationName, $packageIdOrName), $file, array_filter([
'Content-Type' => $contentType,
'X-FILENAME' => $fileName
]));
}

public function show($suborganizationName, $artifactId)
{
return $this->get(sprintf('/suborganizations/%s/packages/artifacts/%s/', $suborganizationName, $artifactId));
}

public function showPackageArtifacts($suborganizationName, $packageIdOrName)
{
return $this->getCollection(sprintf('/suborganizations/%s/packages/%s/artifacts/', $suborganizationName, $packageIdOrName));
}
}
108 changes: 108 additions & 0 deletions tests/Api/Suborganizations/Packages/ArtifactsTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
<?php

/**
* (c) Packagist Conductors GmbH <contact@packagist.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

namespace PrivatePackagist\ApiClient\Api\Suborganizations\Packages;

use PHPUnit\Framework\MockObject\MockObject;
use PrivatePackagist\ApiClient\Api\ApiTestCase;

class ArtifactsTest extends ApiTestCase
{
public function testCreate()
{
$suborganizationName = 'suborganization';
$expected = [
'id' => 1,
];
$rawFileContent = 'foobar';
$headers = [
'Content-Type' => 'application/zip',
'X-FILENAME' => 'file.zip'
];

/** @var Artifacts&MockObject $api */
$api = $this->getApiMock();
$api->expects($this->once())
->method('postFile')
->with($this->equalTo('/suborganizations/suborganization/packages/artifacts/'), $rawFileContent, $headers)
->willReturn($expected);


$this->assertSame($expected, $api->create($suborganizationName, $rawFileContent, $headers['Content-Type'], $headers['X-FILENAME']));
}

public function testAdd()
{
$suborganizationName = 'suborganization';
$packageName = 'acme/artifact';
$expected = [
'id' => 1,
];
$rawFileContent = 'foobar';
$headers = [
'Content-Type' => 'application/zip',
'X-FILENAME' => 'file.zip'
];

/** @var Artifacts&MockObject $api */
$api = $this->getApiMock();
$api->expects($this->once())
->method('postFile')
->with($this->equalTo('/suborganizations/'.$suborganizationName.'/packages/'.$packageName.'/artifacts/'), $rawFileContent, $headers)
->willReturn($expected);


$this->assertSame($expected, $api->add($suborganizationName, $packageName, $rawFileContent, $headers['Content-Type'], $headers['X-FILENAME']));
}

public function testShow()
{
$suborganizationName = 'suborganization';
$expected = [
'repoType' => 'artifact',
'artifactPackageFileIds' =>[1, 2],
];

/** @var Artifacts&MockObject $api */
$api = $this->getApiMock();
$api->expects($this->once())
->method('get')
->with($this->equalTo('/suborganizations/suborganization/packages/artifacts/1/'))
->willReturn($expected);

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

public function testShowPackageArtifacts()
{
$suborganizationName = 'suborganization';
$expected = [
'name' => 'acme-website/package',
'repoType' => 'artifact',
'artifactFiles' => 'artifact',
];

/** @var Artifacts&MockObject $api */
$api = $this->getApiMock();
$api->expects($this->once())
->method('getCollection')
->with($this->equalTo('/suborganizations/suborganization/packages/acme-website/package/artifacts/'))
->willReturn($expected);

$this->assertSame($expected, $api->showPackageArtifacts($suborganizationName, 'acme-website/package'));
}

/**
* @return string
*/
protected function getApiClass()
{
return Artifacts::class;
}
}
54 changes: 54 additions & 0 deletions tests/Api/Suborganizations/PackagesTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,42 @@ public function customProvider()
];
}

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

/** @var Packages&MockObject $api */
$api = $this->getApiMock();
$api->expects($this->once())
->method('post')
->with($this->equalTo('/suborganizations/suborganization/packages/'), $this->equalTo(['repoType' => 'artifact', 'artifactIds' => [42]]))
->willReturn($expected);

$this->assertSame($expected, $api->createArtifactPackage($suborganizationName, [42]));
}

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

/** @var Packages&MockObject $api */
$api = $this->getApiMock();
$api->expects($this->once())
->method('post')
->with($this->equalTo('/suborganizations/suborganization/packages/'), $this->equalTo(['repoType' => 'artifact', 'artifactIds' => [42], 'defaultSuborganizationAccess' => 'no-access']))
->willReturn($expected);

$this->assertSame($expected, $api->createArtifactPackage($suborganizationName, [42], 'no-access'));
}
Comment thread
eiriksm marked this conversation as resolved.
Outdated

public function testEditVcsPackage()
{
$suborganizationName = 'suborganization';
Expand Down Expand Up @@ -177,6 +213,24 @@ public function testEditCustomPackage()
$this->assertSame($expected, $api->editCustomPackage($suborganizationName, 'acme-website/package', '{}'));
}

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

/** @var Packages&MockObject $api */
$api = $this->getApiMock();
$api->expects($this->once())
->method('put')
->with($this->equalTo('/suborganizations/suborganization/packages/acme-website/package/'), $this->equalTo(['repoType' => 'artifact', 'artifactIds' => [1, 3]]))
->willReturn($expected);

$this->assertSame($expected, $api->editArtifactPackage($suborganizationName, 'acme-website/package', [1, 3]));
}

public function testRemove()
{
$suborganizationName = 'suborganization';
Expand Down