UpdateTagTest.php 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <?php
  2. declare(strict_types=1);
  3. namespace ShlinkioApiTest\Shlink\Rest\Action;
  4. use GuzzleHttp\RequestOptions;
  5. use Shlinkio\Shlink\TestUtils\ApiTest\ApiTestCase;
  6. class UpdateTagTest extends ApiTestCase
  7. {
  8. /**
  9. * @test
  10. * @dataProvider provideInvalidBody
  11. */
  12. public function notProvidingTagsReturnsBadRequest(array $body): void
  13. {
  14. $expectedDetail = 'Provided data is not valid';
  15. $resp = $this->callApiWithKey(self::METHOD_PUT, '/tags', [RequestOptions::JSON => $body]);
  16. $payload = $this->getJsonResponsePayload($resp);
  17. self::assertEquals(self::STATUS_BAD_REQUEST, $resp->getStatusCode());
  18. self::assertEquals(self::STATUS_BAD_REQUEST, $payload['status']);
  19. self::assertEquals('INVALID_ARGUMENT', $payload['type']);
  20. self::assertEquals($expectedDetail, $payload['detail']);
  21. self::assertEquals('Invalid data', $payload['title']);
  22. }
  23. public function provideInvalidBody(): iterable
  24. {
  25. yield [[]];
  26. yield [['oldName' => 'foo']];
  27. yield [['newName' => 'foo']];
  28. }
  29. /** @test */
  30. public function tryingToRenameInvalidTagReturnsNotFound(): void
  31. {
  32. $expectedDetail = 'Tag with name "invalid_tag" could not be found';
  33. $resp = $this->callApiWithKey(self::METHOD_PUT, '/tags', [RequestOptions::JSON => [
  34. 'oldName' => 'invalid_tag',
  35. 'newName' => 'foo',
  36. ]]);
  37. $payload = $this->getJsonResponsePayload($resp);
  38. self::assertEquals(self::STATUS_NOT_FOUND, $resp->getStatusCode());
  39. self::assertEquals(self::STATUS_NOT_FOUND, $payload['status']);
  40. self::assertEquals('TAG_NOT_FOUND', $payload['type']);
  41. self::assertEquals($expectedDetail, $payload['detail']);
  42. self::assertEquals('Tag not found', $payload['title']);
  43. }
  44. /** @test */
  45. public function errorIsThrownWhenTryingToRenameTagToAnotherTagName(): void
  46. {
  47. $expectedDetail = 'You cannot rename tag foo to bar, because it already exists';
  48. $resp = $this->callApiWithKey(self::METHOD_PUT, '/tags', [RequestOptions::JSON => [
  49. 'oldName' => 'foo',
  50. 'newName' => 'bar',
  51. ]]);
  52. $payload = $this->getJsonResponsePayload($resp);
  53. self::assertEquals(self::STATUS_CONFLICT, $resp->getStatusCode());
  54. self::assertEquals(self::STATUS_CONFLICT, $payload['status']);
  55. self::assertEquals('TAG_CONFLICT', $payload['type']);
  56. self::assertEquals($expectedDetail, $payload['detail']);
  57. self::assertEquals('Tag conflict', $payload['title']);
  58. }
  59. /** @test */
  60. public function tagIsProperlyRenamedWhenRenamingToItself(): void
  61. {
  62. $resp = $this->callApiWithKey(self::METHOD_PUT, '/tags', [RequestOptions::JSON => [
  63. 'oldName' => 'foo',
  64. 'newName' => 'foo',
  65. ]]);
  66. self::assertEquals(self::STATUS_NO_CONTENT, $resp->getStatusCode());
  67. }
  68. }