diff --git a/include-metadata/TranslationTemplateBundle-EIDfadd4929-fa60-4781-b658-703bbfe3f4eb.xml b/include-metadata/TranslationTemplateBundle-EIDfadd4929-fa60-4781-b658-703bbfe3f4eb.xml index f4b7a4f2..3fc01e50 100644 --- a/include-metadata/TranslationTemplateBundle-EIDfadd4929-fa60-4781-b658-703bbfe3f4eb.xml +++ b/include-metadata/TranslationTemplateBundle-EIDfadd4929-fa60-4781-b658-703bbfe3f4eb.xml @@ -463,6 +463,18 @@ At least one category for an entry is missing which refers to CRS definition and code. + + + + The ows:OperationsMetadata do not advertize the requried conformance class {element} + + + + + + The fes:Filter_Capabilities do not advertize the requried Filter Encoding 2.0 conformance class {element} + + diff --git a/service/ETS-repository-soapui-workspace.xml b/service/ETS-repository-soapui-workspace.xml index 5fc0693f..a4510ade 100755 --- a/service/ETS-repository-soapui-workspace.xml +++ b/service/ETS-repository-soapui-workspace.xml @@ -3,5 +3,6 @@ ds-wfs-pre-defined-soapui-project.xml ds-atom-pre-defined-soapui-project.xml + ds-wfs-direct-soapui-project.xml false \ No newline at end of file diff --git a/service/ds-wfs-direct-soapui-project.xml b/service/ds-wfs-direct-soapui-project.xml new file mode 100755 index 00000000..ce5ce5f5 --- /dev/null +++ b/service/ds-wfs-direct-soapui-project.xml @@ -0,0 +1,1342 @@ + +WFS 2.0 Conformance Test Suite, which is invoked automatically. +

+The Executable Test Suite is divided into two test modules. In the first module 'Initialization and basic checks', basic queries are send to the service to ensure the endpoints are available. The 'Capabilities' test module contains a test case that checks, if the Capabilities document of the service declares all required Conformance Classes. +

+There are a few test cases and test steps that are marked as 'technical test step' or 'technical test case' in the description. They are used to control the test execution flow of the steps. The description text of a technical test step indicates the test steps that are executed. If a technical test step fails, the other test steps, which have been called by the technical test step, should be checked first. To examine a reported issue, the assertion messages should be compared with the service responses which are included in the report. If the response contains an exception report, the request should be checked for 'incorrect' parameters (e.g., a non-existing feature type ID). The test step description typically includes information about the source of the parameter value (e.g., from a previous request where the feature type ID was listed). +

This is a draft version. It has limitations and is expected to contain errors. Please report any issues or problems in GitHub. +

+Known limitations are documented in the description of the applicable test case or test assertion. +

+Source: Conformance Class 'Direct WFS']]>
+ + Perform basic check to ensure all endpoints listed in the Capabilities are available, and initialize the Executable Test Suite with gathered information. + +If this test case fails, all other test cases will be skipped! +Ensure that the schema locations and all endpoints can be queried! + +Please note that for technical reasons this Executable Test Suite requires that schema locations must be accessible without any authentication mechanism. + true + + SEQUENTIAL + + version2.0.0servicewfs + + Technical test case. Initialize loggers and set credentials for the test run. + + + qaf.ShortDescriptionqaf.Authorherrmannqaf.CreationDate2014-01-13T12:24:44.115+01:00qaf.Version1.0.0qaf.AssociatedRequirementsqaf.ExpectedResultsqaf.StatusIMPLEMENTEDqaf.LastUpdateDate2014-01-13T14:10:42.862+01:00etf.technicalSteptrueTechnical test case for updating query parametersCheck if the service is available. + + + Implementation note: The GetCapabilities request includes both the "AcceptVersions" and the "version" parameters. Strictly, for WFS 2.0 / OWS Common 1.1, only the "AcceptVersions" parameter is specified. However, for backward compatibility, the "version" parameter, which has been used in earlier versions of the WFS standard, is still included as a deprecated parameter in OWS Common 1.1. OWS Common 1.1.0 states: "A server may also optionally implement the old-style version negotiation mechanism so that old clients that send GetCapabilities requests containing a 'version' parameter can be served." To cover both the old and the newer version negotiation approach, the request includes both parameters. + <xml-fragment/> + truefalse + UTF-8 + ${#Project#serviceEndpoint} + + 30000200import de.interactive_instruments.etf.suim.* +Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); +a.exists("/wfs:WFS_Capabilities", "TR.missingCapabilitiesRootElement");import de.interactive_instruments.etf.suim.* +Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); +a.equals("/wfs:WFS_Capabilities/@version", "Capabilities version", "2.0.0");BasicBasicGlobal HTTP Settings + + + + + + REQUEST + GetCapabilities + QUERY + xs:string + GetCapabilities + + + SERVICE${#TestSuite#service}QUERYACCEPTVERSIONS${#TestSuite#version}QUERYVERSION${#TestSuite#version}QUERY + + CapabilitiesResponseAsXmlGetCapabilitiescapabilities#TestCase#trueserviceservice#TestSuite#service#TestCase#trueversionversion#TestSuite#version#TestCase#truecapabilities + + SimpleDemo WFS + SimpleDemo WFS by XtraServer + + XtraServer Demo + WFS + SimpleDemo + + WFS + 1.0.0 + 1.1.0 + 2.0.0 + The use of this service is restricted. Please contact us. + The use of this service is restricted. Please contact us. + + + interactive instruments GmbH + + + XtraServer SimpleDemo Team + Team + + + +49 228 9141070 + +49 228 9141090 + + + Bonn + NRW + 53115 + DE + xtraserver@interactive-instruments.de + + + 0900 - 1800 GMT+1, Mon - Fri + + pointOfContact + + + + + + + + + + + + + 1.0.0 + 1.1.0 + 2.0.0 + + + + + text/xml + + + + + ServiceIdentification + ServiceProvider + OperationsMetadata + FeatureTypeList + Filter_Capabilities + + + + + + + + + + + + + text/xml; subtype=gml/2.1.2 + application/gml+xml; version=2.1 + text/xml; subtype=gml/3.1.1 + application/gml+xml; version=3.1 + text/xml; subtype=gml/3.2.1 + application/gml+xml; version=3.2 + + + + + + + + + + + + + text/xml; subtype=gml/2.1.2 + application/gml+xml; version=2.1 + text/xml; subtype=gml/3.1.1 + application/gml+xml; version=3.1 + text/xml; subtype=gml/3.2.1 + application/gml+xml; version=3.2 + + + + + + + + + + + + + text/xml; subtype=gml/2.1.2 + application/gml+xml; version=2.1 + text/xml; subtype=gml/3.1.1 + application/gml+xml; version=3.1 + text/xml; subtype=gml/3.2.1 + application/gml+xml; version=3.2 + + + + + + + + + + + + + + + + + + + + + + 2.0.0 + 1.1.0 + 1.0.0 + + + + + urn:ogc:def:crs:EPSG::25833 + urn:ogc:def:crs:EPSG::3034 + urn:ogc:def:crs:EPSG::4258 + urn:ogc:def:crs:EPSG::4326 + + + + + TRUE + + + + TRUE + + + + FALSE + + + + FALSE + + + + TRUE + + + + TRUE + + + + TRUE + + + + TRUE + + + + FALSE + + + + FALSE + + + + FALSE + + + + FALSE + + + + FALSE + + + + FALSE + + + + FALSE + + + + TRUE + + + + TRUE + + + + * + + + + wfs:Query + wfs:StoredQuery + + + + + + ci:City + + urn:ogc:def:crs:EPSG::4326 + urn:ogc:def:crs:EPSG::25833 + urn:ogc:def:crs:EPSG::3034 + urn:ogc:def:crs:EPSG::4258 + + 5 46 + 16 54 + + + + ci:District + + urn:ogc:def:crs:EPSG::4326 + urn:ogc:def:crs:EPSG::25833 + urn:ogc:def:crs:EPSG::3034 + urn:ogc:def:crs:EPSG::4258 + + 5 46 + 16 54 + + + + ci:River + + urn:ogc:def:crs:EPSG::4326 + urn:ogc:def:crs:EPSG::25833 + urn:ogc:def:crs:EPSG::3034 + urn:ogc:def:crs:EPSG::4258 + + 5 46 + 16 54 + + + + ci:State + + urn:ogc:def:crs:EPSG::4326 + urn:ogc:def:crs:EPSG::25833 + urn:ogc:def:crs:EPSG::3034 + urn:ogc:def:crs:EPSG::4258 + + 5 46 + 16 54 + + + + + + + + TRUE + + + + TRUE + + + + TRUE + + + + TRUE + + + + TRUE + + + + TRUE + + + + TRUE + + + + TRUE + + + + TRUE + + + + TRUE + + + + FALSE + + + + TRUE + + + + FALSE + + + + TRUE + + + + TRUE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + xsd:integer + + + xsd:double + + + xsd:double + + + + + xsd:integer + + + xsd:double + + + xsd:double + + + + + xsd:integer + + + xsd:double + + + + + xsd:string + + + xsd:string + + + xsd:string + + + + + xsd:anyType + + + xsd:anyType + + + xsd:anyType + + + + + xsd:integer + + + gml:AbstractGeometryType + + + + + xsd:integer + + + gml:AbstractGeometryType + + + + + xsd:integer + + + gml:AbstractGeometryType + + + + + +]]>servicewfsversion2.0.0qaf.ShortDescriptionqaf.Authorherrmannqaf.CreationDate2014-01-13T12:24:44.124+01:00qaf.Version1.0.0qaf.AssociatedRequirementsqaf.ExpectedResultsqaf.StatusIMPLEMENTEDqaf.LastUpdateDate2014-01-13T14:10:42.863+01:00Validate Capabilites response against xsi:schemaLocation. + + + + <xml-fragment/> + + UTF-8 + ${#Project#serviceEndpoint} + + 20030000import de.interactive_instruments.etf.suim.* +Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); +a.exists("/*:WFS_Capabilities/@*:schemaLocation", "TR.missingSchemaLocation");xsi:schemaLocationBasicBasicGlobal HTTP Settings + + + + + + REQUEST + GetCapabilities + QUERY + xs:string + GetCapabilities + + + SERVICE${#TestSuite#service}QUERYACCEPTVERSIONS${#TestSuite#version}QUERYVERSION${#TestSuite#version}QUERY + + qaf.ShortDescriptionqaf.Authorqaf.CreationDateqaf.Versionqaf.AssociatedRequirementsqaf.ExpectedResultsqaf.Statusqaf.LastUpdateDateCheck if the endpoints from the Capabilites are accesable and if basic requirements are met to query the service. The first found FeatureType and the first found OutputFormat from the Capabilities are taken for one GetFeature and one DescribeFeatureType request. This test case will most likely fail if FeatureTypes or OutputFormats are listed in the (manually edited) Capabilities document which the underlying service implementation is not capabile to serve. featureTypeNameoutputFormatfeatureTypeNamespacefeatureTypeNamespacePrefix + + + Request Capabilities, expect a Capabilites document is returned which lists at least one usable FeatureType. + <xml-fragment/> + + UTF-8 + ${#Project#serviceEndpoint} + + 30000200import de.interactive_instruments.etf.suim.* +Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); +a.exists("//wfs:FeatureType[1]");import de.interactive_instruments.etf.suim.* +Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); +a.notExists(" //wfs:FeatureType[1]/wfs:Name[not(namespace::*[name()=substring-before(//wfs:FeatureType[1]/wfs:Name, ':')])] ", "TR.featureTypeUnknownNamespace")import de.interactive_instruments.etf.suim.* +Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); +a.exists("//*:FeatureType[1]/*:OutputFormats/*:Format, /*:WFS_Capabilities/*:OperationsMetadata/*:Operation[@name='GetFeature']/*:Parameter[@name='outputFormat']/*:AllowedValues/*:Value", "TR.noOutputFormats");import de.interactive_instruments.etf.suim.* +Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); +a.exists("/wfs:WFS_Capabilities", "TR.missingCapabilitiesRootElement");BasicBasicGlobal HTTP Settings + + + + + + REQUEST + GetCapabilities + QUERY + xs:string + GetCapabilities + + + SERVICE${#TestSuite#service}QUERYACCEPTVERSIONS${#TestSuite#version}QUERYVERSION${#TestSuite#version}QUERY + + Extract FeatureType name, namespace, namespace prefix and an OutputFormatExtract name of FeatureTypeResponseAsXmlGetCapabilities//*:FeatureType[1]/*:NamefeatureTypeNameTransfer_PropertiestrueExtract OutputFormat of FeatureTypeResponseAsXmlGetCapabilitiesif (exists(//*:FeatureType[1]/*:OutputFormats/*:Format)) +then //*:FeatureType[1]/*:OutputFormats/*:Format +else /*:WFS_Capabilities/*:OperationsMetadata/*:Operation[@name='GetFeature']/*:Parameter[@name='outputFormat']/*:AllowedValues/*:Value[1]outputFormatTransfer_PropertiestrueExtract namespace of FeatureTypeResponseAsXmlGetCapabilities//*:FeatureType[1]/*:Name/namespace::*[name()=substring-before(//*:FeatureType[1]/*:Name, ':')]featureTypeNamespaceTransfer_PropertiestrueExtract namespace prefixResponseAsXmlGetCapabilitiessubstring-before(//*:FeatureType[1]/*:Name, ':')featureTypeNamespacePrefixTransfer_PropertiestrueTechnical test step, which extracts the endpoints from the Capabilities and executes the test steps 'GetFeature' and 'DescribeFeatureType' with the first found FeatureTypeName, found in the Capabilities (previous test step 'GetCapabilities').Request the first found FeatureType from the Capabilities to check if the GetFeature endpoint is available. Called by 'Activate Operations'. Note<xml-fragment/>${#Project#endpt.GetFeature.Get}20030000import de.interactive_instruments.etf.suim.* + +Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); +a.exists("/wfs:FeatureCollection", "TR.missingFeatureCollectionRootElement");BasicBasicGlobal HTTP SettingsSERVICE${#TestSuite#service}QUERYVERSION${#TestSuite#version}QUERYREQUESTGetFeatureQUERYRESULTTYPEhitsQUERYTYPENAMES${Transfer_Properties#featureTypeName}QUERYOUTPUTFORMAT${Transfer_Properties#outputFormat}QUERYNAMESPACESxmlns(${Transfer_Properties#featureTypeNamespacePrefix},${Transfer_Properties#featureTypeNamespace})QUERYRequest the first found OutputFormat from the Capabilities to check if the DescribeFeatureType endpoint is available. This test step will most likely fail, if the Output Format is listed in the Capabilities but not supported by the implementing service. If the service is capable to serve the requested Output Format but rejects the request, there might be an issue with the encoding of whitespaces ( %20 ) from the request. Called by 'Activate Operations'.<xml-fragment/>${#Project#endpt.GetFeature.Get}20030000import de.interactive_instruments.etf.suim.* +Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); +a.exists("/*:schema", "TR.missingSchemaRootElement");BasicBasicGlobal HTTP SettingsSERVICE${#TestSuite#service}QUERYVERSION${#TestSuite#version}QUERYREQUESTDescribeFeatureTypeQUERYOUTPUTFORMATapplication/gml+xml; version=3.2QUERYqaf.ShortDescriptionqaf.Authorherrmannqaf.CreationDate2014-01-13T12:24:44.130+01:00qaf.Version1.0.0qaf.AssociatedRequirementsqaf.ExpectedResultsqaf.StatusIMPLEMENTEDqaf.LastUpdateDate2014-01-13T14:10:42.866+01:00Check if the service is available and the Test initialisation phase has been completed successfully. + + + Requests the Capabilities document to check if the service is still up and running + <xml-fragment/> + truefalse + UTF-8 + ${#Project#serviceEndpoint} + + 30000/*/@version${#TestSuite#version}falsefalsefalse200import de.interactive_instruments.etf.suim.* +Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); +a.exists("/wfs:WFS_Capabilities", "TR.missingCapabilitiesRootElement");import de.interactive_instruments.etf.suim.* +Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); +a.equals("/wfs:WFS_Capabilities/@version", "Capabilities version", "2.0.0");BasicBasicGlobal HTTP Settings + + + + + + REQUEST + GetCapabilities + QUERY + xs:string + GetCapabilities + + + SERVICE${#TestSuite#service}QUERYACCEPTVERSIONS${#TestSuite#version}QUERYVERSION2.0.0QUERY + + Technical test step. Transfer basic data.CapabilitiesResponseAsXmlGetCapabilitiescapabilities#TestCase#trueserviceservice#TestSuite#service#TestCase#trueversionversion#TestSuite#version#TestCase#truecapabilities + + SimpleDemo WFS + SimpleDemo WFS by XtraServer + + XtraServer Demo + WFS + SimpleDemo + + WFS + 1.0.0 + 1.1.0 + 2.0.0 + The use of this service is restricted. Please contact us. + The use of this service is restricted. Please contact us. + + + interactive instruments GmbH + + + XtraServer SimpleDemo Team + Team + + + +49 228 9141070 + +49 228 9141090 + + + Bonn + NRW + 53115 + DE + xtraserver@interactive-instruments.de + + + 0900 - 1800 GMT+1, Mon - Fri + + pointOfContact + + + + + + + + + + + + + 1.0.0 + 1.1.0 + 2.0.0 + + + + + text/xml + + + + + ServiceIdentification + ServiceProvider + OperationsMetadata + FeatureTypeList + Filter_Capabilities + + + + + + + + + + + + + text/xml; subtype=gml/2.1.2 + application/gml+xml; version=2.1 + text/xml; subtype=gml/3.1.1 + application/gml+xml; version=3.1 + text/xml; subtype=gml/3.2.1 + application/gml+xml; version=3.2 + + + + + + + + + + + + + text/xml; subtype=gml/2.1.2 + application/gml+xml; version=2.1 + text/xml; subtype=gml/3.1.1 + application/gml+xml; version=3.1 + text/xml; subtype=gml/3.2.1 + application/gml+xml; version=3.2 + + + + + + + + + + + + + text/xml; subtype=gml/2.1.2 + application/gml+xml; version=2.1 + text/xml; subtype=gml/3.1.1 + application/gml+xml; version=3.1 + text/xml; subtype=gml/3.2.1 + application/gml+xml; version=3.2 + + + + + + + + + + + + + + + + + + + + + + 2.0.0 + 1.1.0 + 1.0.0 + + + + + urn:ogc:def:crs:EPSG::25833 + urn:ogc:def:crs:EPSG::3034 + urn:ogc:def:crs:EPSG::4258 + urn:ogc:def:crs:EPSG::4326 + + + + + TRUE + + + + TRUE + + + + FALSE + + + + FALSE + + + + TRUE + + + + TRUE + + + + TRUE + + + + TRUE + + + + FALSE + + + + FALSE + + + + FALSE + + + + FALSE + + + + FALSE + + + + FALSE + + + + FALSE + + + + TRUE + + + + TRUE + + + + * + + + + wfs:Query + wfs:StoredQuery + + + + + + ci:City + + urn:ogc:def:crs:EPSG::4326 + urn:ogc:def:crs:EPSG::25833 + urn:ogc:def:crs:EPSG::3034 + urn:ogc:def:crs:EPSG::4258 + + 5 46 + 16 54 + + + + ci:District + + urn:ogc:def:crs:EPSG::4326 + urn:ogc:def:crs:EPSG::25833 + urn:ogc:def:crs:EPSG::3034 + urn:ogc:def:crs:EPSG::4258 + + 5 46 + 16 54 + + + + ci:River + + urn:ogc:def:crs:EPSG::4326 + urn:ogc:def:crs:EPSG::25833 + urn:ogc:def:crs:EPSG::3034 + urn:ogc:def:crs:EPSG::4258 + + 5 46 + 16 54 + + + + ci:State + + urn:ogc:def:crs:EPSG::4326 + urn:ogc:def:crs:EPSG::25833 + urn:ogc:def:crs:EPSG::3034 + urn:ogc:def:crs:EPSG::4258 + + 5 46 + 16 54 + + + + + + + + TRUE + + + + TRUE + + + + TRUE + + + + TRUE + + + + TRUE + + + + TRUE + + + + TRUE + + + + TRUE + + + + TRUE + + + + TRUE + + + + FALSE + + + + TRUE + + + + FALSE + + + + TRUE + + + + TRUE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + xsd:integer + + + xsd:double + + + xsd:double + + + + + xsd:integer + + + xsd:double + + + xsd:double + + + + + xsd:integer + + + xsd:double + + + + + xsd:string + + + xsd:string + + + xsd:string + + + + + xsd:anyType + + + xsd:anyType + + + xsd:anyType + + + + + xsd:integer + + + gml:AbstractGeometryType + + + + + xsd:integer + + + gml:AbstractGeometryType + + + + + xsd:integer + + + gml:AbstractGeometryType + + + + + +]]>servicewfsversion2.0.0qaf.ShortDescriptionqaf.Authorqaf.CreationDateqaf.Versionqaf.AssociatedRequirementsqaf.ExpectedResultsqaf.Statusqaf.LastUpdateDateTest module for checking Capabilities related information.SEQUENTIAL +
+Relevant Requirements: +
    +
  • TG Requirement 61: Implementations shall meet TG Requirement 48 (conformance to [ISO 19142] 'HTTP GET' conformance class) and TG Requirement 52 (one endpoint for each INSPIRE dataset).
  • +
  • TG Requirement 62: Implementations shall conform to ISO 19142 Conformance Class 'Basic WFS'
  • +
  • TG Requirement 63: A Direct Access Download Service shall conform to ISO 19143 'Ad hoc Query' Conformance Class.
  • +
  • TG Requirement 64: A Direct Access Download Service shall conform to ISO 19143 'Resource Identification' Conformance Class.
  • +
  • TG Requirement 65: A Direct Access Download Service shall conform to ISO 19143 'Minimum Standard Filter' Conformance Class.
  • +
  • TG Requirement 66: A Direct Access Download Service shall conform to ISO 19143 'Minimum Spatial Filter' Conformance Class.
  • +
  • TG Requirement 67: A Direct Access Download Service shall conform to ISO 19143 'Minimum Temporal Filter' Conformance Class.
  • +
  • TG Requirement 68: A Direct Access Download Service shall conform to ISO 19143 'Minimum XPath' Conformance Class.
  • +
+
+
+Source: Abstract Test Case 'Conformance Classes']]>
f739929b-aa73-4a10-ac57-ffdf5ee50c14capabilitiesserviceversionqaf.ShortDescriptionqaf.Authorqaf.CreationDateqaf.Versionqaf.AssociatedRequirementsqaf.ExpectedResultsqaf.Statusqaf.LastUpdateDateSINGLETON_AND_WAIT + + + + <xml-fragment/> + + UTF-8 + ${#Project#serviceEndpoint} + + import de.interactive_instruments.etf.suim.* +Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); +a.equals("/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Constraint[@name='ImplementsSimpleWFS']/ows:DefaultValue", "ImplementsSimpleWFS", "TRUE", "TR.operationsMetadataConformanceClassNotSupported");import de.interactive_instruments.etf.suim.* +Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); +a.equals("/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Constraint[@name='ImplementsBasicWFS']/ows:DefaultValue", "ImplementsBasicWFS", "TRUE", "TR.operationsMetadataConformanceClassNotSupported");import de.interactive_instruments.etf.suim.* +Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); +a.equals("/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Constraint[@name='KVPEncoding']/ows:DefaultValue", "KVPEncoding", "TRUE", "operationsMetadataConformanceClassNotSupported");import de.interactive_instruments.etf.suim.* +Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); +a.equals("/wfs:WFS_Capabilities/fes:Filter_Capabilities/fes:Conformance/fes:Constraint[@name='ImplementsAdHocQuery']/ows:DefaultValue", "ImplementsAdHocQuery", "TRUE", "TR.filterConformanceClassNotSupported");import de.interactive_instruments.etf.suim.* +Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); +a.equals("/wfs:WFS_Capabilities/fes:Filter_Capabilities/fes:Conformance/fes:Constraint[@name='ImplementsResourceId']/ows:DefaultValue", "ImplementsResourceId", "TRUE", "TR.filterConformanceClassNotSupported");import de.interactive_instruments.etf.suim.* +Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); +a.equals("/wfs:WFS_Capabilities/fes:Filter_Capabilities/fes:Conformance/fes:Constraint[@name='ImplementsMinStandardFilter']/ows:DefaultValue", "ImplementsMinStandardFilter", "TRUE", "TR.filterConformanceClassNotSupported");import de.interactive_instruments.etf.suim.* +Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); +a.equals("/wfs:WFS_Capabilities/fes:Filter_Capabilities/fes:Conformance/fes:Constraint[@name='ImplementsMinSpatialFilter']/ows:DefaultValue", "ImplementsMinSpatialFilter", "TRUE", "TR.filterConformanceClassNotSupported");import de.interactive_instruments.etf.suim.* +Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); +a.equals("/wfs:WFS_Capabilities/fes:Filter_Capabilities/fes:Conformance/fes:Constraint[@name='ImplementsMinTemporalFilter']/ows:DefaultValue", "ImplementsMinTemporalFilter", "TRUE", "TR.filterConformanceClassNotSupported");import de.interactive_instruments.etf.suim.* +Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); +a.equals("/wfs:WFS_Capabilities/fes:Filter_Capabilities/fes:Conformance/fes:Constraint[@name='ImplementsMinimumXPath']/ows:DefaultValue", "ImplementsMinimumXPath", "TRUE", "TR.filterConformanceClassNotSupported");BasicBasicGlobal HTTP Settings + + + + + + request + GetCapabilities + QUERY + xs:string + GetCapabilities + + + ACCEPTVERSIONS${#TestSuite#version}QUERYservice${#TestSuite#service}QUERY + +
SERVICEwfsVERSION2.0.0
+ + + excludeFeatureTypes + + + + + + + + + + + + + + + + + + + authUserauthPwdetf.ignore.propertiesexcludeFeatureTypes, srsnamelist, blacklisted.outputFormats, authUser, authPwd, authMethod, FirstFeature, FirstFeatureId, GetFeatureURL, featureTypeList, datasetIdentifiersList, featureTypeList, FirstFeatureTypeName, testIntensive, endpt.GetFeature.Get, endpt.DescribeFeatureType.Get, endpt.GetFeature.Post, endpt.DescribeFeatureType.Post, endpt.GetPropertyValue.Get, endpt.GetPropertyValue.Post, endpt.ListStoredQueries.Get, endpt.ListStoredQueries.Post, endpt.DescribeStoredQueries.Get, endpt.DescribeStoredQueries.Post, etf.translation.template.collection.id, etf.tag.ids, etf.author, etf.version, etf.last.editor, etf.reference, etf.creation.dateauthMethodbasicFirstFeatureTypeNametestIntensiveendpt.GetFeature.Getendpt.DescribeFeatureType.Getendpt.GetFeature.Postendpt.DescribeFeatureType.Postendpt.GetPropertyValue.Getendpt.GetPropertyValue.Postendpt.ListStoredQueries.Getendpt.ListStoredQueries.Postendpt.DescribeStoredQueries.Getendpt.DescribeStoredQueries.Postblacklisted.outputFormatstext/xml; subtype=gml/3.1.1, application/gml+xml; version=3.1etf.tag.idsEIDe51620af-bcf5-4719-ab0e-ef6226a572faetf.translation.template.collection.idEIDfadd4929-fa60-4781-b658-703bbfe3f4ebetf.authorinteractive instruments GmbHetf.version0.1.0etf.last.editorinteractive instruments GmbHetf.referencehttps://github.com/inspire-eu-validation/ets-repository/tree/master/service/ds-wfs-direct-soapui-project.xmletf.creation.date2017-05-15T00:00:00etf.supported.test.object.type.idsEID9b6ef734-981e-4d60-aa81-d6730a1c6389etf.last.update.date2017-05-15T00:00:00etf.dependency.idsEID95a1b6fc-2b55-3d43-9502-3b8b605bda10 + + + + import com.eviware.soapui.impl.wsdl.teststeps.HttpTestRequestStep; +import com.eviware.soapui.impl.wsdl.teststeps.RestTestRequestStep +import com.eviware.soapui.model.testsuite.TestStepResult; + + +// Get the "requirements" test step +def requirements = project.getTestSuiteByName("TestSetup")?. + getTestCaseByName("Requirements")?.getTestStepByName("Requirements"); + +log.info("Results: "); +for( testSuiteR in runner?.getResults() ) { + for( testCaseR in testSuiteR?.getResults() ) { + for( testStepR in testCaseR?.getResults() ) { + + if(testStepR.getStatus()!=TestStepResult.TestStepStatus.OK) { + if (testStepR.testStep instanceof HttpTestRequestStep || testStepR.testStep instanceof RestTestRequestStep) { + testStepR.testStep.testRequest.assertionList.each{ + // Extract ID which is seperated with a whitespace and a doublecolon + String assertionName = it.name; + if (assertionName.indexOf(": ") > -1) { + String id = assertionName?.substring( 0, assertionName.indexOf(": ") ); + if(it.valid) { + log.info("Assertion "+assertionName+" passed"); + }else if(it.failed) { + log.error("Assertion "+assertionName+" failed with error:"); + log.error(" - "+it.getErrors()[0].getMessage()); + log.error(" - Requirements:"); + + // Todo: Save the requirements as an object in a map + requirements.getPropertyList().each { + log.info(it.getName()) + if(it.getName().contains(id)) { + log.error(" - "+it.getName()+" :" ); + log.error(" "+it.getValue()); + } + } + }else{ + log.warn("Assertion "+assertionName+" is deactivated"); + } + } + } + } + } + } + } +} + +
diff --git a/utils/check_ids.groovy b/utils/check_ids.groovy index f2d88af4..329319af 100644 --- a/utils/check_ids.groovy +++ b/utils/check_ids.groovy @@ -49,7 +49,8 @@ new File('../').eachFileRecurse(FILES) { file -> println "Parsing $file" def xml = xmlSlurper.parse(file); def ids = xml.'**'.findAll{ - it.@id != "" && !it.@id.text().startsWith("com.eviware") }.'@id' + it.@id != "" && !it.@id.text().startsWith("com.eviware") && !it.@id.text().startsWith("ProjectSettings") + }.'@id' ids.each { i -> // gpath attribute cast required String id = i