diff --git a/README.md b/README.md
index cef1868c..046667c2 100644
--- a/README.md
+++ b/README.md
@@ -102,7 +102,7 @@ All of the following code will be used exclusively for the Consumer.
Create a standard PHPUnit test case class and function.
-[Click here](/example/tests/Consumer/Service/ConsumerServiceHelloTest.php) to see the full sample file.
+[Click here](/example/json/consumer/tests/Service/ConsumerServiceHelloTest.php) to see the full sample file.
### Create Mock Request
@@ -381,7 +381,7 @@ to processing class. Aside from changing default ports, this should be transpa
Both the provider and consumer side make heavy use of lambda functions.
### Consumer Side Message Processing
-The examples provided are pretty basic. See examples\tests\MessageConsumer.
+The examples provided are pretty basic. See [example](/example/message/consumer/tests/ExampleMessageConsumerTest.php).
1. Create the content and metadata (array)
1. Annotate the MessageBuilder appropriate content and states
1. Given = Provider State
@@ -425,7 +425,7 @@ Handle these requests on your provider:
1. Return message's content in body
2. Return message's metadata in header `PACT-MESSAGE-METADATA`
-[Click here](/example/src/Provider/public/index.php) to see the full sample file.
+[Click here](/example/message/provider/public/index.php) to see the full sample file.
## Usage for the optional `pact-stub-service`
diff --git a/composer.json b/composer.json
index 373592e1..f506240c 100644
--- a/composer.json
+++ b/composer.json
@@ -42,21 +42,14 @@
"autoload-dev": {
"psr-4": {
"PhpPactTest\\": "tests/PhpPact",
- "Consumer\\": [
- "example/src/Consumer",
- "example/tests/Consumer"
- ],
- "MessageConsumer\\": [
- "example/src/MessageConsumer",
- "example/tests/MessageConsumer"
- ],
- "MessageProvider\\": [
- "example/src/MessageProvider",
- "example/tests/MessageProvider"
- ],
- "Provider\\": [
- "example/src/Provider"
- ]
+ "JsonConsumer\\": "example/json/consumer/src",
+ "JsonConsumer\\Tests\\": "example/json/consumer/tests",
+ "JsonProvider\\": "example/json/provider/src",
+ "JsonProvider\\Tests\\": "example/json/provider/tests",
+ "MessageConsumer\\": "example/message/consumer/src",
+ "MessageConsumer\\Tests\\": "example/message/consumer/tests",
+ "MessageProvider\\": "example/message/provider/src",
+ "MessageProvider\\Tests\\": "example/message/provider/tests"
}
},
"scripts": {
@@ -65,8 +58,8 @@
"lint": "php-cs-fixer fix --dry-run",
"fix": "php-cs-fixer fix",
"test": [
- "php -r \"array_map('unlink', glob('./example/output/*.json'));\"",
- "phpunit --debug -c example/phpunit.all.xml"
+ "php -r \"array_map('unlink', glob('./example/*/pacts/*.json'));\"",
+ "phpunit --debug"
]
},
"extra": {
diff --git a/example/README.md b/example/README.md
deleted file mode 100644
index ab66a43b..00000000
--- a/example/README.md
+++ /dev/null
@@ -1,24 +0,0 @@
-# Pact PHP Usage examples
-
-This folder contains some integration tests which demonstrate the functionality of `pact-php`.
-All examples could be run within tests.
-
-## Consumer Tests
-
- docker-compose up -d
- vendor/bin/phpunit -c example/phpunit.consumer.xml
- docker-compose down
-
-## Provider Verification Tests
-
- vendor/bin/phpunit -c example/phpunit.provider.xml
-
-## Consumer Tests for Message Processing
-
- vendor/bin/phpunit -c example/phpunit.message.consumer.xml
-
-## All tests together
-
- docker-compose up -d
- vendor/bin/phpunit -c example/phpunit.all.xml
- docker-compose down
diff --git a/example/json/consumer/phpunit.xml b/example/json/consumer/phpunit.xml
new file mode 100644
index 00000000..62a9eb00
--- /dev/null
+++ b/example/json/consumer/phpunit.xml
@@ -0,0 +1,11 @@
+
+
+
+
+ ./tests
+
+
+
+
+
+
diff --git a/example/src/Consumer/Service/HttpClientService.php b/example/json/consumer/src/Service/HttpClientService.php
similarity index 97%
rename from example/src/Consumer/Service/HttpClientService.php
rename to example/json/consumer/src/Service/HttpClientService.php
index 85ab9c53..93831973 100644
--- a/example/src/Consumer/Service/HttpClientService.php
+++ b/example/json/consumer/src/Service/HttpClientService.php
@@ -1,6 +1,6 @@
'Goodbye, Bob'
]);
- $config = new MockServerEnvConfig();
- $builder = new InteractionBuilder($config);
+ $config = new MockServerConfig();
+ $config
+ ->setConsumer('jsonConsumer')
+ ->setProvider('jsonProvider')
+ ->setPactDir(__DIR__.'/../../../pacts');
+ if ($logLevel = \getenv('PACT_LOGLEVEL')) {
+ $config->setLogLevel($logLevel);
+ }
+ $builder = new InteractionBuilder($config);
$builder
->given('Get Goodbye')
->uponReceiving('A get request to /goodbye/{name}')
diff --git a/example/tests/Consumer/Service/ConsumerServiceHelloTest.php b/example/json/consumer/tests/Service/ConsumerServiceHelloTest.php
similarity index 81%
rename from example/tests/Consumer/Service/ConsumerServiceHelloTest.php
rename to example/json/consumer/tests/Service/ConsumerServiceHelloTest.php
index d10782ff..605a3fb6 100644
--- a/example/tests/Consumer/Service/ConsumerServiceHelloTest.php
+++ b/example/json/consumer/tests/Service/ConsumerServiceHelloTest.php
@@ -1,12 +1,13 @@
setConsumer('jsonConsumer')
+ ->setProvider('jsonProvider')
+ ->setPactDir(__DIR__.'/../../../pacts');
+ if ($logLevel = \getenv('PACT_LOGLEVEL')) {
+ $config->setLogLevel($logLevel);
+ }
$builder = new InteractionBuilder($config);
$builder
->uponReceiving('A get request to /hello/{name}')
diff --git a/example/pacts/someconsumer-someprovider.json b/example/json/pacts/jsonConsumer-jsonProvider.json
similarity index 91%
rename from example/pacts/someconsumer-someprovider.json
rename to example/json/pacts/jsonConsumer-jsonProvider.json
index 2d917286..709eefa4 100644
--- a/example/pacts/someconsumer-someprovider.json
+++ b/example/json/pacts/jsonConsumer-jsonProvider.json
@@ -1,6 +1,6 @@
{
"consumer": {
- "name": "someConsumer"
+ "name": "jsonConsumer"
},
"interactions": [
{
@@ -63,15 +63,15 @@
],
"metadata": {
"pactRust": {
- "ffi": "0.4.4",
- "mockserver": "1.0.3",
- "models": "1.0.13"
+ "ffi": "0.4.7",
+ "mockserver": "1.2.3",
+ "models": "1.1.9"
},
"pactSpecification": {
"version": "3.0.0"
}
},
"provider": {
- "name": "someProvider"
+ "name": "jsonProvider"
}
}
\ No newline at end of file
diff --git a/example/json/provider/phpunit.xml b/example/json/provider/phpunit.xml
new file mode 100644
index 00000000..62a9eb00
--- /dev/null
+++ b/example/json/provider/phpunit.xml
@@ -0,0 +1,11 @@
+
+
+
+
+ ./tests
+
+
+
+
+
+
diff --git a/example/src/Provider/public/index.php b/example/json/provider/public/index.php
similarity index 66%
rename from example/src/Provider/public/index.php
rename to example/json/provider/public/index.php
index 48e8a188..d4c57891 100644
--- a/example/src/Provider/public/index.php
+++ b/example/json/provider/public/index.php
@@ -1,6 +1,6 @@
withHeader('Content-Type', 'application/json');
});
-$app->post('/pact-messages', function (Request $request, Response $response) use ($provider) {
- $body = $request->getParsedBody();
- $message = $provider->dispatchMessage($body['description'], $body['providerStates']);
- if ($message) {
- $response->getBody()->write(\json_encode($message->getContents()));
-
- return $response
- ->withHeader('Content-Type', 'application/json')
- ->withHeader('Pact-Message-Metadata', \base64_encode(\json_encode($message->getMetadata())));
- }
-
- return $response;
-});
-
$app->post('/pact-change-state', function (Request $request, Response $response) use ($provider) {
$body = $request->getParsedBody();
$provider->changeSate($body['action'], $body['state'], $body['params']);
diff --git a/example/json/provider/src/ExampleProvider.php b/example/json/provider/src/ExampleProvider.php
new file mode 100644
index 00000000..70daec33
--- /dev/null
+++ b/example/json/provider/src/ExampleProvider.php
@@ -0,0 +1,27 @@
+currentState = [
+ 'action' => $action,
+ 'state' => $state,
+ 'params' => $params,
+ ];
+ }
+}
diff --git a/example/json/provider/tests/PactVerifyTest.php b/example/json/provider/tests/PactVerifyTest.php
new file mode 100644
index 00000000..73dd84c9
--- /dev/null
+++ b/example/json/provider/tests/PactVerifyTest.php
@@ -0,0 +1,68 @@
+process = new Process(['php', '-S', '127.0.0.1:7202', '-t', $publicPath]);
+
+ $this->process->start();
+ $this->process->waitUntil(function (): bool {
+ $fp = @fsockopen('127.0.0.1', 7202);
+ $isOpen = is_resource($fp);
+ if ($isOpen) {
+ fclose($fp);
+ }
+
+ return $isOpen;
+ });
+ }
+
+ /**
+ * Stop the web server process once complete.
+ */
+ protected function tearDown(): void
+ {
+ $this->process->stop();
+ }
+
+ /**
+ * This test will run after the web server is started.
+ */
+ public function testPactVerifyConsumer()
+ {
+ $config = new VerifierConfig();
+ $config->getProviderInfo()
+ ->setName('jsonProvider') // Providers name to fetch.
+ ->setHost('localhost')
+ ->setPort(7202);
+ $config->getProviderState()
+ ->setStateChangeUrl(new Uri('http://localhost:7202/pact-change-state'))
+ ;
+ if ($level = \getenv('PACT_LOGLEVEL')) {
+ $config->setLogLevel($level);
+ }
+
+ $verifier = new Verifier($config);
+ $verifier->addFile(__DIR__ . '/../../pacts/jsonConsumer-jsonProvider.json');
+
+ $verifyResult = $verifier->verify();
+
+ $this->assertTrue($verifyResult);
+ }
+}
diff --git a/example/message/consumer/phpunit.xml b/example/message/consumer/phpunit.xml
new file mode 100644
index 00000000..62a9eb00
--- /dev/null
+++ b/example/message/consumer/phpunit.xml
@@ -0,0 +1,11 @@
+
+
+
+
+ ./tests
+
+
+
+
+
+
diff --git a/example/src/MessageConsumer/ExampleMessageConsumer.php b/example/message/consumer/src/ExampleMessageConsumer.php
similarity index 100%
rename from example/src/MessageConsumer/ExampleMessageConsumer.php
rename to example/message/consumer/src/ExampleMessageConsumer.php
diff --git a/example/src/MessageConsumer/receive.php b/example/message/consumer/src/receive.php
similarity index 93%
rename from example/src/MessageConsumer/receive.php
rename to example/message/consumer/src/receive.php
index 66c12a5c..48996111 100644
--- a/example/src/MessageConsumer/receive.php
+++ b/example/message/consumer/src/receive.php
@@ -1,6 +1,6 @@
setConsumer('test_consumer')
- ->setProvider('test_provider')
- ->setPactDir(__DIR__ . '/../../output/');
+ ->setConsumer('messageConsumer')
+ ->setProvider('messageProvider')
+ ->setPactDir(__DIR__.'/../../pacts');
+ if ($logLevel = \getenv('PACT_LOGLEVEL')) {
+ self::$config->setLogLevel($logLevel);
+ }
}
/**
@@ -36,7 +37,7 @@ public function testProcessText()
$contents = new stdClass();
$contents->text = 'Hello Mary';
- $metadata = ['queue'=>'wind cries', 'routing_key'=>'wind cries'];
+ $metadata = ['queue' => 'wind cries', 'routing_key' => 'wind cries'];
$builder
->given('a message', ['foo' => 'bar'])
@@ -64,7 +65,7 @@ public function testProcessSong()
$contents = new stdClass();
$contents->song = 'And the wind whispers Mary';
- $metadata = ['queue'=>'And the clowns have all gone to bed', 'routing_key'=>'And the clowns have all gone to bed'];
+ $metadata = ['queue' => 'And the clowns have all gone to bed', 'routing_key' => 'And the clowns have all gone to bed'];
$builder
->given('You can hear happiness staggering on down the street')
diff --git a/example/pacts/test_consumer-test_provider.json b/example/message/pacts/messageConsumer-messageProvider.json
similarity index 90%
rename from example/pacts/test_consumer-test_provider.json
rename to example/message/pacts/messageConsumer-messageProvider.json
index 13f684cd..95669646 100644
--- a/example/pacts/test_consumer-test_provider.json
+++ b/example/message/pacts/messageConsumer-messageProvider.json
@@ -1,6 +1,6 @@
{
"consumer": {
- "name": "test_consumer"
+ "name": "messageConsumer"
},
"messages": [
{
@@ -41,14 +41,14 @@
],
"metadata": {
"pactRust": {
- "ffi": "0.4.4",
- "models": "1.0.13"
+ "ffi": "0.4.7",
+ "models": "1.1.9"
},
"pactSpecification": {
"version": "3.0.0"
}
},
"provider": {
- "name": "test_provider"
+ "name": "messageProvider"
}
}
\ No newline at end of file
diff --git a/example/message/provider/phpunit.xml b/example/message/provider/phpunit.xml
new file mode 100644
index 00000000..62a9eb00
--- /dev/null
+++ b/example/message/provider/phpunit.xml
@@ -0,0 +1,11 @@
+
+
+
+
+ ./tests
+
+
+
+
+
+
diff --git a/example/message/provider/public/index.php b/example/message/provider/public/index.php
new file mode 100644
index 00000000..9f4ae661
--- /dev/null
+++ b/example/message/provider/public/index.php
@@ -0,0 +1,36 @@
+addBodyParsingMiddleware();
+
+$provider = new ExampleProvider();
+
+$app->post('/pact-messages', function (Request $request, Response $response) use ($provider) {
+ $body = $request->getParsedBody();
+ $message = $provider->dispatchMessage($body['description'], $body['providerStates']);
+ if ($message) {
+ $response->getBody()->write(\json_encode($message->getContents()));
+
+ return $response
+ ->withHeader('Content-Type', 'application/json')
+ ->withHeader('Pact-Message-Metadata', \base64_encode(\json_encode($message->getMetadata())));
+ }
+
+ return $response;
+});
+
+$app->post('/pact-change-state', function (Request $request, Response $response) use ($provider) {
+ $body = $request->getParsedBody();
+ $provider->changeSate($body['action'], $body['state'], $body['params']);
+
+ return $response;
+});
+
+$app->run();
diff --git a/example/src/MessageProvider/ExampleMessageProvider.php b/example/message/provider/src/ExampleMessageProvider.php
similarity index 100%
rename from example/src/MessageProvider/ExampleMessageProvider.php
rename to example/message/provider/src/ExampleMessageProvider.php
diff --git a/example/src/Provider/ExampleProvider.php b/example/message/provider/src/ExampleProvider.php
similarity index 87%
rename from example/src/Provider/ExampleProvider.php
rename to example/message/provider/src/ExampleProvider.php
index c7fddb72..2def3fa5 100644
--- a/example/src/Provider/ExampleProvider.php
+++ b/example/message/provider/src/ExampleProvider.php
@@ -1,6 +1,6 @@
messages[$description])) {
diff --git a/example/src/MessageProvider/send.php b/example/message/provider/src/send.php
similarity index 94%
rename from example/src/MessageProvider/send.php
rename to example/message/provider/src/send.php
index e1dbb74d..125db85e 100644
--- a/example/src/MessageProvider/send.php
+++ b/example/message/provider/src/send.php
@@ -9,7 +9,7 @@
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
// build the message with appropriate metadata
-$providerMessage = new \MessageProvider\ExampleMessageProvider(['queue'=>'myKey', 'routing_key'=>'myKey']);
+$providerMessage = new \MessageProvider\ExampleMessageProvider(['queue' => 'myKey', 'routing_key' => 'myKey']);
$content = new \stdClass();
$content->text = 'Hello Mary';
$providerMessage->setContents($content);
diff --git a/example/tests/Provider/PactVerifyTest.php b/example/message/provider/tests/PactVerifyTest.php
similarity index 75%
rename from example/tests/Provider/PactVerifyTest.php
rename to example/message/provider/tests/PactVerifyTest.php
index e36e0b75..f0c459a1 100644
--- a/example/tests/Provider/PactVerifyTest.php
+++ b/example/message/provider/tests/PactVerifyTest.php
@@ -1,6 +1,6 @@
process = new Process(['php', '-S', '127.0.0.1:7202', '-t', $publicPath]);
@@ -54,7 +49,7 @@ public function testPactVerifyConsumer()
{
$config = new VerifierConfig();
$config->getProviderInfo()
- ->setName('someProvider') // Providers name to fetch.
+ ->setName('messageProvider') // Providers name to fetch.
->setHost('localhost')
->setPort(7202);
$config->getProviderState()
@@ -71,10 +66,8 @@ public function testPactVerifyConsumer()
$config->setLogLevel($level);
}
- // Verify that the Consumer 'someConsumer' that is tagged with 'master' is valid.
$verifier = new Verifier($config);
- $verifier->addFile(__DIR__ . '/../../pacts/someconsumer-someprovider.json');
- $verifier->addFile(__DIR__ . '/../../pacts/test_consumer-test_provider.json');
+ $verifier->addFile(__DIR__ . '/../../pacts/messageConsumer-messageProvider.json');
$verifyResult = $verifier->verify();
diff --git a/example/pacts/README.md b/example/pacts/README.md
deleted file mode 100644
index 0d5d2a0b..00000000
--- a/example/pacts/README.md
+++ /dev/null
@@ -1,11 +0,0 @@
-# Example Pacts
-
-The json files in this folder are explicitly here for an easy-to-read output of the test examples. These are *not* the actual test results from running all these tests of this project. By default, the pact files of this project's examples are written to example/output. The tests themselves need to generate the appropropriate files as part of the tests.
-
-To run the tests locally, try `composer test`
-
-
-
-
-
-
diff --git a/example/phpunit.all.xml b/example/phpunit.all.xml
deleted file mode 100644
index d3f50c70..00000000
--- a/example/phpunit.all.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
- ../tests
-
-
- ./tests/Consumer
-
-
- ./tests/Provider
-
-
- ./tests/MessageConsumer
-
-
-
-
-
-
-
-
diff --git a/example/phpunit.consumer.xml b/example/phpunit.consumer.xml
deleted file mode 100644
index 6236e64d..00000000
--- a/example/phpunit.consumer.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
- ./tests/Consumer
-
-
-
-
-
-
-
-
diff --git a/example/phpunit.core.xml b/example/phpunit.core.xml
deleted file mode 100644
index 6cc7fc8b..00000000
--- a/example/phpunit.core.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
- ../tests
-
-
-
-
-
-
-
-
diff --git a/example/phpunit.message.consumer.xml b/example/phpunit.message.consumer.xml
deleted file mode 100644
index 7170d67e..00000000
--- a/example/phpunit.message.consumer.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
- ./tests/MessageConsumer
-
-
-
diff --git a/example/phpunit.provider.xml b/example/phpunit.provider.xml
deleted file mode 100644
index 8f143865..00000000
--- a/example/phpunit.provider.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
- ./tests/Provider
-
-
-
diff --git a/phpunit.xml b/phpunit.xml
index 0a7db8ac..ff6fe126 100644
--- a/phpunit.xml
+++ b/phpunit.xml
@@ -10,8 +10,20 @@
-
- ./tests/PhpPact
+
+ ./tests
+
+
+ ./example/json/consumer/tests
+
+
+ ./example/json/provider/tests
+
+
+ ./example/message/consumer/tests
+
+
+ ./example/message/provider/tests
diff --git a/src/PhpPact/FFI/Model/ArrayData.php b/src/PhpPact/FFI/Model/ArrayData.php
index cec3fb75..8945b2d1 100644
--- a/src/PhpPact/FFI/Model/ArrayData.php
+++ b/src/PhpPact/FFI/Model/ArrayData.php
@@ -54,7 +54,7 @@ public static function createFrom(array $values): ?self
public function __destruct()
{
- for ($i=0; $i < $this->size; $i++) {
+ for ($i = 0; $i < $this->size; $i++) {
FFI::free($this->items[$i]); // @phpstan-ignore-line
}
}