<?php declare(strict_types=1); namespace ShlinkioApiTest\Shlink\Rest\Action; use GuzzleHttp\RequestOptions; use Psr\Http\Message\ResponseInterface; use Shlinkio\Shlink\TestUtils\ApiTest\ApiTestCase; class SingleStepCreateShortUrlTest extends ApiTestCase { /** * @test * @dataProvider provideFormats */ public function createsNewShortUrlWithExpectedResponse(?string $format, string $expectedContentType): void { $resp = $this->createShortUrl($format, 'valid_api_key'); self::assertEquals(self::STATUS_OK, $resp->getStatusCode()); self::assertEquals($expectedContentType, $resp->getHeaderLine('Content-Type')); } public function provideFormats(): iterable { yield 'txt format' => ['txt', 'text/plain']; yield 'json format' => ['json', 'application/json']; yield '<empty> format' => [null, 'application/json']; } /** @test */ public function authorizationErrorIsReturnedIfNoApiKeyIsSent(): void { $expectedDetail = 'Expected authentication to be provided in "apiKey" query param'; $resp = $this->createShortUrl(); $payload = $this->getJsonResponsePayload($resp); self::assertEquals(self::STATUS_UNAUTHORIZED, $resp->getStatusCode()); self::assertEquals(self::STATUS_UNAUTHORIZED, $payload['status']); self::assertEquals('INVALID_AUTHORIZATION', $payload['type']); self::assertEquals($expectedDetail, $payload['detail']); self::assertEquals('Invalid authorization', $payload['title']); } private function createShortUrl(?string $format = 'json', ?string $apiKey = null): ResponseInterface { $query = [ 'longUrl' => 'https://app.shlink.io', 'apiKey' => $apiKey, 'format' => $format, ]; return $this->callApi(self::METHOD_GET, '/short-urls/shorten', [RequestOptions::QUERY => $query]); } }