0
votes

I want to test my authorization-service via pact-jvm. In my request I'm sending a html-body via post, including some metadata to verify the user - including his username and which is also sent in the header where I use Http Basic Auth. I add the header in my testclass with @TargetRequestFilter in my JUnit-Test after reading username+password from a configuration file. This is because the application runs on different tiers. Every tier has another username+password combination. And the pact should work for every tier. Also when the user changes I only want to make little changes in my configuration file. It holds username, password, hostname, port and the protocol.

The problem is: I need to manipulate the html-body of the request depending on the content of my configuration file to match with the headers I set in my testclass without creating a new pact file every time.

So my question is: Is there a way to manipulate selective parts of the html-body I expect (via pact) from within the JUnit class?

Maybe there's another way to solve my problem I don't see yet.

Thanks in advance!


For clarity purpose an example of a Request:

<body>
    <soap:envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
        <soap:body>
            <ns2:authevalrequest1
                xmlns:ns2="http://authgroup/authBRS/specification/ServiceView/AuthProvider/authBRS/">
                <inputmetadata> <version>V_1_0_0</version> <metadataentry>
                <key>US</key> <value>some_username</value> </metadataentry> <metadataentry>
                <key>MA</key> <value>some_user_id</value> </metadataentry> </inputmetadata>
                <request> <attrs> <type>String</type> <values>
                <value>some_user_id</value> </values> <xacml>urn:oasis:names:tc:xacml:1.0:subject:subject-id</xacml>
                </attrs> <attrs> <type>String</type> <values> <value>00</value>
                </values> <xacml>http://thisisaservice.com/resource/dataRES</xacml>
                </attrs> <attrs> <type>String</type> <values> <value>abc</value>
                </values> <xacml>http://thisisaservice.com/subject/authprofilename</xacml>
                </attrs> <attrs> <type>String</type> <values> <value>importData</value>
                </values> <xacml>http://thisisaservice.com/resource/CompanyfunctionRES</xacml> </attrs>
                </request>
            </ns2:authevalrequest1>
        </soap:body>
    </soap:envelope>
</body>

I cannot change the provider or the consumer. I'm just here to make the verification work.

Edit: Maybe I forgot to say... I want to have the response bodies matching (actual and expected), what is no problem. But I need to modify the html-body of the request depending on my config-file.

1
...wait, you're sending your body as HTML to your authentication? Or you're returning HTML from your auth service? - J_A_X
I added an example... - KnechtRootrecht

1 Answers

0
votes

The problem here is that you're trying to do validation of XML, which Pact does not currently support out of the box as we do all our validation using JSON. What you can do is simply use a string validator or a regex validator, however, if anything in your string changes (like white space), your tests might not validate.

At this point, you're kind of on your own for creating a way to template the output into a string to validate your interactions. We have looked at supporting XML, but there's simply very little interest.