Skip to content

Commit

Permalink
Merge pull request #50 from tienvx/allow-empty-provider-states
Browse files Browse the repository at this point in the history
chore: Allow empty provider states
  • Loading branch information
tienvx authored Mar 30, 2024
2 parents 0806fe1 + 17f4fc5 commit 0922d54
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 8 deletions.
4 changes: 2 additions & 2 deletions src/Controller/MessagesController.php
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,8 @@ public function handle(Request $request): ?Response
private function getProviderStates(Request $request): array
{
$providerStates = $request->toArray()['providerStates'] ?? [];
if (!is_array($providerStates) || empty($providerStates)) {
throw new BadRequestException("'providerStates' is missing or invalid in messages request.");
if (!is_array($providerStates)) {
throw new BadRequestException("'providerStates' is invalid in messages request.");
}

return array_map(function (array $providerState): ProviderState {
Expand Down
22 changes: 16 additions & 6 deletions tests/Application/Controller/MessagesControllerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

namespace Tienvx\Bundle\PactProviderBundle\Tests\Application\Controller;

use PHPUnit\Framework\Attributes\TestWith;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;

class MessagesControllerTest extends WebTestCase
Expand All @@ -29,17 +28,28 @@ public function testRequestBodyIsEmpty(): void
$this->assertStringContainsString('Request body is empty.', $client->getResponse()->getContent());
}

#[TestWith([null])]
#[TestWith([[]])]
public function testMissingOrInvalidProviderStates(mixed $value): void
public function testInvalidProviderStates(): void
{
$client = static::createClient();
$client->request('POST', '/test-pact-messages', [], [], [], json_encode([
'description' => 'has message',
'providerStates' => $value,
'providerStates' => 123,
]));
$this->assertResponseStatusCodeSame(400);
$this->assertStringContainsString("'providerStates' is missing or invalid in messages request.", $client->getResponse()->getContent());
$this->assertStringContainsString("'providerStates' is invalid in messages request.", $client->getResponse()->getContent());
}

public function testEmptyProviderStates(): void
{
$client = static::createClient();
$client->request('POST', '/test-pact-messages', [], [], [], json_encode([
'description' => 'has message',
'providerStates' => [],
]));
$this->assertResponseStatusCodeSame(200);
$this->assertResponseHeaderSame('Content-Type', 'text/plain; charset=UTF-8');
$this->assertResponseHeaderSame('Pact-Message-Metadata', 'eyJrZXkiOiJ2YWx1ZSIsImNvbnRlbnRUeXBlIjoidGV4dFwvcGxhaW4ifQ==');
$this->assertStringContainsString('message content', $client->getResponse()->getContent());
}

public function testMissingProviderStateName(): void
Expand Down

0 comments on commit 0922d54

Please sign in to comment.