diff --git a/helper/FFI/ClientTrait.php b/helper/FFI/ClientTrait.php index 8776052e..ebdf5e8b 100644 --- a/helper/FFI/ClientTrait.php +++ b/helper/FFI/ClientTrait.php @@ -196,4 +196,60 @@ protected function expectsUponReceiving(int $interaction, string $description, b $this->expectExceptionMessage("The interaction or Pact can't be modified (i.e. the mock server for it has already started)"); } } + + protected function expectsMessageExpectsToReceive(int $message, string $description): void + { + $this->client + ->expects($this->once()) + ->method('messageExpectsToReceive') + ->with($message, $description); + } + + /** + * @param array $metadata + */ + protected function expectsMessageWithMetadataV2(int $message, array $metadata): void + { + $calls = []; + foreach ($metadata as $key => $value) { + $calls[] = [$message, $key, $value]; + } + $this->client + ->expects($this->exactly(count($calls))) + ->method('messageWithMetadataV2') + ->willReturnCallback(function (...$args) use (&$calls) { + $call = array_shift($calls); + foreach ($args as $key => $arg) { + $this->assertThat($arg, $call[$key] instanceof Constraint ? $call[$key] : new IsIdentical($call[$key])); + } + }); + } + + protected function expectsMessageGiven(int $message, string $name): void + { + $this->client + ->expects($this->once()) + ->method('messageGiven') + ->with($message, $name); + } + + /** + * @param array $params + */ + protected function expectsMessageGivenWithParam(int $message, string $name, array $params): void + { + $calls = []; + foreach ($params as $key => $value) { + $calls[] = [$message, $name, $key, $value]; + } + $this->client + ->expects($this->exactly(count($calls))) + ->method('messageGivenWithParam') + ->willReturnCallback(function (...$args) use (&$calls) { + $call = array_shift($calls); + foreach ($args as $key => $arg) { + $this->assertThat($arg, $call[$key] instanceof Constraint ? $call[$key] : new IsIdentical($call[$key])); + } + }); + } } diff --git a/src/PhpPact/Consumer/Driver/Interaction/AbstractMessageDriver.php b/src/PhpPact/Consumer/Driver/Interaction/AbstractMessageDriver.php index ea9d9d5d..9a25d911 100644 --- a/src/PhpPact/Consumer/Driver/Interaction/AbstractMessageDriver.php +++ b/src/PhpPact/Consumer/Driver/Interaction/AbstractMessageDriver.php @@ -53,15 +53,15 @@ private function withContents(Message $message): void private function expectsToReceive(Message $message): void { - $this->client->call('pactffi_message_expects_to_receive', $message->getHandle(), $message->getDescription()); + $this->client->messageExpectsToReceive($message->getHandle(), $message->getDescription()); } protected function given(Message $message): void { foreach ($message->getProviderStates() as $providerState) { - $this->client->call('pactffi_message_given', $message->getHandle(), $providerState->getName()); + $this->client->messageGiven($message->getHandle(), $providerState->getName()); foreach ($providerState->getParams() as $key => $value) { - $this->client->call('pactffi_message_given_with_param', $message->getHandle(), $providerState->getName(), (string) $key, (string) $value); + $this->client->messageGivenWithParam($message->getHandle(), $providerState->getName(), (string) $key, (string) $value); } } } @@ -69,7 +69,7 @@ protected function given(Message $message): void private function withMetadata(Message $message): void { foreach ($message->getMetadata() as $key => $value) { - $this->client->call('pactffi_message_with_metadata_v2', $message->getHandle(), (string) $key, (string) $value); + $this->client->messageWithMetadataV2($message->getHandle(), (string) $key, (string) $value); } } } diff --git a/src/PhpPact/FFI/Client.php b/src/PhpPact/FFI/Client.php index 86b6723b..d8cee134 100644 --- a/src/PhpPact/FFI/Client.php +++ b/src/PhpPact/FFI/Client.php @@ -161,6 +161,30 @@ public function uponReceiving(int $interaction, string $description): bool return $result; } + public function messageExpectsToReceive(int $message, string $description): void + { + $method = 'pactffi_message_expects_to_receive'; + $this->call($method, $message, $description); + } + + public function messageWithMetadataV2(int $message, string $key, string $value): void + { + $method = 'pactffi_message_with_metadata_v2'; + $this->call($method, $message, $key, $value); + } + + public function messageGiven(int $message, string $name): void + { + $method = 'pactffi_message_given'; + $this->call($method, $message, $name); + } + + public function messageGivenWithParam(int $message, string $name, string $key, string $value): void + { + $method = 'pactffi_message_given_with_param'; + $this->call($method, $message, $name, $key, $value); + } + public function getInteractionPartRequest(): int { return $this->getEnum('InteractionPart_Request'); diff --git a/src/PhpPact/FFI/ClientInterface.php b/src/PhpPact/FFI/ClientInterface.php index bf200af1..f860ffb0 100644 --- a/src/PhpPact/FFI/ClientInterface.php +++ b/src/PhpPact/FFI/ClientInterface.php @@ -33,6 +33,14 @@ public function givenWithParam(int $interaction, string $name, string $key, stri public function uponReceiving(int $interaction, string $description): bool; + public function messageExpectsToReceive(int $message, string $description): void; + + public function messageWithMetadataV2(int $message, string $key, string $value): void; + + public function messageGiven(int $message, string $name): void; + + public function messageGivenWithParam(int $message, string $name, string $key, string $value): void; + public function getInteractionPartRequest(): int; public function getInteractionPartResponse(): int; diff --git a/tests/PhpPact/Consumer/Driver/Interaction/MessageDriverTest.php b/tests/PhpPact/Consumer/Driver/Interaction/MessageDriverTest.php index 704a7841..9e41ef77 100644 --- a/tests/PhpPact/Consumer/Driver/Interaction/MessageDriverTest.php +++ b/tests/PhpPact/Consumer/Driver/Interaction/MessageDriverTest.php @@ -93,15 +93,13 @@ public function testRegisterInteraction(): void ->method('registerBody') ->with($this->message); $this->expectsNewMessageInteraction($this->pactHandle, $this->description, $this->messageHandle); - $calls = [ - ['pactffi_message_given', $this->messageHandle, 'item exist', null], - ['pactffi_message_given_with_param', $this->messageHandle, 'item exist', 'id', '12', null], - ['pactffi_message_given_with_param', $this->messageHandle, 'item exist', 'name', 'abc', null], - ['pactffi_message_expects_to_receive', $this->messageHandle, $this->description, null], - ['pactffi_message_with_metadata_v2', $this->messageHandle, 'key1', 'value1', null], - ['pactffi_message_with_metadata_v2', $this->messageHandle, 'key2', 'value2', null], - ]; - $this->assertClientCalls($calls); + $this->expectsMessageGiven($this->messageHandle, 'item exist'); + $this->expectsMessageGivenWithParam($this->messageHandle, 'item exist', [ + 'id' => '12', + 'name' => 'abc', + ]); + $this->expectsMessageExpectsToReceive($this->messageHandle, $this->description); + $this->expectsMessageWithMetadataV2($this->messageHandle, $this->metadata); $this->driver->registerMessage($this->message); $this->assertSame($this->messageHandle, $this->message->getHandle()); } @@ -118,16 +116,14 @@ public function testSetKey(?string $key, bool $success): void ->method('getPact') ->willReturn(new Pact($this->pactHandle)); $this->expectsNewMessageInteraction($this->pactHandle, $this->description, $this->messageHandle); - $calls = [ - ['pactffi_message_given', $this->messageHandle, 'item exist', null], - ['pactffi_message_given_with_param', $this->messageHandle, 'item exist', 'id', '12', null], - ['pactffi_message_given_with_param', $this->messageHandle, 'item exist', 'name', 'abc', null], - ['pactffi_message_expects_to_receive', $this->messageHandle, $this->description, null], - ['pactffi_message_with_metadata_v2', $this->messageHandle, 'key1', 'value1', null], - ['pactffi_message_with_metadata_v2', $this->messageHandle, 'key2', 'value2', null], - ]; + $this->expectsMessageGiven($this->messageHandle, 'item exist'); + $this->expectsMessageGivenWithParam($this->messageHandle, 'item exist', [ + 'id' => '12', + 'name' => 'abc', + ]); + $this->expectsMessageExpectsToReceive($this->messageHandle, $this->description); + $this->expectsMessageWithMetadataV2($this->messageHandle, $this->metadata); $this->expectsSetInteractionKey($this->messageHandle, $this->description, $key, $success); - $this->assertClientCalls($calls); $this->driver->registerMessage($this->message); } @@ -145,16 +141,14 @@ public function testSetPending(?bool $pending, bool $success): void ->method('getPact') ->willReturn(new Pact($this->pactHandle)); $this->expectsNewMessageInteraction($this->pactHandle, $this->description, $this->messageHandle); - $calls = [ - ['pactffi_message_given', $this->messageHandle, 'item exist', null], - ['pactffi_message_given_with_param', $this->messageHandle, 'item exist', 'id', '12', null], - ['pactffi_message_given_with_param', $this->messageHandle, 'item exist', 'name', 'abc', null], - ['pactffi_message_expects_to_receive', $this->messageHandle, $this->description, null], - ['pactffi_message_with_metadata_v2', $this->messageHandle, 'key1', 'value1', null], - ['pactffi_message_with_metadata_v2', $this->messageHandle, 'key2', 'value2', null], - ]; + $this->expectsMessageGiven($this->messageHandle, 'item exist'); + $this->expectsMessageGivenWithParam($this->messageHandle, 'item exist', [ + 'id' => '12', + 'name' => 'abc', + ]); + $this->expectsMessageExpectsToReceive($this->messageHandle, $this->description); + $this->expectsMessageWithMetadataV2($this->messageHandle, $this->metadata); $this->expectsSetInteractionPending($this->messageHandle, $this->description, $pending, $success); - $this->assertClientCalls($calls); $this->driver->registerMessage($this->message); } @@ -176,16 +170,14 @@ public function testSetComments(array $comments, bool $success): void ->method('getPact') ->willReturn(new Pact($this->pactHandle)); $this->expectsNewMessageInteraction($this->pactHandle, $this->description, $this->messageHandle); - $calls = [ - ['pactffi_message_given', $this->messageHandle, 'item exist', null], - ['pactffi_message_given_with_param', $this->messageHandle, 'item exist', 'id', '12', null], - ['pactffi_message_given_with_param', $this->messageHandle, 'item exist', 'name', 'abc', null], - ['pactffi_message_expects_to_receive', $this->messageHandle, $this->description, null], - ['pactffi_message_with_metadata_v2', $this->messageHandle, 'key1', 'value1', null], - ['pactffi_message_with_metadata_v2', $this->messageHandle, 'key2', 'value2', null], - ]; + $this->expectsMessageGiven($this->messageHandle, 'item exist'); + $this->expectsMessageGivenWithParam($this->messageHandle, 'item exist', [ + 'id' => '12', + 'name' => 'abc', + ]); + $this->expectsMessageExpectsToReceive($this->messageHandle, $this->description); + $this->expectsMessageWithMetadataV2($this->messageHandle, $this->metadata); $this->expectsSetComments($this->messageHandle, $this->description, $comments, $success); - $this->assertClientCalls($calls); $this->driver->registerMessage($this->message); } @@ -204,16 +196,14 @@ public function testAddTextComment(array $comments, bool $success): void ->method('getPact') ->willReturn(new Pact($this->pactHandle)); $this->expectsNewMessageInteraction($this->pactHandle, $this->description, $this->messageHandle); - $calls = [ - ['pactffi_message_given', $this->messageHandle, 'item exist', null], - ['pactffi_message_given_with_param', $this->messageHandle, 'item exist', 'id', '12', null], - ['pactffi_message_given_with_param', $this->messageHandle, 'item exist', 'name', 'abc', null], - ['pactffi_message_expects_to_receive', $this->messageHandle, $this->description, null], - ['pactffi_message_with_metadata_v2', $this->messageHandle, 'key1', 'value1', null], - ['pactffi_message_with_metadata_v2', $this->messageHandle, 'key2', 'value2', null], - ]; + $this->expectsMessageGiven($this->messageHandle, 'item exist'); + $this->expectsMessageGivenWithParam($this->messageHandle, 'item exist', [ + 'id' => '12', + 'name' => 'abc', + ]); + $this->expectsMessageExpectsToReceive($this->messageHandle, $this->description); + $this->expectsMessageWithMetadataV2($this->messageHandle, $this->metadata); $this->expectsAddTextComments($this->messageHandle, $this->description, $comments, $success); - $this->assertClientCalls($calls); $this->driver->registerMessage($this->message); } } diff --git a/tests/PhpPact/FFI/ClientTest.php b/tests/PhpPact/FFI/ClientTest.php index 49abc4a2..966f1033 100644 --- a/tests/PhpPact/FFI/ClientTest.php +++ b/tests/PhpPact/FFI/ClientTest.php @@ -96,6 +96,30 @@ public function testUponReceiving(): void $this->assertFalse($result); } + public function testMessageExpectsToReceive(): void + { + $this->client->messageExpectsToReceive(1, 'test'); + $this->expectNotToPerformAssertions(); + } + + public function testMessageWithMetadataV2(): void + { + $this->client->messageWithMetadataV2(1, 'key', 'value'); + $this->expectNotToPerformAssertions(); + } + + public function testMessageGiven(): void + { + $this->client->messageGiven(1, 'test'); + $this->expectNotToPerformAssertions(); + } + + public function testMessageGivenWithParam(): void + { + $this->client->messageGivenWithParam(1, 'test', 'key', 'value'); + $this->expectNotToPerformAssertions(); + } + public function testGetInteractionPartRequest(): void { $this->assertSame(0, $this->client->getInteractionPartRequest()); diff --git a/tests/PhpPact/SyncMessage/Driver/Interaction/SyncMessageDriverTest.php b/tests/PhpPact/SyncMessage/Driver/Interaction/SyncMessageDriverTest.php index ed9a70c5..b054758f 100644 --- a/tests/PhpPact/SyncMessage/Driver/Interaction/SyncMessageDriverTest.php +++ b/tests/PhpPact/SyncMessage/Driver/Interaction/SyncMessageDriverTest.php @@ -97,12 +97,8 @@ public function testRegisterInteraction(): void 'id' => '12', 'name' => 'abc', ], true); - $calls = [ - ['pactffi_message_expects_to_receive', $this->messageHandle, $this->description, null], - ['pactffi_message_with_metadata_v2', $this->messageHandle, 'key1', 'value1', null], - ['pactffi_message_with_metadata_v2', $this->messageHandle, 'key2', 'value2', null], - ]; - $this->assertClientCalls($calls); + $this->expectsMessageExpectsToReceive($this->messageHandle, $this->description); + $this->expectsMessageWithMetadataV2($this->messageHandle, $this->metadata); $this->driver->registerMessage($this->message); $this->assertSame($this->messageHandle, $this->message->getHandle()); } @@ -124,13 +120,9 @@ public function testSetKey(?string $key, bool $success): void 'id' => '12', 'name' => 'abc', ], true); - $calls = [ - ['pactffi_message_expects_to_receive', $this->messageHandle, $this->description, null], - ['pactffi_message_with_metadata_v2', $this->messageHandle, 'key1', 'value1', null], - ['pactffi_message_with_metadata_v2', $this->messageHandle, 'key2', 'value2', null], - ]; + $this->expectsMessageExpectsToReceive($this->messageHandle, $this->description); + $this->expectsMessageWithMetadataV2($this->messageHandle, $this->metadata); $this->expectsSetInteractionKey($this->messageHandle, $this->description, $key, $success); - $this->assertClientCalls($calls); $this->driver->registerMessage($this->message); } @@ -153,13 +145,9 @@ public function testSetPending(?bool $pending, bool $success): void 'id' => '12', 'name' => 'abc', ], true); - $calls = [ - ['pactffi_message_expects_to_receive', $this->messageHandle, $this->description, null], - ['pactffi_message_with_metadata_v2', $this->messageHandle, 'key1', 'value1', null], - ['pactffi_message_with_metadata_v2', $this->messageHandle, 'key2', 'value2', null], - ]; + $this->expectsMessageExpectsToReceive($this->messageHandle, $this->description); + $this->expectsMessageWithMetadataV2($this->messageHandle, $this->metadata); $this->expectsSetInteractionPending($this->messageHandle, $this->description, $pending, $success); - $this->assertClientCalls($calls); $this->driver->registerMessage($this->message); } @@ -186,13 +174,9 @@ public function testSetComments(array $comments, bool $success): void 'id' => '12', 'name' => 'abc', ], true); - $calls = [ - ['pactffi_message_expects_to_receive', $this->messageHandle, $this->description, null], - ['pactffi_message_with_metadata_v2', $this->messageHandle, 'key1', 'value1', null], - ['pactffi_message_with_metadata_v2', $this->messageHandle, 'key2', 'value2', null], - ]; + $this->expectsMessageExpectsToReceive($this->messageHandle, $this->description); + $this->expectsMessageWithMetadataV2($this->messageHandle, $this->metadata); $this->expectsSetComments($this->messageHandle, $this->description, $comments, $success); - $this->assertClientCalls($calls); $this->driver->registerMessage($this->message); } @@ -216,13 +200,9 @@ public function testAddTextComment(array $comments, bool $success): void 'id' => '12', 'name' => 'abc', ], true); - $calls = [ - ['pactffi_message_expects_to_receive', $this->messageHandle, $this->description, null], - ['pactffi_message_with_metadata_v2', $this->messageHandle, 'key1', 'value1', null], - ['pactffi_message_with_metadata_v2', $this->messageHandle, 'key2', 'value2', null], - ]; + $this->expectsMessageExpectsToReceive($this->messageHandle, $this->description); + $this->expectsMessageWithMetadataV2($this->messageHandle, $this->metadata); $this->expectsAddTextComments($this->messageHandle, $this->description, $comments, $success); - $this->assertClientCalls($calls); $this->driver->registerMessage($this->message); }