PACT jvm matching rules are being ignored when running test

112 views
Skip to first unread message

Thinh. Tran Nguyen Quoc

unread,
Apr 14, 2020, 9:54:12 PM4/14/20
to Pact Support

Hi team, 

Could you please help me,
Currently, I have problem when run verify pact
I'm using PACT JVM https://github.com/DiUS/pact-jvm/tree/master/provider/pact-jvm-provider-junit I don't know why the matching rules in my contact are being ignored. 

<dependency>
<groupId>au.com.dius</groupId>
<artifactId>pact-jvm-provider-junit</artifactId>
<version>4.0.8</version>
<scope>test</scope>
</dependency>

@RunWith(SpringRestPactRunner.class) // Say JUnit to run tests with custom Runner
@Provider("provDataTest")// Set up name of tested provider
@PactBroker(host="pact-broker.services", port = "80")
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT,
properties = {"spring.profiles.active=dev"},
classes = Application.class)
public class ContractTesting {
@BeforeClass //Method will be run once: before whole contract test suite
public static void setUpService() {
//Run DB, create schema
//Run service
//...
System.out.println("Now service in default state");
}
@TargetRequestFilter
public void exampleRequestFilter(HttpRequest request) {
}
@State("Check correct data json structure in case code: 401")
public void checkDataInCaseUnauthorized() {
}
@TestTarget // Annotation denotes Target that will be used for tests
public final Target target = new HttpTarget(8082);
And my Contract file
{
  "provider": {
    "name": "provDataTest"
  },
  "consumer": {
    "name": "test"
  },
  "interactions": [
    {
      "description": "Read all links_401",
      "request": {
        "method": "GET",
        "path": "/v1/consumer/me/link_social_account",
        "headers": {
          "invalidAuth": "401"
        }
      },
      "response": {
        "status": 401,
        "headers": {
          "Content-Type": "text/json;charset=utf-8"
        },
        "body": {
          "error": {
            "code": 401,
            "message": "session incorrect",
            "errors": []
          }
        },
        "matchingRules": {
          "body": {
            "$.error": {
              "matchers": [
                {
                  "match": "type"
                }
              ],
              "combine": "AND"
            },
            "$.error.code": {
              "matchers": [
                {
                  "match": "integer"
                }
              ],
              "combine": "AND"
            },
            "$.error.message": {
              "matchers": [
                {
                  "match": "type"
                }
              ],
              "combine": "AND"
            },
            "$.error.errors[*].message": {
              "matchers": [
                {
                  "match": "type"
                }
              ],
              "combine": "AND"
            },
            "$.error.errors[*].field": {
              "matchers": [
                {
                  "match": "type"
                }
              ],
              "combine": "AND"
            }
          },
          "header": {
            "Content-Type": {
              "matchers": [
                {
                  "match": "text/json;charset=utf-8",
                  "regex": "regex"
                }
              ],
              "combine": "AND"
            }
          }
        }
      },
      "providerStates": [
        {
          "name": "Check correct data json structure in case code: 401"
        }
      ]
    }
  ],
  "metadata": {
    "pactSpecification": {
      "version": "3.0.0"
    },
    "pact-jvm": {
      "version": "3.2.11"
    }
  }
}

And show error after run

Read all links_401 returns a response which has a matching body
      Read all links_401 returns a response which has a matching
body=BodyComparisonResult(mismatches={/=[BodyMismatch(expected=[B@480e8a7a, actual=[B@10378c35, mismatch=Actual body '[B@10378c35' is not equal to the expected body '[B@480e8a7a', path=/, diff=null)]},
 diff=[-{"error":{"code":401,"message":"session incorrect","errors":[]}}, 
+{"error":{"code":401,"message":"session incorrect, please login again (CR_A1004)","errors":[]}}])
 
 

I have tried to change regex but the problem is still happening. It is only correct when message data correct. 

Besides, I have posted this question on https://stackoverflow.com/questions/61206271/pact-jvm-matching-rules-are-being-ignored-when-running-test


Please help to give my point incorrect.

Thanks,




Reply all
Reply to author
Forward
0 new messages