From 0f338ca5a0548e8d801e9be945103689ac4952d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Alejandro=20Mi=C3=B1o?= <1666693+javiersvg@users.noreply.github.com> Date: Mon, 7 Sep 2020 02:07:20 -0500 Subject: [PATCH] bug: fix validations for xml #1494 (#1495) --- .../util/xml/XmlToXPathsConverter.groovy | 2 +- .../WireMockXmlStubStrategySpec.groovy | 5 +++++ .../util/xml/XmlToXPathsConverterSpec.groovy | 18 ++++++++++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/util/xml/XmlToXPathsConverter.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/util/xml/XmlToXPathsConverter.groovy index 3f37a94f18..9b6bb1da9e 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/util/xml/XmlToXPathsConverter.groovy +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/util/xml/XmlToXPathsConverter.groovy @@ -220,7 +220,7 @@ class XmlToXPathsConverter { private static List addValueNodes(Node node, List> valueNodes, List attributes) { getChildNodesAsList(node).each { - attributes.addAll(getAttributesAsList(node)) + attributes.addAll(getAttributesAsList(it)) if (isValueNode(it) && !isBlank(it.nodeValue)) { valueNodes << withParents(it) } diff --git a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/dsl/wiremock/WireMockXmlStubStrategySpec.groovy b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/dsl/wiremock/WireMockXmlStubStrategySpec.groovy index e494eabff1..0d0ba34b20 100644 --- a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/dsl/wiremock/WireMockXmlStubStrategySpec.groovy +++ b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/dsl/wiremock/WireMockXmlStubStrategySpec.groovy @@ -312,6 +312,11 @@ class WireMockXmlStubStrategySpec extends Specification implements WireMockStubV "expression": "/test/alpha/text()", "equalTo": "abc" } + }, { + "matchesXPath" : { + "expression" : "/test/duck/@type", + "equalTo" : "xtype" + } }, { "matchesXPath": { "expression": "/test/duck/text()", diff --git a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/util/xml/XmlToXPathsConverterSpec.groovy b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/util/xml/XmlToXPathsConverterSpec.groovy index 14b94c6867..d481e9de65 100644 --- a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/util/xml/XmlToXPathsConverterSpec.groovy +++ b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/util/xml/XmlToXPathsConverterSpec.groovy @@ -17,6 +17,12 @@ class XmlToXPathsConverterSpec extends Specification { String unnamedXml = ''' customer@test.com + ''' + @Shared + String attributesInChildXml = ''' + customer@test.com +
+ ''' @Unroll @@ -39,6 +45,18 @@ class XmlToXPathsConverterSpec extends Specification { e.message.contains('Prefix must resolve to a namespace: ns1') } + @Unroll + def "should generate matched path [#expectedValue] for xPath [#value]"() { + expect: + value == expectedValue + where: + value || expectedValue + XmlToXPathsConverter.mapToMatchers(attributesInChildXml).get(0).path() || '''/customer/email/text()''' + XmlToXPathsConverter.mapToMatchers(attributesInChildXml).get(1).path() || '''/customer/@first_custom_attribute''' + XmlToXPathsConverter.mapToMatchers(attributesInChildXml).get(2).path() || '''/customer/email/@second_custom_attribute''' + XmlToXPathsConverter.mapToMatchers(attributesInChildXml).get(3).path() || '''/customer/address/@third_custom_attribute''' + } + @Unroll def "should remove elements to [#expectedValue] for xPath [#value]"() { given: