88 lines
4.9 KiB
PHP
88 lines
4.9 KiB
PHP
<?php
|
|
|
|
namespace Tests\Feature\Api;
|
|
|
|
use Tests\TestCase;
|
|
|
|
class OpenApiDocumentationTest extends TestCase
|
|
{
|
|
public function test_openapi_document_is_valid_json_and_covers_application_api_routes(): void
|
|
{
|
|
$documentPath = base_path('docs/openapi/kanbangit-api.openapi.json');
|
|
|
|
$this->assertFileExists($documentPath);
|
|
|
|
$document = json_decode((string) file_get_contents($documentPath), true);
|
|
|
|
$this->assertIsArray($document);
|
|
$this->assertSame(JSON_ERROR_NONE, json_last_error());
|
|
$this->assertSame('3.1.0', $document['openapi']);
|
|
$this->assertSame([['ApplicationKey' => []]], $document['security']);
|
|
|
|
$expectedOperations = [
|
|
['get', '/projects'],
|
|
['post', '/projects'],
|
|
['get', '/projects/{project}'],
|
|
['delete', '/projects/{project}'],
|
|
['get', '/projects/{project}/board'],
|
|
['get', '/projects/{project}/backlog'],
|
|
['get', '/projects/{project}/ticket-options'],
|
|
['get', '/projects/{project}/tickets'],
|
|
['post', '/projects/{project}/tickets'],
|
|
['get', '/projects/{project}/tickets/{ticket}'],
|
|
['patch', '/projects/{project}/tickets/{ticket}'],
|
|
['get', '/projects/{project}/tickets/{ticket}/status-targets'],
|
|
['patch', '/projects/{project}/tickets/{ticket}/status'],
|
|
['get', '/projects/{project}/tickets/{ticket}/branches/validate'],
|
|
['post', '/projects/{project}/tickets/{ticket}/branches'],
|
|
['post', '/projects/{project}/tickets/{ticket}/links'],
|
|
['delete', '/projects/{project}/tickets/{ticket}/links/{ticketLink}'],
|
|
['get', '/projects/{project}/settings/board'],
|
|
['post', '/projects/{project}/settings/board/columns'],
|
|
['patch', '/projects/{project}/settings/board/columns/{boardColumn}'],
|
|
['delete', '/projects/{project}/settings/board/columns/{boardColumn}'],
|
|
['post', '/projects/{project}/settings/board/statuses'],
|
|
['patch', '/projects/{project}/settings/board/statuses/{ticketStatus}'],
|
|
['delete', '/projects/{project}/settings/board/statuses/{ticketStatus}'],
|
|
['patch', '/projects/{project}/settings/board/statuses/{ticketStatus}/transitions'],
|
|
['get', '/projects/{project}/settings/metadata'],
|
|
['patch', '/projects/{project}/settings/metadata'],
|
|
['post', '/projects/{project}/settings/metadata/types'],
|
|
['patch', '/projects/{project}/settings/metadata/types/{ticketType}'],
|
|
['delete', '/projects/{project}/settings/metadata/types/{ticketType}'],
|
|
['post', '/projects/{project}/settings/metadata/priorities'],
|
|
['patch', '/projects/{project}/settings/metadata/priorities/{ticketPriority}'],
|
|
['delete', '/projects/{project}/settings/metadata/priorities/{ticketPriority}'],
|
|
['post', '/projects/{project}/settings/metadata/fields'],
|
|
['patch', '/projects/{project}/settings/metadata/fields/{ticketFieldDefinition}'],
|
|
['delete', '/projects/{project}/settings/metadata/fields/{ticketFieldDefinition}'],
|
|
['post', '/projects/{project}/settings/metadata/link-types'],
|
|
['patch', '/projects/{project}/settings/metadata/link-types/{ticketLinkType}'],
|
|
['delete', '/projects/{project}/settings/metadata/link-types/{ticketLinkType}'],
|
|
['get', '/projects/{project}/settings/repositories'],
|
|
['post', '/projects/{project}/settings/repositories'],
|
|
['patch', '/projects/{project}/settings/repositories/{repositoryConnection}'],
|
|
['delete', '/projects/{project}/settings/repositories/{repositoryConnection}'],
|
|
['get', '/git-connections'],
|
|
['post', '/git-connections'],
|
|
['patch', '/git-connections/{gitConnection}'],
|
|
['delete', '/git-connections/{gitConnection}'],
|
|
['get', '/users/{user}/assigned-tickets'],
|
|
];
|
|
|
|
foreach ($expectedOperations as [$method, $path]) {
|
|
$this->assertArrayHasKey($path, $document['paths']);
|
|
$this->assertArrayHasKey($method, $document['paths'][$path]);
|
|
}
|
|
|
|
$this->assertArrayHasKey('ApplicationKey', $document['components']['securitySchemes']);
|
|
$this->assertSame('http', $document['components']['securitySchemes']['ApplicationKey']['type']);
|
|
$this->assertSame('bearer', $document['components']['securitySchemes']['ApplicationKey']['scheme']);
|
|
$this->assertArrayHasKey('ValidationError', $document['components']['schemas']);
|
|
$this->assertArrayHasKey('TicketUpdateRequest', $document['components']['schemas']);
|
|
$this->assertArrayHasKey('UserGitConnectionRequest', $document['components']['schemas']);
|
|
$this->assertArrayHasKey('AssignedTicketsPayloadEnvelope', $document['components']['schemas']);
|
|
$this->assertArrayHasKey('AssignedTicketsProjectGroup', $document['components']['schemas']);
|
|
}
|
|
}
|