diff --git a/src/Clients/CreditNote.php b/src/Clients/CreditNote.php index e613f13..9f087f3 100644 --- a/src/Clients/CreditNote.php +++ b/src/Clients/CreditNote.php @@ -7,6 +7,7 @@ use Sysix\LexOffice\BaseClient; use Sysix\LexOffice\Clients\Traits\CreateFinalizeTrait; use Sysix\LexOffice\Clients\Traits\DocumentClientTrait; +use Sysix\LexOffice\Clients\Traits\FileClientWithAcceptHeaderTrait; use Sysix\LexOffice\Clients\Traits\GetTrait; use Sysix\LexOffice\Clients\Traits\PursueFinalizeTrait; use Sysix\LexOffice\Clients\Traits\VoucherListTrait; @@ -15,6 +16,7 @@ class CreditNote extends BaseClient { use CreateFinalizeTrait; use DocumentClientTrait; + use FileClientWithAcceptHeaderTrait; use GetTrait; use PursueFinalizeTrait; use VoucherListTrait; diff --git a/src/Clients/DeliveryNote.php b/src/Clients/DeliveryNote.php index 80be06b..5bfee9a 100644 --- a/src/Clients/DeliveryNote.php +++ b/src/Clients/DeliveryNote.php @@ -7,6 +7,7 @@ use Sysix\LexOffice\BaseClient; use Sysix\LexOffice\Clients\Traits\CreateTrait; use Sysix\LexOffice\Clients\Traits\DocumentClientTrait; +use Sysix\LexOffice\Clients\Traits\FileClientTrait; use Sysix\LexOffice\Clients\Traits\GetTrait; use Sysix\LexOffice\Clients\Traits\PursueTrait; use Sysix\LexOffice\Clients\Traits\VoucherListTrait; @@ -15,6 +16,7 @@ class DeliveryNote extends BaseClient { use CreateTrait; use DocumentClientTrait; + use FileClientTrait; use GetTrait; use PursueTrait; use VoucherListTrait; diff --git a/src/Clients/DownPaymentInvoice.php b/src/Clients/DownPaymentInvoice.php index f227be3..353a20d 100644 --- a/src/Clients/DownPaymentInvoice.php +++ b/src/Clients/DownPaymentInvoice.php @@ -6,12 +6,14 @@ use Sysix\LexOffice\BaseClient; use Sysix\LexOffice\Clients\Traits\DocumentClientTrait; +use Sysix\LexOffice\Clients\Traits\FileClientWithAcceptHeaderTrait; use Sysix\LexOffice\Clients\Traits\GetTrait; use Sysix\LexOffice\Clients\Traits\VoucherListTrait; class DownPaymentInvoice extends BaseClient { use DocumentClientTrait; + use FileClientWithAcceptHeaderTrait; use GetTrait; use VoucherListTrait; diff --git a/src/Clients/Dunning.php b/src/Clients/Dunning.php index fedb58b..fc72d4c 100644 --- a/src/Clients/Dunning.php +++ b/src/Clients/Dunning.php @@ -6,12 +6,14 @@ use Sysix\LexOffice\BaseClient; use Sysix\LexOffice\Clients\Traits\DocumentClientTrait; +use Sysix\LexOffice\Clients\Traits\FileClientTrait; use Sysix\LexOffice\Clients\Traits\GetTrait; use Sysix\LexOffice\Clients\Traits\PursueTrait; class Dunning extends BaseClient { use DocumentClientTrait; + use FileClientTrait; use GetTrait; use PursueTrait; diff --git a/src/Clients/Invoice.php b/src/Clients/Invoice.php index ce2b039..b45108e 100644 --- a/src/Clients/Invoice.php +++ b/src/Clients/Invoice.php @@ -7,6 +7,7 @@ use Sysix\LexOffice\BaseClient; use Sysix\LexOffice\Clients\Traits\CreateFinalizeTrait; use Sysix\LexOffice\Clients\Traits\DocumentClientTrait; +use Sysix\LexOffice\Clients\Traits\FileClientWithAcceptHeaderTrait; use Sysix\LexOffice\Clients\Traits\GetTrait; use Sysix\LexOffice\Clients\Traits\PursueFinalizeTrait; use Sysix\LexOffice\Clients\Traits\VoucherListTrait; @@ -15,6 +16,7 @@ class Invoice extends BaseClient { use CreateFinalizeTrait; use DocumentClientTrait; + use FileClientWithAcceptHeaderTrait; use GetTrait; use PursueFinalizeTrait; use VoucherListTrait; diff --git a/src/Clients/OrderConfirmation.php b/src/Clients/OrderConfirmation.php index 393d9f1..f64a31b 100644 --- a/src/Clients/OrderConfirmation.php +++ b/src/Clients/OrderConfirmation.php @@ -7,6 +7,7 @@ use Sysix\LexOffice\BaseClient; use Sysix\LexOffice\Clients\Traits\CreateTrait; use Sysix\LexOffice\Clients\Traits\DocumentClientTrait; +use Sysix\LexOffice\Clients\Traits\FileClientTrait; use Sysix\LexOffice\Clients\Traits\GetTrait; use Sysix\LexOffice\Clients\Traits\PursueTrait; use Sysix\LexOffice\Clients\Traits\VoucherListTrait; @@ -15,6 +16,7 @@ class OrderConfirmation extends BaseClient { use CreateTrait; use DocumentClientTrait; + use FileClientTrait; use GetTrait; use PursueTrait; use VoucherListTrait; diff --git a/src/Clients/Quotation.php b/src/Clients/Quotation.php index 992c2ac..bd35a90 100644 --- a/src/Clients/Quotation.php +++ b/src/Clients/Quotation.php @@ -7,6 +7,7 @@ use Sysix\LexOffice\BaseClient; use Sysix\LexOffice\Clients\Traits\CreateFinalizeTrait; use Sysix\LexOffice\Clients\Traits\DocumentClientTrait; +use Sysix\LexOffice\Clients\Traits\FileClientTrait; use Sysix\LexOffice\Clients\Traits\GetTrait; use Sysix\LexOffice\Clients\Traits\VoucherListTrait; @@ -14,6 +15,7 @@ class Quotation extends BaseClient { use CreateFinalizeTrait; use DocumentClientTrait; + use FileClientTrait; use GetTrait; use VoucherListTrait; diff --git a/src/Clients/Traits/DocumentClientTrait.php b/src/Clients/Traits/DocumentClientTrait.php index 97572bb..b02d525 100644 --- a/src/Clients/Traits/DocumentClientTrait.php +++ b/src/Clients/Traits/DocumentClientTrait.php @@ -7,12 +7,10 @@ use Psr\Http\Message\ResponseInterface; /** - * @deprecated use the FileClientTrait instead + * @deprecated use the FileClientTrait or FileClientWithAcceptHeaderTrait instead */ trait DocumentClientTrait { - use FileClientTrait; - public function document(string $id, bool $asContent = false, string $acceptHeader = '*/*'): ResponseInterface { trigger_error(__METHOD__.' should not be called anymore, in future versions this method WILL not exist', E_USER_DEPRECATED); @@ -25,6 +23,10 @@ public function document(string $id, bool $asContent = false, string $acceptHead return $response; } - return $this->file($id, $acceptHeader); + $this->api->newRequest('GET', $this->resource . '/' . rawurlencode($id) . '/file'); + + return $this->api + ->setRequest($this->api->getRequest()->withHeader('Accept', $acceptHeader)) + ->getResponse(); } } diff --git a/src/Clients/Traits/FileClientTrait.php b/src/Clients/Traits/FileClientTrait.php index 1b1664f..40de862 100644 --- a/src/Clients/Traits/FileClientTrait.php +++ b/src/Clients/Traits/FileClientTrait.php @@ -8,12 +8,12 @@ trait FileClientTrait { - public function file(string $id, string $acceptHeader = '*/*'): ResponseInterface + public function file(string $id): ResponseInterface { $this->api->newRequest('GET', $this->resource . '/' . rawurlencode($id) . '/file'); return $this->api - ->setRequest($this->api->getRequest()->withHeader('Accept', $acceptHeader)) + ->setRequest($this->api->getRequest()->withHeader('Accept', '*/*')) ->getResponse(); } } diff --git a/src/Clients/Traits/FileClientWithAcceptHeaderTrait.php b/src/Clients/Traits/FileClientWithAcceptHeaderTrait.php new file mode 100644 index 0000000..ea85f45 --- /dev/null +++ b/src/Clients/Traits/FileClientWithAcceptHeaderTrait.php @@ -0,0 +1,19 @@ +api->newRequest('GET', $this->resource . '/' . rawurlencode($id) . '/file'); + + return $this->api + ->setRequest($this->api->getRequest()->withHeader('Accept', $acceptHeader)) + ->getResponse(); + } +} diff --git a/src/Utils.php b/src/Utils.php index a669f58..afdd8d9 100644 --- a/src/Utils.php +++ b/src/Utils.php @@ -83,7 +83,7 @@ public static function createStream(mixed $content): StreamInterface * * @param array $content */ - public static function createMultipartStream(array $content, string $boundary = null): MultipartStream + public static function createMultipartStream(array $content, ?string $boundary = null): MultipartStream { $stream = []; $boundary = !is_null($boundary) && $boundary !== '' ? $boundary : '--lexoffice'; diff --git a/tests/Clients/CreditNoteTest.php b/tests/Clients/CreditNoteTest.php index 7f4754d..ec8dc10 100644 --- a/tests/Clients/CreditNoteTest.php +++ b/tests/Clients/CreditNoteTest.php @@ -184,6 +184,29 @@ public function testFileContent(): void $this->assertInstanceOf(ResponseInterface::class, $response); $this->assertEquals('GET', $api->getRequest()->getMethod()); + $this->assertEquals( + '*/*', + $api->getRequest()->getHeaderLine('Accept') + ); + $this->assertEquals( + $api->apiUrl . '/v1/credit-notes/resource-id/file', + $api->getRequest()->getUri()->__toString() + ); + } + + public function testFileContentWithAcceptHeader(): void + { + [$api, $stub] = $this->createClientMockObject(CreditNote::class); + + $response = $stub->file('resource-id', 'application/xml'); + + $this->assertInstanceOf(ResponseInterface::class, $response); + + $this->assertEquals('GET', $api->getRequest()->getMethod()); + $this->assertEquals( + 'application/xml', + $api->getRequest()->getHeaderLine('Accept') + ); $this->assertEquals( $api->apiUrl . '/v1/credit-notes/resource-id/file', $api->getRequest()->getUri()->__toString() diff --git a/tests/Clients/DownPaymentInvoiceTest.php b/tests/Clients/DownPaymentInvoiceTest.php index 24361ce..649e8ef 100644 --- a/tests/Clients/DownPaymentInvoiceTest.php +++ b/tests/Clients/DownPaymentInvoiceTest.php @@ -99,6 +99,29 @@ public function testFileContent(): void $this->assertInstanceOf(ResponseInterface::class, $response); $this->assertEquals('GET', $api->getRequest()->getMethod()); + $this->assertEquals( + '*/*', + $api->getRequest()->getHeaderLine('Accept') + ); + $this->assertEquals( + $api->apiUrl . '/v1/down-payment-invoices/resource-id/file', + $api->getRequest()->getUri()->__toString() + ); + } + + public function testFileContentWithAcceptHeader(): void + { + [$api, $stub] = $this->createClientMockObject(DownPaymentInvoice::class); + + $response = $stub->file('resource-id', 'application/xml'); + + $this->assertInstanceOf(ResponseInterface::class, $response); + + $this->assertEquals('GET', $api->getRequest()->getMethod()); + $this->assertEquals( + 'application/xml', + $api->getRequest()->getHeaderLine('Accept') + ); $this->assertEquals( $api->apiUrl . '/v1/down-payment-invoices/resource-id/file', $api->getRequest()->getUri()->__toString() diff --git a/tests/Clients/InvoiceTest.php b/tests/Clients/InvoiceTest.php index 2384738..7a0a389 100644 --- a/tests/Clients/InvoiceTest.php +++ b/tests/Clients/InvoiceTest.php @@ -184,9 +184,33 @@ public function testFileContent(): void $this->assertInstanceOf(ResponseInterface::class, $response); $this->assertEquals('GET', $api->getRequest()->getMethod()); + $this->assertEquals( + '*/*', + $api->getRequest()->getHeaderLine('Accept') + ); + $this->assertEquals( + $api->apiUrl . '/v1/invoices/resource-id/file', + $api->getRequest()->getUri()->__toString() + ); + } + + public function testFileContentWithAcceptHeader(): void + { + [$api, $stub] = $this->createClientMockObject(Invoice::class); + + $response = $stub->file('resource-id', 'application/xml'); + + $this->assertInstanceOf(ResponseInterface::class, $response); + + $this->assertEquals('GET', $api->getRequest()->getMethod()); + $this->assertEquals( + 'application/xml', + $api->getRequest()->getHeaderLine('Accept') + ); $this->assertEquals( $api->apiUrl . '/v1/invoices/resource-id/file', $api->getRequest()->getUri()->__toString() ); } + }