Skip to content

Commit dfaf4e5

Browse files
authored
Merge pull request #735 from tienvx/test-provider-state-generator-protobuf
test: Test provider state generator for protobuf
2 parents 08e5c4f + 13d0843 commit dfaf4e5

8 files changed

Lines changed: 75 additions & 7 deletions

File tree

example/protobuf-sync-message/consumer/tests/ProtobufClientTest.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public function testCalculateArea(): void
3131
$builder = new SyncMessageBuilder($config, new ProtobufSyncMessageDriverFactory());
3232
$builder
3333
->expectsToReceive('request for calculate shape area')
34+
->given('a shape')
3435
->withMetadata([])
3536
->withContent(new Text(
3637
json_encode([
@@ -40,6 +41,7 @@ public function testCalculateArea(): void
4041

4142
'request' => [
4243
'created' => $matcher->fromProviderState($matcher->date(), '${created}'),
44+
'id' => $matcher->fromProviderState($matcher->uuid(), '${id}'),
4345
'rectangle' => [
4446
'length' => $matcher->number(3),
4547
'width' => $matcher->number(4),
@@ -57,6 +59,7 @@ public function testCalculateArea(): void
5759
$rectangle = (new Rectangle())->setLength(3)->setWidth(4);
5860
$message = new ShapeMessage();
5961
$message->setCreated('2001-06-23');
62+
$message->setId('eb87e331-81d6-43c2-b8e8-0574f8c30ab3');
6063
$message->setRectangle($rectangle);
6164
$response = $service->calculate($message);
6265

example/protobuf-sync-message/library/proto/area_calculator.proto

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ message ShapeMessage {
1515
Parallelogram parallelogram = 5;
1616
}
1717
string created = 6;
18+
string id = 7;
1819
}
1920

2021
message Square {

example/protobuf-sync-message/library/src/Plugins/ShapeMessage.php

Lines changed: 27 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

example/protobuf-sync-message/pacts/protobufSyncMessageConsumer-protobufSyncMessageProvider.json

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,31 @@
1212
"pending": false,
1313
"pluginConfiguration": {
1414
"protobuf": {
15-
"descriptorKey": "a5c44dacffef6eb096b88a6e0245cbd4",
15+
"descriptorKey": "196d0b5be51f754cf2761bdb052e8ce6",
16+
"expectations": {
17+
"request": {
18+
"created": "matching(date, 'yyyy-MM-dd', fromProviderState('${created}', ''))",
19+
"id": "matching(regex, '^[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}$', fromProviderState('${id}', ''))",
20+
"rectangle": {
21+
"length": "matching(number, 3)",
22+
"width": "matching(number, 4)"
23+
}
24+
},
25+
"response": {
26+
"value": "matching(number, 12)"
27+
}
28+
},
1629
"service": ".plugins.Calculator/calculate"
1730
}
1831
},
32+
"providerStates": [
33+
{
34+
"name": "a shape"
35+
}
36+
],
1937
"request": {
2038
"contents": {
21-
"content": "EgoNAABAQBUAAIBAMgA=",
39+
"content": "EgoNAABAQBUAAIBAMgA6AA==",
2240
"contentType": "application/protobuf;message=.plugins.ShapeMessage",
2341
"contentTypeHint": "BINARY",
2442
"encoded": "base64"
@@ -28,6 +46,10 @@
2846
"$.created": {
2947
"expression": "${created}",
3048
"type": "ProviderState"
49+
},
50+
"$.id": {
51+
"expression": "${id}",
52+
"type": "ProviderState"
3153
}
3254
}
3355
},
@@ -42,6 +64,15 @@
4264
}
4365
]
4466
},
67+
"$.id": {
68+
"combine": "AND",
69+
"matchers": [
70+
{
71+
"match": "regex",
72+
"regex": "^[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}$"
73+
}
74+
]
75+
},
4576
"$.rectangle.length": {
4677
"combine": "AND",
4778
"matchers": [
@@ -105,13 +136,13 @@
105136
"plugins": [
106137
{
107138
"configuration": {
108-
"a5c44dacffef6eb096b88a6e0245cbd4": {
109-
"protoDescriptors": "CusFChVhcmVhX2NhbGN1bGF0b3IucHJvdG8SB3BsdWdpbnMirAIKDFNoYXBlTWVzc2FnZRIpCgZzcXVhcmUYASABKAsyDy5wbHVnaW5zLlNxdWFyZUgAUgZzcXVhcmUSMgoJcmVjdGFuZ2xlGAIgASgLMhIucGx1Z2lucy5SZWN0YW5nbGVIAFIJcmVjdGFuZ2xlEikKBmNpcmNsZRgDIAEoCzIPLnBsdWdpbnMuQ2lyY2xlSABSBmNpcmNsZRIvCgh0cmlhbmdsZRgEIAEoCzIRLnBsdWdpbnMuVHJpYW5nbGVIAFIIdHJpYW5nbGUSPgoNcGFyYWxsZWxvZ3JhbRgFIAEoCzIWLnBsdWdpbnMuUGFyYWxsZWxvZ3JhbUgAUg1wYXJhbGxlbG9ncmFtEhgKB2NyZWF0ZWQYBiABKAlSB2NyZWF0ZWRCBwoFc2hhcGUiKQoGU3F1YXJlEh8KC2VkZ2VfbGVuZ3RoGAEgASgCUgplZGdlTGVuZ3RoIjkKCVJlY3RhbmdsZRIWCgZsZW5ndGgYASABKAJSBmxlbmd0aBIUCgV3aWR0aBgCIAEoAlIFd2lkdGgiIAoGQ2lyY2xlEhYKBnJhZGl1cxgBIAEoAlIGcmFkaXVzIk8KCFRyaWFuZ2xlEhUKBmVkZ2VfYRgBIAEoAlIFZWRnZUESFQoGZWRnZV9iGAIgASgCUgVlZGdlQhIVCgZlZGdlX2MYAyABKAJSBWVkZ2VDIkgKDVBhcmFsbGVsb2dyYW0SHwoLYmFzZV9sZW5ndGgYASABKAJSCmJhc2VMZW5ndGgSFgoGaGVpZ2h0GAIgASgCUgZoZWlnaHQiJAoMQXJlYVJlc3BvbnNlEhQKBXZhbHVlGAEgASgCUgV2YWx1ZTJJCgpDYWxjdWxhdG9yEjsKCWNhbGN1bGF0ZRIVLnBsdWdpbnMuU2hhcGVNZXNzYWdlGhUucGx1Z2lucy5BcmVhUmVzcG9uc2UiAGIGcHJvdG8z",
110-
"protoFile": "syntax = \"proto3\";\n\npackage plugins;\n\nservice Calculator {\n rpc calculate (ShapeMessage) returns (AreaResponse) {}\n}\n\nmessage ShapeMessage {\n oneof shape {\n Square square = 1;\n Rectangle rectangle = 2;\n Circle circle = 3;\n Triangle triangle = 4;\n Parallelogram parallelogram = 5;\n }\n string created = 6;\n}\n\nmessage Square {\n float edge_length = 1;\n}\n\nmessage Rectangle {\n float length = 1;\n float width = 2;\n}\n\nmessage Circle {\n float radius = 1;\n}\n\nmessage Triangle {\n float edge_a = 1;\n float edge_b = 2;\n float edge_c = 3;\n}\n\nmessage Parallelogram {\n float base_length = 1;\n float height = 2;\n}\n\nmessage AreaResponse {\n float value = 1;\n}\n"
139+
"196d0b5be51f754cf2761bdb052e8ce6": {
140+
"protoDescriptors": "CvsFChVhcmVhX2NhbGN1bGF0b3IucHJvdG8SB3BsdWdpbnMivAIKDFNoYXBlTWVzc2FnZRIpCgZzcXVhcmUYASABKAsyDy5wbHVnaW5zLlNxdWFyZUgAUgZzcXVhcmUSMgoJcmVjdGFuZ2xlGAIgASgLMhIucGx1Z2lucy5SZWN0YW5nbGVIAFIJcmVjdGFuZ2xlEikKBmNpcmNsZRgDIAEoCzIPLnBsdWdpbnMuQ2lyY2xlSABSBmNpcmNsZRIvCgh0cmlhbmdsZRgEIAEoCzIRLnBsdWdpbnMuVHJpYW5nbGVIAFIIdHJpYW5nbGUSPgoNcGFyYWxsZWxvZ3JhbRgFIAEoCzIWLnBsdWdpbnMuUGFyYWxsZWxvZ3JhbUgAUg1wYXJhbGxlbG9ncmFtEhgKB2NyZWF0ZWQYBiABKAlSB2NyZWF0ZWQSDgoCaWQYByABKAlSAmlkQgcKBXNoYXBlIikKBlNxdWFyZRIfCgtlZGdlX2xlbmd0aBgBIAEoAlIKZWRnZUxlbmd0aCI5CglSZWN0YW5nbGUSFgoGbGVuZ3RoGAEgASgCUgZsZW5ndGgSFAoFd2lkdGgYAiABKAJSBXdpZHRoIiAKBkNpcmNsZRIWCgZyYWRpdXMYASABKAJSBnJhZGl1cyJPCghUcmlhbmdsZRIVCgZlZGdlX2EYASABKAJSBWVkZ2VBEhUKBmVkZ2VfYhgCIAEoAlIFZWRnZUISFQoGZWRnZV9jGAMgASgCUgVlZGdlQyJICg1QYXJhbGxlbG9ncmFtEh8KC2Jhc2VfbGVuZ3RoGAEgASgCUgpiYXNlTGVuZ3RoEhYKBmhlaWdodBgCIAEoAlIGaGVpZ2h0IiQKDEFyZWFSZXNwb25zZRIUCgV2YWx1ZRgBIAEoAlIFdmFsdWUySQoKQ2FsY3VsYXRvchI7CgljYWxjdWxhdGUSFS5wbHVnaW5zLlNoYXBlTWVzc2FnZRoVLnBsdWdpbnMuQXJlYVJlc3BvbnNlIgBiBnByb3RvMw==",
141+
"protoFile": "syntax = \"proto3\";\n\npackage plugins;\n\nservice Calculator {\n rpc calculate (ShapeMessage) returns (AreaResponse) {}\n}\n\nmessage ShapeMessage {\n oneof shape {\n Square square = 1;\n Rectangle rectangle = 2;\n Circle circle = 3;\n Triangle triangle = 4;\n Parallelogram parallelogram = 5;\n }\n string created = 6;\n string id = 7;\n}\n\nmessage Square {\n float edge_length = 1;\n}\n\nmessage Rectangle {\n float length = 1;\n float width = 2;\n}\n\nmessage Circle {\n float radius = 1;\n}\n\nmessage Triangle {\n float edge_a = 1;\n float edge_b = 2;\n float edge_c = 3;\n}\n\nmessage Parallelogram {\n float base_length = 1;\n float height = 2;\n}\n\nmessage AreaResponse {\n float value = 1;\n}\n"
111142
}
112143
},
113144
"name": "protobuf",
114-
"version": "0.5.4"
145+
"version": "0.6.2"
115146
}
116147
]
117148
},

example/protobuf-sync-message/provider/proxy/index.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
$app->post('/pact-change-state', function (ServerRequestInterface $request): ResponseInterface {
1212
return Response::json([
1313
'created' => date('Y-m-d'),
14+
'id' => '3b46bf2c-fac7-47c3-8d0c-ff86f76c180c',
1415
]);
1516
});
1617

example/protobuf-sync-message/provider/src/Service/Calculator.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ public function calculate(ShapeMessage $request, ServerContext $serverContext):
2020
if (empty($request->getCreated())) {
2121
throw new Exception('Shape created date is required');
2222
}
23+
if (empty($request->getId())) {
24+
throw new Exception('Shape ID is required');
25+
}
2326
switch ($request->getShape()) {
2427
case 'square':
2528
$area = $this->calculateSquareArea($request->getSquare());

src/PhpPact/Consumer/Matcher/Matchers/Regex.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,13 @@
77
use PhpPact\Consumer\Matcher\Model\Expression;
88
use PhpPact\Consumer\Matcher\Model\Matcher\ExpressionFormattableInterface;
99
use PhpPact\Consumer\Matcher\Model\Matcher\JsonFormattableInterface;
10+
use PhpPact\Consumer\Matcher\Trait\ExpressionFormattableTrait;
1011
use PhpPact\Consumer\Matcher\Trait\JsonFormattableTrait;
1112

1213
class Regex extends GeneratorAwareMatcher implements JsonFormattableInterface, ExpressionFormattableInterface
1314
{
1415
use JsonFormattableTrait;
16+
use ExpressionFormattableTrait;
1517

1618
/**
1719
* @param string|string[] $values
@@ -39,6 +41,6 @@ public function formatExpression(): Expression
3941
throw new InvalidValueException(sprintf("Regex matching expression doesn't support value of type %s", gettype($value)));
4042
}
4143

42-
return new Expression("matching(regex, %regex%, %value%)", ['regex' => $this->regex, 'value' => $value]);
44+
return $this->mergeExpression(new Expression("matching(regex, %regex%, %value%)", ['regex' => $this->regex, 'value' => $value]));
4345
}
4446
}

0 commit comments

Comments
 (0)