Removed testing and stats from the Commander jarfile during runRESOScript option, and updated RESOScript templates

This commit is contained in:
Joshua Darnell 2020-03-18 16:00:13 -07:00
parent cccd671c99
commit a788bf0309
11 changed files with 243 additions and 997 deletions

View File

@ -255,7 +255,7 @@ For those wanting more information, a `log4j.properties` file may be created (as
use the DEBUG build of the application located in `/build/libs/` identified by `-DEBUG` in the Commander jar's file name.
RESOScript files contain zero or more Settings, Parameters, and Requests. For example:
```
```xml
<?xml version="1.0" encoding="utf-8" ?>
<OutputScript>
<ClientSettings>
@ -287,8 +287,7 @@ The XML DTD for this schema is as follows:
<!DOCTYPE OutputScript [
<!ELEMENT OutputScript (RESOScriptVersion|ClientSettings|Parameters|Requests)*>
<!ELEMENT RESOScriptVersion (#PCDATA)>
<!ELEMENT ClientSettings
(RESOScriptVersion|WebAPIURI|AuthenticationType|BearerToken|ClientIdentification|ClientSecret|TokenURI|ClientScope)*>
<!ELEMENT ClientSettings (WebAPIURI|AuthenticationType|BearerToken|ClientIdentification|ClientSecret|TokenURI|ClientScope)*>
<!ELEMENT WebAPIURI (#PCDATA)>
<!ELEMENT AuthenticationType (#PCDATA)>
<!ELEMENT BearerToken (#PCDATA)>
@ -304,13 +303,9 @@ The XML DTD for this schema is as follows:
<!ELEMENT Requests (Request)*>
<!ELEMENT Request (#PCDATA)>
<!ATTLIST Request
Capability CDATA #REQUIRED
MetallicLevel CDATA #REQUIRED
OutputFile CDATA #REQUIRED
RequirementId CDATA #REQUIRED
TestDescription CDATA #REQUIRED
Url CDATA #REQUIRED
WebAPIReference CDATA #REQUIRED>
RequestId CDATA #REQUIRED
Url CDATA #REQUIRED>
]>
```

Binary file not shown.

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<!--
>>> To be used as a template for Web API Server 1.0.2 Gold Certification <<<
NOTES:
@ -12,15 +12,10 @@
Contact josh@reso.org with further questions.
-->
<!--
############################################################
XML DTD - Must come first
############################################################-->
<!DOCTYPE OutputScript [
<!ELEMENT OutputScript (RESOScriptVersion|ClientSettings|Parameters|Requests)*>
<!ELEMENT RESOScriptVersion (#PCDATA)>
<!ELEMENT ClientSettings
(RESOScriptVersion|WebAPIURI|AuthenticationType|BearerToken|ClientIdentification|ClientSecret|TokenURI|ClientScope)*>
<!ELEMENT ClientSettings (WebAPIURI|AuthenticationType|BearerToken|ClientIdentification|ClientSecret|TokenURI|ClientScope)*>
<!ELEMENT WebAPIURI (#PCDATA)>
<!ELEMENT AuthenticationType (#PCDATA)>
<!ELEMENT BearerToken (#PCDATA)>
@ -36,29 +31,11 @@
<!ELEMENT Requests (Request)*>
<!ELEMENT Request (#PCDATA)>
<!ATTLIST Request
Capability CDATA #REQUIRED
MetallicLevel CDATA #REQUIRED
OutputFile CDATA #REQUIRED
RequirementId CDATA #REQUIRED
TestDescription CDATA #REQUIRED
Url CDATA #REQUIRED
WebAPIReference CDATA #REQUIRED>
RequestId CDATA #REQUIRED
Url CDATA #REQUIRED>
]>
<!--
############################################################
TODO: this document will be updated with language
matching the OAuth 2.0 Specification and ClientSettings
will be removed.
See:
https://tools.ietf.org/html/rfc8252
Watch for subsequent changes to this file.
ClientSettings will be converted to Parameters forthwith.
############################################################-->
<OutputScript>
<!--
@ -67,7 +44,7 @@
############################################################-->
<!-- The current version of this RESOScript -->
<RESOScriptVersion>1.0.7</RESOScriptVersion>
<RESOScriptVersion>1.1.0</RESOScriptVersion>
<!--
@ -261,554 +238,334 @@
Requests Section - Queries used during testing,
DO NOT CHANGE
############################################################-->
<Requests>
<Requests>
<Request
TestDescription="Metadata Endpoint"
RequirementId="REQ-WA103-END3"
MetallicLevel="Core"
Capability="Core"
WebAPIReference=""
RequestId="REQ-WA103-END3"
OutputFile="REQ-WA103-END3.metadata.xml"
Url="*ClientSettings_WebAPIURI*/$metadata*Parameter_OptionalMetadataFormatParameter*"
/>
<Request
TestDescription="Data System"
RequirementId="REQ-WA103-END2"
MetallicLevel="Core"
Capability="Core Support"
WebAPIReference=""
RequestId="REQ-WA103-END2"
OutputFile="REQ-WA103-END2.datasystem.json"
Url="*Parameter_EndpointDataSystem*"
/>
<Request
TestDescription="Search Parameters: Select KeyOrKeyNumeric Field"
RequirementId="REQ-WA103-QR1"
MetallicLevel="Core"
Capability="Query functions"
WebAPIReference="2.4.1"
RequestId="REQ-WA103-QR1"
OutputFile="REQ-WA103-QR1.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*(*Parameter_KeyOrKeyNumericValue*)?$select=*Parameter_KeyOrKeyNumericField*"
/>
<Request
TestDescription="Query Support: $select"
RequirementId="REQ-WA103-QR3"
MetallicLevel="Core"
Capability="Query functions"
WebAPIReference="2.4.2"
RequestId="REQ-WA103-QR3"
OutputFile="REQ-WA103-QR3.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_FilterIntegerField* ne null and *Parameter_FilterIntegerField* gt *Parameter_FilterIntegerValueLow**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $top"
RequirementId="REQ-WA103-QR4"
MetallicLevel="Core"
Capability="Client paging ($top, $skip)"
WebAPIReference="2.4.2"
RequestId="REQ-WA103-QR4"
OutputFile="REQ-WA103-QR4.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_FilterIntegerField* ne null and *Parameter_FilterIntegerField* gt *Parameter_FilterIntegerValueLow**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $skip"
RequirementId="REQ-WA103-QR5"
MetallicLevel="Core"
Capability="Client pageability ($top, $skip)"
WebAPIReference="2.4.2"
RequestId="REQ-WA103-QR5"
OutputFile="REQ-WA103-QR5.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_FilterIntegerField* ne null and *Parameter_FilterIntegerField* gt *Parameter_FilterIntegerValueLow**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $select case-sensitivity. Expect 400 response on OData 4.0"
RequirementId="REQ-WA103-QO1.1"
MetallicLevel="Core"
Capability="Core"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO1.1"
OutputFile="REQ-WA103-QO1.1.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$SeLeCt=*Parameter_SelectList*&amp;$filter=*Parameter_FilterIntegerField* ne null and *Parameter_FilterIntegerField* eq *Parameter_FilterIntegerValueLow**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter case-sensitivity. Expect 400 response on OData 4.0"
RequirementId="REQ-WA103-QO1.2"
MetallicLevel="Core"
Capability="Core"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO1.2"
OutputFile="REQ-WA103-QO1.2.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$FiLtEr=*Parameter_FilterIntegerField* ne null and *Parameter_FilterIntegerField* eq *Parameter_FilterIntegerValueLow**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $orderby asc case-sensitivity. Expect 400 response on OData 4.0"
RequirementId="REQ-WA103-QO1.3"
MetallicLevel="Core"
Capability="Core"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO1.3"
OutputFile="REQ-WA103-QO1.3.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_SortCount*&amp;$select=*Parameter_FilterIntegerField*&amp;$filter=*Parameter_FilterIntegerField* ne null and *Parameter_FilterIntegerField* gt *Parameter_FilterIntegerValueLow**Parameter_RequiredParameters*&amp;$OrDeRbY=*Parameter_FilterIntegerField* asc"
/>
<Request
TestDescription="Query Support: $orderby desc case-sensitivity. Expect 400 response on OData 4.0"
RequirementId="REQ-WA103-QO1.4"
MetallicLevel="Core"
Capability="Core"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO1.4"
OutputFile="REQ-WA103-QO1.4.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_SortCount*&amp;$select=*Parameter_FilterIntegerField*&amp;$filter=*Parameter_FilterIntegerField* ne null and *Parameter_FilterIntegerField* gt *Parameter_FilterIntegerValueLow**Parameter_RequiredParameters*&amp;$oRdErBy=*Parameter_FilterIntegerField* desc"
/>
<Request
TestDescription="Query Support: $filter - Integer Comparison: eq (equal)"
RequirementId="REQ-WA103-QO2"
MetallicLevel="Core"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO2"
OutputFile="REQ-WA103-QO2"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_FilterIntegerField* ne null and *Parameter_FilterIntegerField* eq *Parameter_FilterIntegerValueLow**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter - Integer Comparison: ne (not equal)"
RequirementId="REQ-WA103-QO3"
MetallicLevel="Core"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO3"
OutputFile="REQ-WA103-QO3"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_FilterIntegerField* ne null and *Parameter_FilterIntegerField* ne null and *Parameter_FilterIntegerField* ne *Parameter_FilterIntegerValueLow**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter - Integer Comparison: gt (greater than)"
RequirementId="REQ-WA103-QO4"
MetallicLevel="Core"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO4"
OutputFile="REQ-WA103-QO4"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_FilterIntegerField* ne null and *Parameter_FilterIntegerField* gt *Parameter_FilterIntegerValueLow**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter - Integer Comparison: ge (greater or equal)"
RequirementId="REQ-WA103-QO5"
MetallicLevel="Core"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO5"
OutputFile="REQ-WA103-QO5.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_FilterIntegerField* ne null and *Parameter_FilterIntegerField* ge *Parameter_FilterIntegerValueLow**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter - Integer Comparison: lt (less than)"
RequirementId="REQ-WA103-QO6"
MetallicLevel="Core"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO6"
OutputFile="REQ-WA103-QO6.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_FilterIntegerField* ne null and *Parameter_FilterIntegerField* lt *Parameter_FilterIntegerValueLow**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter - Integer Comparison: le (less or equal)"
RequirementId="REQ-WA103-QO7"
MetallicLevel="Core"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO7"
OutputFile="REQ-WA103-QO7.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_FilterIntegerField* ne null and *Parameter_FilterIntegerField* le *Parameter_FilterIntegerValueLow**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter - Integer Comparison: and"
RequirementId="REQ-WA103-QO9"
MetallicLevel="Core"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO9"
OutputFile="REQ-WA103-QO9.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_FilterIntegerField* ne null and *Parameter_FilterIntegerField* gt *Parameter_FilterIntegerValueLow* and *Parameter_FilterIntegerField* lt *Parameter_FilterIntegerValueHigh**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter - Integer Comparison: or"
RequirementId="REQ-WA103-QO10"
MetallicLevel="Core"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO10"
OutputFile="REQ-WA103-QO10.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_FilterIntegerField* ne null and *Parameter_FilterIntegerField* gt *Parameter_FilterIntegerValueHigh* or *Parameter_FilterIntegerField* lt *Parameter_FilterIntegerValueLow**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter - Integer: not operator"
RequirementId="REQ-WA103-QO11"
MetallicLevel="Core"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO11"
OutputFile="REQ-WA103-QO11.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_FilterIntegerField* ne null and not(*Parameter_FilterNotField* le *Parameter_FilterNotValue*)*Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter: Date portion of EdmDateTimeOffset field is less than EdmDate value."
RequirementId="REQ-WA103-QO25"
MetallicLevel="Core"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO25"
OutputFile="REQ-WA103-QO25.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_TimestampField* ne null and date(*Parameter_TimestampField*) gt *Parameter_DateValue**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter: Time portion of EdmDateTimeOffset field is less than EdmTime value."
RequirementId="REQ-WA103-QO26"
MetallicLevel="Core"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO26"
OutputFile="REQ-WA103-QO26.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_TimestampField* ne null and time(*Parameter_TimestampField*) lt *Parameter_TimeValue**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter: Date: EdmDateTimeOffset field is less than EdmDateTimeOffset value."
RequirementId="REQ-WA103-QO26.2"
MetallicLevel="Core"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO26.2"
OutputFile="REQ-WA103-QO26.2.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_TimestampField* ne null and *Parameter_TimestampField* lt *Parameter_DateTimeValue**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter: DateTimeOffset le now()"
RequirementId="REQ-WA103-QO27"
MetallicLevel="Core"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO27"
OutputFile="REQ-WA103-QO27.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_TimestampField* ne null and *Parameter_TimestampField* le now()*Parameter_RequiredParameters*"
/>
<Request
TestDescription="Support Single Value Lookups"
RequirementId="REQ-WA103-QM7"
MetallicLevel="Bronze"
Capability="Query functions"
WebAPIReference="2.4.9"
RequestId="REQ-WA103-QM7"
OutputFile="REQ-WA103-QM7.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_KeyOrKeyNumericField*,*Parameter_SingleValueLookupField*&amp;$filter=*Parameter_SingleValueLookupField* ne null and *Parameter_SingleValueLookupField* has *Parameter_SingleValueLookupValue**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Support Multi Value Lookups"
RequirementId="REQ-WA103-QM8"
MetallicLevel="Bronze"
Capability="Query functions"
WebAPIReference="2.4.10"
RequestId="REQ-WA103-QM8"
OutputFile="REQ-WA103-QM8.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_KeyOrKeyNumericField*,*Parameter_MultipleValueLookupField*&amp;$filter=*Parameter_MultipleValueLookupField* ne null and *Parameter_MultipleValueLookupField* has *Parameter_MultipleValueLookupValue1**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Support Multi Value Lookups (2)"
RequirementId="REQ-WA103-QM8.2"
MetallicLevel="Bronze"
Capability="Query functions"
WebAPIReference="2.4.10"
RequestId="REQ-WA103-QM8.2"
OutputFile="REQ-WA103-QM8.2.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_KeyOrKeyNumericField*,*Parameter_MultipleValueLookupField*&amp;$filter=*Parameter_MultipleValueLookupField* ne null and *Parameter_MultipleValueLookupField* has *Parameter_MultipleValueLookupValue1* and *Parameter_MultipleValueLookupField* has *Parameter_MultipleValueLookupValue2**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter - Comparison: has"
RequirementId="REQ-WA103-QO8"
MetallicLevel="Bronze"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO8"
OutputFile="REQ-WA103-QO8.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_FilterHasField* ne null and *Parameter_FilterHasField* has *Parameter_FilterHasValueLookupValue**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $orderby asc filtered"
RequirementId="REQ-WA103-QO28.1"
MetallicLevel="Bronze"
Capability="Sortability ($orderby)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO28.1"
OutputFile="REQ-WA103-QO28.1.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_SortCount*&amp;$select=*Parameter_FilterIntegerField*,*Parameter_TimestampField*&amp;$orderby=*Parameter_TimestampField* asc&amp;$filter=*Parameter_FilterIntegerField* ne null and *Parameter_FilterIntegerField* gt *Parameter_FilterIntegerValueLow**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $orderby asc no filter"
RequirementId="REQ-WA103-QO28.2"
MetallicLevel="Bronze"
Capability="Sortability ($orderby)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO28.2"
OutputFile="REQ-WA103-QO28.2.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_SortCount*&amp;$select=*Parameter_FilterIntegerField*,*Parameter_TimestampField*&amp;$orderby=*Parameter_TimestampField* asc"
/>
<Request
TestDescription="Query Support: $orderby desc filtered"
RequirementId="REQ-WA103-QO28.3"
MetallicLevel="Bronze"
Capability="Sortability ($orderby)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO28.3"
OutputFile="REQ-WA103-QO28.3.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_SortCount*&amp;$select=*Parameter_FilterIntegerField*,*Parameter_TimestampField*&amp;$orderby=*Parameter_TimestampField* desc&amp;$filter=*Parameter_FilterIntegerField* ne null and *Parameter_FilterIntegerField* gt *Parameter_FilterIntegerValueLow**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $orderby desc no filter"
RequirementId="REQ-WA103-QO28.4"
MetallicLevel="Bronze"
Capability="Sortability ($orderby)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO28.4"
OutputFile="REQ-WA103-QO28.4.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_SortCount*&amp;$select=*Parameter_FilterIntegerField*,*Parameter_TimestampField*&amp;$orderby=*Parameter_TimestampField* desc"
/>
<Request
TestDescription="Query Support: $filter: Date: year"
RequirementId="REQ-WA103-QO18.1"
MetallicLevel="Gold"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO18.1"
OutputFile="REQ-WA103-QO18.1.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_DateField* ne null and year(*Parameter_DateField*) eq *Parameter_YearValue**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter: Time: year"
RequirementId="REQ-WA103-QO18.2"
MetallicLevel="Gold"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO18.2"
OutputFile="REQ-WA103-QO18.2.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_TimestampField* ne null and year(*Parameter_TimestampField*) eq *Parameter_YearValue**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter: Date: month"
RequirementId="REQ-WA103-QO19.1"
MetallicLevel="Gold"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO19.1"
OutputFile="REQ-WA103-QO19.1.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_DateField* ne null and month(*Parameter_DateField*) eq *Parameter_MonthValue**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter: Time: month"
RequirementId="REQ-WA103-QO19.2"
MetallicLevel="Gold"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO19.2"
OutputFile="REQ-WA103-QO19.2.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_TimestampField* ne null and month(*Parameter_TimestampField*) eq *Parameter_MonthValue**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter: Date: day"
RequirementId="REQ-WA103-QO20.1"
MetallicLevel="Gold"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO20.1"
OutputFile="REQ-WA103-QO20.1.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_DateField* ne null and day(*Parameter_DateField*) eq *Parameter_DayValue**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter: Time: day"
RequirementId="REQ-WA103-QO20.2"
MetallicLevel="Gold"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO20.2"
OutputFile="REQ-WA103-QO20.2.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_TimestampField* ne null and day(*Parameter_TimestampField*) eq *Parameter_DayValue**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter: Date: hour"
RequirementId="REQ-WA103-QO21"
MetallicLevel="Gold"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO21"
OutputFile="REQ-WA103-QO21.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_TimestampField* ne null and hour(*Parameter_TimestampField*) eq *Parameter_HourValue**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter: Date: minute"
RequirementId="REQ-WA103-QO22"
MetallicLevel="Gold"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO22"
OutputFile="REQ-WA103-QO22.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_TimestampField* ne null and minute(*Parameter_TimestampField*) gt *Parameter_MinuteValue**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter: Date: second"
RequirementId="REQ-WA103-QO23"
MetallicLevel="Gold"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO23"
OutputFile="REQ-WA103-QO23.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_TimestampField* ne null and second(*Parameter_TimestampField*) lt *Parameter_SecondValue**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter: Date: fractionalseconds"
RequirementId="REQ-WA103-QO24"
MetallicLevel="Gold"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO24"
OutputFile="REQ-WA103-QO24.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_TimestampField* ne null and fractionalseconds(*Parameter_TimestampField*) lt *Parameter_FractionalValue**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $expand"
RequirementId="REQ-WA103-QO29.1"
MetallicLevel="Platinum"
Capability="Expandability ($expand)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO29.1"
OutputFile="REQ-WA103-QO29.1.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*,*Parameter_ExpandField*&amp;$expand=*Parameter_ExpandField*"
/>
<Request
TestDescription="Query Support: $expand media photo count"
RequirementId="REQ-WA103-QO29.2"
MetallicLevel="Platinum"
Capability="Expandability ($expand)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO29.2"
OutputFile="REQ-WA103-QO29.2.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*,*Parameter_ExpandField*&amp;$expand=*Parameter_ExpandField*&amp;$filter=PhotosCount gt 0"
/>
<Request
TestDescription="Query Support: $expand required field"
RequirementId="REQ-WA103-QO29.3"
MetallicLevel="Platinum"
Capability="Expandability ($expand)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO29.3"
OutputFile="REQ-WA103-QO29.3.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*,*Parameter_ExpandField*&amp;$expand=*Parameter_ExpandField**Parameter_RequiredParametersFilter*"
/>
<Request
TestDescription="Support Literals: $any"
RequirementId="REQ-WA103-QM3"
MetallicLevel="Platinum"
Capability="Query functions"
WebAPIReference="2.4.6"
RequestId="REQ-WA103-QM3"
OutputFile="REQ-WA103-QM3.json"
Url="*ClientSettings_WebAPIURI*/$any?$top=1"
/>
<Request
TestDescription="Support Literals: $all"
RequirementId="REQ-WA103-QM4"
MetallicLevel="Platinum"
Capability="Query functions"
WebAPIReference="2.4.6"
RequestId="REQ-WA103-QM4"
OutputFile="REQ-WA103-QM4_All.json"
Url="*ClientSettings_WebAPIURI*/$all?$top=1"
/>
<Request
TestDescription="Support GeoSpatial Search Implementation"
RequirementId="REQ-WA103-QM5.1"
MetallicLevel="Platinum"
Capability="Query functions"
WebAPIReference="2.4.7"
RequestId="REQ-WA103-QM5.1"
OutputFile="REQ-WA103-QM5_GeoSpatialLongLat_PointGeo.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=geo.distance(*Parameter_GeoSpatialField*, geography'SRID=*Parameter_SRID*;POINT(*Parameter_GeoSpatialValue*)' le *Parameter_GeoSpatialDistanceValue*"
/>
<Request
TestDescription="Support GeoSpatial Search Implementation"
RequirementId="REQ-WA103-QM5.2"
MetallicLevel="Platinum"
Capability="Query functions"
WebAPIReference="2.4.7"
RequestId="REQ-WA103-QM5.2"
OutputFile="REQ-WA103-QM5_GeoSpatialLongLat_LatGT1_PointGeo.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=geo.distance(*Parameter_GeoSpatialField*, geography'SRID=*Parameter_SRID*;POINT(*Parameter_GeoSpatialValue*)' le *Parameter_GeoSpatialDistanceValue* and *Parameter_GeoSpatialLatitudeField* gt 1"
/>
<Request
TestDescription="Query Support: $filter - Grouping: ()"
RequirementId="REQ-WA103-QO12"
MetallicLevel="Platinum"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO12"
OutputFile="REQ-WA103-QO12_Grouping.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_FilterIntegerField* ne null and (*Parameter_FilterIntegerField* ge *Parameter_FilterIntegerValueLow* and *Parameter_FilterIntegerField* le *Parameter_FilterIntegerValueHigh*) and (*Parameter_FilterIntegerField* lt *Parameter_FilterIntegerValueHigh* and *Parameter_FilterIntegerField* gt *Parameter_FilterIntegerValueLow*)*Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter - String: contains"
RequirementId="REQ-WA103-QO13"
MetallicLevel="Platinum"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO13"
OutputFile="REQ-WA103-QO13.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_ContainsField* ne null and contains(*Parameter_ContainsField*,'*Parameter_ContainsValue*')*Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter - String: endswith"
RequirementId="REQ-WA103-QO14"
MetallicLevel="Platinum"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO14"
OutputFile="REQ-WA103-QO14_EndsWith.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_EndsWithField* ne null and endswith(*Parameter_EndsWithField*,'*Parameter_EndsWithValue*')*Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter - String: startswith"
RequirementId="REQ-WA103-QO15"
MetallicLevel="Platinum"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO15"
OutputFile="REQ-WA103-QO15_StartsWith.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_StartsWithField* ne null and startswith(*Parameter_StartsWithField*,'*Parameter_StartsWithValue*')*Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter - String: tolower"
RequirementId="REQ-WA103-QO16"
MetallicLevel="Platinum"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO16"
OutputFile="REQ-WA103-QO16_ToLowerEQ.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_ToLowerField* ne null and tolower(*Parameter_ToLowerField*) eq '*Parameter_ToLowerValue*'*Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter - String: toupper"
RequirementId="REQ-WA103-QO17"
MetallicLevel="Platinum"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO17"
OutputFile="REQ-WA103-QO17_ToUpperEQ.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_ToUpperField* ne null and toupper(*Parameter_ToUpperField*) eq '*Parameter_ToUpperValue*'*Parameter_RequiredParameters*"
/>
<Request
TestDescription="Service Endpoint"
RequirementId="REQ-WA103-END1"
MetallicLevel="Core"
Capability="Core"
WebAPIReference=""
RequestId="REQ-WA103-END1"
OutputFile="REQ-WA103-END1_Service.json"
Url="*ClientSettings_WebAPIURI*/"
/>
@ -816,51 +573,31 @@
<!-- RESPONSE CODE SUPPORT -->
<Request
TestDescription="200 OK Request"
RequirementId="REQ-WA103-RC3"
MetallicLevel="Core"
Capability="Core"
WebAPIReference="2.5.2"
RequestId="REQ-WA103-RC3"
OutputFile="REQ-WA103-RC05_200OKRequest.json"
Url="ClientSettings_WebAPIURI*/*Parameter_200_OK*"
/>
<Request
TestDescription="400 Bad Request"
RequirementId="REQ-WA103-RC5"
MetallicLevel="Core"
Capability="Core"
WebAPIReference="2.5.2"
RequestId="REQ-WA103-RC5"
OutputFile="REQ-WA103-RC05_400BadRequest.json"
Url="ClientSettings_WebAPIURI*/*Parameter_400BadRequest*"
/>
<Request
TestDescription="403 Forbidden Request"
RequirementId="REQ-WA103-RC06"
MetallicLevel="Core"
Capability="Core"
WebAPIReference="2.5.2"
RequestId="REQ-WA103-RC06"
OutputFile="REQ-WA103-RC06_403Forbidden_Generic.json"
Url="ClientSettings_WebAPIURI*/*Parameter_403Forbidden*"
/>
<Request
TestDescription="404 Not Found Request"
RequirementId="REQ-WA103-RC07"
MetallicLevel="Core"
Capability="Core"
WebAPIReference="2.5.2"
RequestId="REQ-WA103-RC07"
OutputFile="REQ-WA103-RC07_404NotFound.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_404NotFound*"
/>
<Request
TestDescription="501 Not Implemented Request"
RequirementId="REQ-WA103-RC11"
MetallicLevel="Core"
Capability="Core"
WebAPIReference="2.5.2"
RequestId="REQ-WA103-RC11"
OutputFile="REQ-WA103-RC11_501NotImplemented.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_501NotImplemented*"
/>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<!--
<!--
>>> To be used as a template for Web API Server 1.0.2 Platinum Certification <<<
NOTES:
@ -12,15 +12,10 @@
Contact josh@reso.org with further questions.
-->
<!--
############################################################
XML DTD - Must come first
############################################################-->
<!DOCTYPE OutputScript [
<!ELEMENT OutputScript (RESOScriptVersion|ClientSettings|Parameters|Requests)*>
<!ELEMENT RESOScriptVersion (#PCDATA)>
<!ELEMENT ClientSettings
(RESOScriptVersion|WebAPIURI|AuthenticationType|BearerToken|ClientIdentification|ClientSecret|TokenURI|ClientScope)*>
<!ELEMENT ClientSettings (WebAPIURI|AuthenticationType|BearerToken|ClientIdentification|ClientSecret|TokenURI|ClientScope)*>
<!ELEMENT WebAPIURI (#PCDATA)>
<!ELEMENT AuthenticationType (#PCDATA)>
<!ELEMENT BearerToken (#PCDATA)>
@ -36,29 +31,11 @@
<!ELEMENT Requests (Request)*>
<!ELEMENT Request (#PCDATA)>
<!ATTLIST Request
Capability CDATA #REQUIRED
MetallicLevel CDATA #REQUIRED
OutputFile CDATA #REQUIRED
RequirementId CDATA #REQUIRED
TestDescription CDATA #REQUIRED
Url CDATA #REQUIRED
WebAPIReference CDATA #REQUIRED>
RequestId CDATA #REQUIRED
Url CDATA #REQUIRED>
]>
<!--
############################################################
TODO: this document will be updated with language
matching the OAuth 2.0 Specification and ClientSettings
will be removed.
See:
https://tools.ietf.org/html/rfc8252
Watch for subsequent changes to this file.
ClientSettings will be converted to Parameters forthwith.
############################################################-->
<OutputScript>
<!--
@ -67,7 +44,7 @@
############################################################-->
<!-- The current version of this RESOScript -->
<RESOScriptVersion>1.0.7</RESOScriptVersion>
<RESOScriptVersion>1.1.0</RESOScriptVersion>
<!--
@ -312,551 +289,331 @@
<Requests>
<Request
TestDescription="Metadata Endpoint"
RequirementId="REQ-WA103-END3"
MetallicLevel="Core"
Capability="Core"
WebAPIReference=""
RequestId="REQ-WA103-END3"
OutputFile="REQ-WA103-END3.metadata.xml"
Url="*ClientSettings_WebAPIURI*/$metadata*Parameter_OptionalMetadataFormatParameter*"
/>
<Request
TestDescription="Data System"
RequirementId="REQ-WA103-END2"
MetallicLevel="Core"
Capability="Core Support"
WebAPIReference=""
RequestId="REQ-WA103-END2"
OutputFile="REQ-WA103-END2.datasystem.json"
Url="*Parameter_EndpointDataSystem*"
/>
<Request
TestDescription="Search Parameters: Select KeyOrKeyNumeric Field"
RequirementId="REQ-WA103-QR1"
MetallicLevel="Core"
Capability="Query functions"
WebAPIReference="2.4.1"
RequestId="REQ-WA103-QR1"
OutputFile="REQ-WA103-QR1.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*(*Parameter_KeyOrKeyNumericValue*)?$select=*Parameter_KeyOrKeyNumericField*"
/>
<Request
TestDescription="Query Support: $select"
RequirementId="REQ-WA103-QR3"
MetallicLevel="Core"
Capability="Query functions"
WebAPIReference="2.4.2"
RequestId="REQ-WA103-QR3"
OutputFile="REQ-WA103-QR3.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_FilterIntegerField* ne null and *Parameter_FilterIntegerField* gt *Parameter_FilterIntegerValueLow**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $top"
RequirementId="REQ-WA103-QR4"
MetallicLevel="Core"
Capability="Client paging ($top, $skip)"
WebAPIReference="2.4.2"
RequestId="REQ-WA103-QR4"
OutputFile="REQ-WA103-QR4.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_FilterIntegerField* ne null and *Parameter_FilterIntegerField* gt *Parameter_FilterIntegerValueLow**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $skip"
RequirementId="REQ-WA103-QR5"
MetallicLevel="Core"
Capability="Client pageability ($top, $skip)"
WebAPIReference="2.4.2"
RequestId="REQ-WA103-QR5"
OutputFile="REQ-WA103-QR5.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_FilterIntegerField* ne null and *Parameter_FilterIntegerField* gt *Parameter_FilterIntegerValueLow**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $select case-sensitivity. Expect 400 response on OData 4.0"
RequirementId="REQ-WA103-QO1.1"
MetallicLevel="Core"
Capability="Core"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO1.1"
OutputFile="REQ-WA103-QO1.1.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$SeLeCt=*Parameter_SelectList*&amp;$filter=*Parameter_FilterIntegerField* ne null and *Parameter_FilterIntegerField* eq *Parameter_FilterIntegerValueLow**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter case-sensitivity. Expect 400 response on OData 4.0"
RequirementId="REQ-WA103-QO1.2"
MetallicLevel="Core"
Capability="Core"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO1.2"
OutputFile="REQ-WA103-QO1.2.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$FiLtEr=*Parameter_FilterIntegerField* ne null and *Parameter_FilterIntegerField* eq *Parameter_FilterIntegerValueLow**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $orderby asc case-sensitivity. Expect 400 response on OData 4.0"
RequirementId="REQ-WA103-QO1.3"
MetallicLevel="Core"
Capability="Core"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO1.3"
OutputFile="REQ-WA103-QO1.3.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_SortCount*&amp;$select=*Parameter_FilterIntegerField*&amp;$filter=*Parameter_FilterIntegerField* ne null and *Parameter_FilterIntegerField* gt *Parameter_FilterIntegerValueLow**Parameter_RequiredParameters*&amp;$OrDeRbY=*Parameter_FilterIntegerField* asc"
/>
<Request
TestDescription="Query Support: $orderby desc case-sensitivity. Expect 400 response on OData 4.0"
RequirementId="REQ-WA103-QO1.4"
MetallicLevel="Core"
Capability="Core"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO1.4"
OutputFile="REQ-WA103-QO1.4.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_SortCount*&amp;$select=*Parameter_FilterIntegerField*&amp;$filter=*Parameter_FilterIntegerField* ne null and *Parameter_FilterIntegerField* gt *Parameter_FilterIntegerValueLow**Parameter_RequiredParameters*&amp;$oRdErBy=*Parameter_FilterIntegerField* desc"
/>
<Request
TestDescription="Query Support: $filter - Integer Comparison: eq (equal)"
RequirementId="REQ-WA103-QO2"
MetallicLevel="Core"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO2"
OutputFile="REQ-WA103-QO2"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_FilterIntegerField* ne null and *Parameter_FilterIntegerField* eq *Parameter_FilterIntegerValueLow**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter - Integer Comparison: ne (not equal)"
RequirementId="REQ-WA103-QO3"
MetallicLevel="Core"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO3"
OutputFile="REQ-WA103-QO3"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_FilterIntegerField* ne null and *Parameter_FilterIntegerField* ne null and *Parameter_FilterIntegerField* ne *Parameter_FilterIntegerValueLow**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter - Integer Comparison: gt (greater than)"
RequirementId="REQ-WA103-QO4"
MetallicLevel="Core"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO4"
OutputFile="REQ-WA103-QO4"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_FilterIntegerField* ne null and *Parameter_FilterIntegerField* gt *Parameter_FilterIntegerValueLow**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter - Integer Comparison: ge (greater or equal)"
RequirementId="REQ-WA103-QO5"
MetallicLevel="Core"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO5"
OutputFile="REQ-WA103-QO5.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_FilterIntegerField* ne null and *Parameter_FilterIntegerField* ge *Parameter_FilterIntegerValueLow**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter - Integer Comparison: lt (less than)"
RequirementId="REQ-WA103-QO6"
MetallicLevel="Core"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO6"
OutputFile="REQ-WA103-QO6.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_FilterIntegerField* ne null and *Parameter_FilterIntegerField* lt *Parameter_FilterIntegerValueLow**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter - Integer Comparison: le (less or equal)"
RequirementId="REQ-WA103-QO7"
MetallicLevel="Core"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO7"
OutputFile="REQ-WA103-QO7.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_FilterIntegerField* ne null and *Parameter_FilterIntegerField* le *Parameter_FilterIntegerValueLow**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter - Integer Comparison: and"
RequirementId="REQ-WA103-QO9"
MetallicLevel="Core"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO9"
OutputFile="REQ-WA103-QO9.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_FilterIntegerField* ne null and *Parameter_FilterIntegerField* gt *Parameter_FilterIntegerValueLow* and *Parameter_FilterIntegerField* lt *Parameter_FilterIntegerValueHigh**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter - Integer Comparison: or"
RequirementId="REQ-WA103-QO10"
MetallicLevel="Core"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO10"
OutputFile="REQ-WA103-QO10.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_FilterIntegerField* ne null and *Parameter_FilterIntegerField* gt *Parameter_FilterIntegerValueHigh* or *Parameter_FilterIntegerField* lt *Parameter_FilterIntegerValueLow**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter - Integer: not operator"
RequirementId="REQ-WA103-QO11"
MetallicLevel="Core"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO11"
OutputFile="REQ-WA103-QO11.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_FilterIntegerField* ne null and not(*Parameter_FilterNotField* le *Parameter_FilterNotValue*)*Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter: Date portion of EdmDateTimeOffset field is less than EdmDate value."
RequirementId="REQ-WA103-QO25"
MetallicLevel="Core"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO25"
OutputFile="REQ-WA103-QO25.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_TimestampField* ne null and date(*Parameter_TimestampField*) gt *Parameter_DateValue**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter: Time portion of EdmDateTimeOffset field is less than EdmTime value."
RequirementId="REQ-WA103-QO26"
MetallicLevel="Core"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO26"
OutputFile="REQ-WA103-QO26.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_TimestampField* ne null and time(*Parameter_TimestampField*) lt *Parameter_TimeValue**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter: Date: EdmDateTimeOffset field is less than EdmDateTimeOffset value."
RequirementId="REQ-WA103-QO26.2"
MetallicLevel="Core"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO26.2"
OutputFile="REQ-WA103-QO26.2.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_TimestampField* ne null and *Parameter_TimestampField* lt *Parameter_DateTimeValue**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter: DateTimeOffset le now()"
RequirementId="REQ-WA103-QO27"
MetallicLevel="Core"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO27"
OutputFile="REQ-WA103-QO27.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_TimestampField* ne null and *Parameter_TimestampField* le now()*Parameter_RequiredParameters*"
/>
<Request
TestDescription="Support Single Value Lookups"
RequirementId="REQ-WA103-QM7"
MetallicLevel="Bronze"
Capability="Query functions"
WebAPIReference="2.4.9"
RequestId="REQ-WA103-QM7"
OutputFile="REQ-WA103-QM7.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_KeyOrKeyNumericField*,*Parameter_SingleValueLookupField*&amp;$filter=*Parameter_SingleValueLookupField* ne null and *Parameter_SingleValueLookupField* has *Parameter_SingleValueLookupValue**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Support Multi Value Lookups"
RequirementId="REQ-WA103-QM8"
MetallicLevel="Bronze"
Capability="Query functions"
WebAPIReference="2.4.10"
RequestId="REQ-WA103-QM8"
OutputFile="REQ-WA103-QM8.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_KeyOrKeyNumericField*,*Parameter_MultipleValueLookupField*&amp;$filter=*Parameter_MultipleValueLookupField* ne null and *Parameter_MultipleValueLookupField* has *Parameter_MultipleValueLookupValue1**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Support Multi Value Lookups (2)"
RequirementId="REQ-WA103-QM8.2"
MetallicLevel="Bronze"
Capability="Query functions"
WebAPIReference="2.4.10"
RequestId="REQ-WA103-QM8.2"
OutputFile="REQ-WA103-QM8.2.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_KeyOrKeyNumericField*,*Parameter_MultipleValueLookupField*&amp;$filter=*Parameter_MultipleValueLookupField* ne null and *Parameter_MultipleValueLookupField* has *Parameter_MultipleValueLookupValue1* and *Parameter_MultipleValueLookupField* has *Parameter_MultipleValueLookupValue2**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter - Comparison: has"
RequirementId="REQ-WA103-QO8"
MetallicLevel="Bronze"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO8"
OutputFile="REQ-WA103-QO8.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_FilterHasField* ne null and *Parameter_FilterHasField* has *Parameter_FilterHasValueLookupValue**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $orderby asc filtered"
RequirementId="REQ-WA103-QO28.1"
MetallicLevel="Bronze"
Capability="Sortability ($orderby)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO28.1"
OutputFile="REQ-WA103-QO28.1.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_SortCount*&amp;$select=*Parameter_FilterIntegerField*,*Parameter_TimestampField*&amp;$orderby=*Parameter_TimestampField* asc&amp;$filter=*Parameter_FilterIntegerField* ne null and *Parameter_FilterIntegerField* gt *Parameter_FilterIntegerValueLow**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $orderby asc no filter"
RequirementId="REQ-WA103-QO28.2"
MetallicLevel="Bronze"
Capability="Sortability ($orderby)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO28.2"
OutputFile="REQ-WA103-QO28.2.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_SortCount*&amp;$select=*Parameter_FilterIntegerField*,*Parameter_TimestampField*&amp;$orderby=*Parameter_TimestampField* asc"
/>
<Request
TestDescription="Query Support: $orderby desc filtered"
RequirementId="REQ-WA103-QO28.3"
MetallicLevel="Bronze"
Capability="Sortability ($orderby)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO28.3"
OutputFile="REQ-WA103-QO28.3.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_SortCount*&amp;$select=*Parameter_FilterIntegerField*,*Parameter_TimestampField*&amp;$orderby=*Parameter_TimestampField* desc&amp;$filter=*Parameter_FilterIntegerField* ne null and *Parameter_FilterIntegerField* gt *Parameter_FilterIntegerValueLow**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $orderby desc no filter"
RequirementId="REQ-WA103-QO28.4"
MetallicLevel="Bronze"
Capability="Sortability ($orderby)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO28.4"
OutputFile="REQ-WA103-QO28.4.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_SortCount*&amp;$select=*Parameter_FilterIntegerField*,*Parameter_TimestampField*&amp;$orderby=*Parameter_TimestampField* desc"
/>
<Request
TestDescription="Query Support: $filter: Date: year"
RequirementId="REQ-WA103-QO18.1"
MetallicLevel="Gold"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO18.1"
OutputFile="REQ-WA103-QO18.1.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_DateField* ne null and year(*Parameter_DateField*) eq *Parameter_YearValue**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter: Time: year"
RequirementId="REQ-WA103-QO18.2"
MetallicLevel="Gold"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO18.2"
OutputFile="REQ-WA103-QO18.2.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_TimestampField* ne null and year(*Parameter_TimestampField*) eq *Parameter_YearValue**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter: Date: month"
RequirementId="REQ-WA103-QO19.1"
MetallicLevel="Gold"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO19.1"
OutputFile="REQ-WA103-QO19.1.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_DateField* ne null and month(*Parameter_DateField*) eq *Parameter_MonthValue**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter: Time: month"
RequirementId="REQ-WA103-QO19.2"
MetallicLevel="Gold"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO19.2"
OutputFile="REQ-WA103-QO19.2.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_TimestampField* ne null and month(*Parameter_TimestampField*) eq *Parameter_MonthValue**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter: Date: day"
RequirementId="REQ-WA103-QO20.1"
MetallicLevel="Gold"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO20.1"
OutputFile="REQ-WA103-QO20.1.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_DateField* ne null and day(*Parameter_DateField*) eq *Parameter_DayValue**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter: Time: day"
RequirementId="REQ-WA103-QO20.2"
MetallicLevel="Gold"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO20.2"
OutputFile="REQ-WA103-QO20.2.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_TimestampField* ne null and day(*Parameter_TimestampField*) eq *Parameter_DayValue**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter: Date: hour"
RequirementId="REQ-WA103-QO21"
MetallicLevel="Gold"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO21"
OutputFile="REQ-WA103-QO21.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_TimestampField* ne null and hour(*Parameter_TimestampField*) eq *Parameter_HourValue**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter: Date: minute"
RequirementId="REQ-WA103-QO22"
MetallicLevel="Gold"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO22"
OutputFile="REQ-WA103-QO22.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_TimestampField* ne null and minute(*Parameter_TimestampField*) gt *Parameter_MinuteValue**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter: Date: second"
RequirementId="REQ-WA103-QO23"
MetallicLevel="Gold"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO23"
OutputFile="REQ-WA103-QO23.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_TimestampField* ne null and second(*Parameter_TimestampField*) lt *Parameter_SecondValue**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter: Date: fractionalseconds"
RequirementId="REQ-WA103-QO24"
MetallicLevel="Gold"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO24"
OutputFile="REQ-WA103-QO24.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_TimestampField* ne null and fractionalseconds(*Parameter_TimestampField*) lt *Parameter_FractionalValue**Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $expand"
RequirementId="REQ-WA103-QO29.1"
MetallicLevel="Platinum"
Capability="Expandability ($expand)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO29.1"
OutputFile="REQ-WA103-QO29.1.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*,*Parameter_ExpandField*&amp;$expand=*Parameter_ExpandField*"
/>
<Request
TestDescription="Query Support: $expand media photo count"
RequirementId="REQ-WA103-QO29.2"
MetallicLevel="Platinum"
Capability="Expandability ($expand)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO29.2"
OutputFile="REQ-WA103-QO29.2.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*,*Parameter_ExpandField*&amp;$expand=*Parameter_ExpandField*&amp;$filter=PhotosCount gt 0"
/>
<Request
TestDescription="Query Support: $expand required field"
RequirementId="REQ-WA103-QO29.3"
MetallicLevel="Platinum"
Capability="Expandability ($expand)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO29.3"
OutputFile="REQ-WA103-QO29.3.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*,*Parameter_ExpandField*&amp;$expand=*Parameter_ExpandField**Parameter_RequiredParametersFilter*"
/>
<Request
TestDescription="Support Literals: $any"
RequirementId="REQ-WA103-QM3"
MetallicLevel="Platinum"
Capability="Query functions"
WebAPIReference="2.4.6"
RequestId="REQ-WA103-QM3"
OutputFile="REQ-WA103-QM3.json"
Url="*ClientSettings_WebAPIURI*/$any?$top=1"
/>
<Request
TestDescription="Support Literals: $all"
RequirementId="REQ-WA103-QM4"
MetallicLevel="Platinum"
Capability="Query functions"
WebAPIReference="2.4.6"
RequestId="REQ-WA103-QM4"
OutputFile="REQ-WA103-QM4_All.json"
Url="*ClientSettings_WebAPIURI*/$all?$top=1"
/>
<Request
TestDescription="Support GeoSpatial Search Implementation"
RequirementId="REQ-WA103-QM5.1"
MetallicLevel="Platinum"
Capability="Query functions"
WebAPIReference="2.4.7"
RequestId="REQ-WA103-QM5.1"
OutputFile="REQ-WA103-QM5_GeoSpatialLongLat_PointGeo.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=geo.distance(*Parameter_GeoSpatialField*, geography'SRID=*Parameter_SRID*;POINT(*Parameter_GeoSpatialValue*)' le *Parameter_GeoSpatialDistanceValue*"
/>
<Request
TestDescription="Support GeoSpatial Search Implementation"
RequirementId="REQ-WA103-QM5.2"
MetallicLevel="Platinum"
Capability="Query functions"
WebAPIReference="2.4.7"
RequestId="REQ-WA103-QM5.2"
OutputFile="REQ-WA103-QM5_GeoSpatialLongLat_LatGT1_PointGeo.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=geo.distance(*Parameter_GeoSpatialField*, geography'SRID=*Parameter_SRID*;POINT(*Parameter_GeoSpatialValue*)' le *Parameter_GeoSpatialDistanceValue* and *Parameter_GeoSpatialLatitudeField* gt 1"
/>
<Request
TestDescription="Query Support: $filter - Grouping: ()"
RequirementId="REQ-WA103-QO12"
MetallicLevel="Platinum"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO12"
OutputFile="REQ-WA103-QO12_Grouping.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_FilterIntegerField* ne null and (*Parameter_FilterIntegerField* ge *Parameter_FilterIntegerValueLow* and *Parameter_FilterIntegerField* le *Parameter_FilterIntegerValueHigh*) and (*Parameter_FilterIntegerField* lt *Parameter_FilterIntegerValueHigh* and *Parameter_FilterIntegerField* gt *Parameter_FilterIntegerValueLow*)*Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter - String: contains"
RequirementId="REQ-WA103-QO13"
MetallicLevel="Platinum"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO13"
OutputFile="REQ-WA103-QO13.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_ContainsField* ne null and contains(*Parameter_ContainsField*,'*Parameter_ContainsValue*')*Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter - String: endswith"
RequirementId="REQ-WA103-QO14"
MetallicLevel="Platinum"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO14"
OutputFile="REQ-WA103-QO14_EndsWith.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_EndsWithField* ne null and endswith(*Parameter_EndsWithField*,'*Parameter_EndsWithValue*')*Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter - String: startswith"
RequirementId="REQ-WA103-QO15"
MetallicLevel="Platinum"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO15"
OutputFile="REQ-WA103-QO15_StartsWith.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_StartsWithField* ne null and startswith(*Parameter_StartsWithField*,'*Parameter_StartsWithValue*')*Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter - String: tolower"
RequirementId="REQ-WA103-QO16"
MetallicLevel="Platinum"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO16"
OutputFile="REQ-WA103-QO16_ToLowerEQ.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_ToLowerField* ne null and tolower(*Parameter_ToLowerField*) eq '*Parameter_ToLowerValue*'*Parameter_RequiredParameters*"
/>
<Request
TestDescription="Query Support: $filter - String: toupper"
RequirementId="REQ-WA103-QO17"
MetallicLevel="Platinum"
Capability="Filterability ($filter)"
WebAPIReference="2.4.4"
RequestId="REQ-WA103-QO17"
OutputFile="REQ-WA103-QO17_ToUpperEQ.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_EndpointResource*?$top=*Parameter_TopCount*&amp;$select=*Parameter_SelectList*&amp;$filter=*Parameter_ToUpperField* ne null and toupper(*Parameter_ToUpperField*) eq '*Parameter_ToUpperValue*'*Parameter_RequiredParameters*"
/>
<Request
TestDescription="Service Endpoint"
RequirementId="REQ-WA103-END1"
MetallicLevel="Core"
Capability="Core"
WebAPIReference=""
RequestId="REQ-WA103-END1"
OutputFile="REQ-WA103-END1_Service.json"
Url="*ClientSettings_WebAPIURI*/"
/>
@ -864,51 +621,31 @@
<!-- RESPONSE CODE SUPPORT -->
<Request
TestDescription="200 OK Request"
RequirementId="REQ-WA103-RC3"
MetallicLevel="Core"
Capability="Core"
WebAPIReference="2.5.2"
RequestId="REQ-WA103-RC3"
OutputFile="REQ-WA103-RC05_200OKRequest.json"
Url="ClientSettings_WebAPIURI*/*Parameter_200_OK*"
/>
<Request
TestDescription="400 Bad Request"
RequirementId="REQ-WA103-RC5"
MetallicLevel="Core"
Capability="Core"
WebAPIReference="2.5.2"
RequestId="REQ-WA103-RC5"
OutputFile="REQ-WA103-RC05_400BadRequest.json"
Url="ClientSettings_WebAPIURI*/*Parameter_400BadRequest*"
/>
<Request
TestDescription="403 Forbidden Request"
RequirementId="REQ-WA103-RC06"
MetallicLevel="Core"
Capability="Core"
WebAPIReference="2.5.2"
RequestId="REQ-WA103-RC06"
OutputFile="REQ-WA103-RC06_403Forbidden_Generic.json"
Url="ClientSettings_WebAPIURI*/*Parameter_403Forbidden*"
/>
<Request
TestDescription="404 Not Found Request"
RequirementId="REQ-WA103-RC07"
MetallicLevel="Core"
Capability="Core"
WebAPIReference="2.5.2"
RequestId="REQ-WA103-RC07"
OutputFile="REQ-WA103-RC07_404NotFound.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_404NotFound*"
/>
<Request
TestDescription="501 Not Implemented Request"
RequirementId="REQ-WA103-RC11"
MetallicLevel="Core"
Capability="Core"
WebAPIReference="2.5.2"
RequestId="REQ-WA103-RC11"
OutputFile="REQ-WA103-RC11_501NotImplemented.json"
Url="*ClientSettings_WebAPIURI*/*Parameter_501NotImplemented*"
/>

View File

@ -440,43 +440,43 @@ Feature: Web API Server 1.0.2 Certification
And an OData NavigationProperty exists for the given "Parameter_EndpointResource"
And the expanded data were found in the related resource
@REQ-WA103-QO29.2 @platinum @2.4.4 @expandability-endorsement
Scenario: REQ-WA103-QO29.2 - Query Support: $expand media photo count
@REQ-WA103-QO29.2 @platinum @2.4.4 @expandability-endorsement @todo
Scenario: REQ-WA103-QO29.2 - Query Support: $expand media photo count (TODO)
When a GET request is made to the resolved Url in "REQ-WA103-QO29.2"
Then the server responds with a status code of 200
And the response is valid JSON
And the response has results
@REQ-WA103-QO29.3 @platinum @2.4.4 @expandability-endorsement
Scenario: REQ-WA103-QO29.3 - Query Support: $expand required field
@REQ-WA103-QO29.3 @platinum @2.4.4 @expandability-endorsement @todo
Scenario: REQ-WA103-QO29.3 - Query Support: $expand required field (TODO)
When a GET request is made to the resolved Url in "REQ-WA103-QO29.3"
Then the server responds with a status code of 200
And the response is valid JSON
And the response has results
@REQ-WA103-QM3 @platinum @2.4.6 @queryability-endorsement @deprecated
Scenario: REQ-WA103-QM3 - Support Literals: $any
@REQ-WA103-QM3 @platinum @2.4.6 @queryability-endorsement @todo
Scenario: REQ-WA103-QM3 - Support Literals: any() Lambda Expression (TODO)
When a GET request is made to the resolved Url in "REQ-WA103-QM3"
Then the server responds with a status code of 200
And the response is valid JSON
And the response has results
@REQ-WA103-QM4 @platinum @2.4.6 @queryability-endorsement
Scenario: REQ-WA103-QM4 - Query Support Literals: $all
@REQ-WA103-QM4 @platinum @2.4.6 @queryability-endorsement @todo
Scenario: REQ-WA103-QM4 - Query Support Literals: all() Lambda Operator (TODO)
When a GET request is made to the resolved Url in "REQ-WA103-QM4"
Then the server responds with a status code of 200
And the response is valid JSON
And the response has results
@REQ-WA103-QM5.1 @platinum @2.4.7 @queryability-endorsement @geospatial
Scenario: REQ-WA103-QM5.1 - Query Support: GeoSpatial Search Implementation
@REQ-WA103-QM5.1 @platinum @2.4.7 @queryability-endorsement @geospatial @todo
Scenario: REQ-WA103-QM5.1 - Query Support: GeoSpatial Search Implementation (TODO)
When a GET request is made to the resolved Url in "REQ-WA103-QM5.1"
Then the server responds with a status code of 200
And the response is valid JSON
And the response has results
@REQ-WA103-QM5.2 @platinum @2.4.7 @queryability-endorsement @geospatial
Scenario: REQ-WA103-QM5.2 - Query Support: GeoSpatial Search Implementation
@REQ-WA103-QM5.2 @platinum @2.4.7 @queryability-endorsement @geospatial @todo
Scenario: REQ-WA103-QM5.2 - Query Support: GeoSpatial Search Implementation (TODO)
When a GET request is made to the resolved Url in "REQ-WA103-QM5.2"
Then the server responds with a status code of 200
And the response is valid JSON

View File

@ -403,7 +403,8 @@ public class WebAPIServer_1_0_2 implements En {
initialResponseData.set(responseData.get());
//TODO: convert to OData filter factory
requestUri.set(Commander.prepareURI(Settings.resolveParameters(settings.getRequests().get(requirementId), settings).getUrl() + "&$skip=" + skipCount));
requestUri.set(Commander.prepareURI(Settings.resolveParameters(settings.getRequestById(requirementId), settings).getUrl()
+ "&" + Commander.ODATA_QUERY_OPTIONS.SKIP +"=" + skipCount));
executeGetRequest.apply(requestUri.get());
} catch (Exception ex) {
fail(ex.getMessage());
@ -437,13 +438,13 @@ public class WebAPIServer_1_0_2 implements En {
/*
* GET request by requirementId (see generic.resoscript)
*/
When("^a GET request is made to the resolved Url in \"([^\"]*)\"$", (String requirementId) -> {
When("^a GET request is made to the resolved Url in \"([^\"]*)\"$", (String requestId) -> {
try {
//reset local state each time a get request is run
resetRequestState.run();
LOG.info("RequirementId: " + requirementId);
requestUri.set(Commander.prepareURI(Settings.resolveParameters(settings.getRequests().get(requirementId), settings).getUrl()));
LOG.info("Request ID: " + requestId);
requestUri.set(Commander.prepareURI(Settings.resolveParameters(settings.getRequestById(requestId), settings).getUrl()));
executeGetRequest.apply(requestUri.get());
} catch (Exception ex) {
LOG.debug("Exception was thrown in " + this.getClass() + ": " + ex.toString());
@ -1054,11 +1055,11 @@ public class WebAPIServer_1_0_2 implements En {
});
When("^a GET request is made to the resolved Url in \"([^\"]*)\" using the OData Client$", (String parameterRequirementId) -> {
String uriString = Settings.resolveParameters(settings.getRequests().get(parameterRequirementId), settings).getUrl();
assertTrue("ERROR: the resolved Url in '" + parameterRequirementId + "' was invalid!", uriString != null && uriString.length() > 0);
When("^a GET request is made to the resolved Url in \"([^\"]*)\" using the OData Client$", (String parameterRequestId) -> {
String uriString = Settings.resolveParameters(settings.getRequestById(parameterRequestId), settings).getUrl();
assertTrue("ERROR: the resolved Url in '" + parameterRequestId + "' was invalid!", uriString != null && uriString.length() > 0);
LOG.info("Requirement Id: " + parameterRequirementId);
LOG.info("Request Id: " + parameterRequestId);
try {
requestUri.set(prepareUri.apply(uriString));
clientEntitySetRequest.set(commander.get().getClient().getRetrieveRequestFactory().getEntitySetRequest(requestUri.get()));

View File

@ -3,7 +3,6 @@ package org.reso.commander;
//import io.cucumber.core.cli.Main;
import org.apache.commons.cli.*;
import org.apache.http.HttpStatus;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.olingo.client.api.domain.ClientEntitySet;
@ -14,13 +13,10 @@ import org.reso.models.Request;
import org.reso.models.Settings;
import java.io.File;
import java.io.FileWriter;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Function;
@ -46,9 +42,6 @@ public class App {
private static final Logger LOG = LogManager.getLogger(App.class);
//use only one instance of the stats class per run
private static final Stats STATS = new Stats();
private static final String DIVIDER = "==============================================================";
private static final String SMALL_DIVIDER = "===========================";
private static final String RESOSCRIPT_EXTENSION = ".resoscript";
@ -162,9 +155,6 @@ public class App {
String outputFilePath;
//start timer for entire run
STATS.startTimer();
for (int i = 0; i < numRequests; i++) {
try {
request = settings.getRequestsAsList().get(i);
@ -173,73 +163,40 @@ public class App {
LOG.info(SMALL_DIVIDER);
LOG.info("Request: #" + (i + 1));
LOG.info(SMALL_DIVIDER);
LOG.info("Request Name: " + request.getName());
//TODO: function-ize the property test
LOG.info("Description: " + (request.getTestDescription().length() > 0 ? request.getTestDescription() : "Not Specified"));
LOG.info("Requirement Id: " + (request.getRequirementId().length() > 0 ? request.getRequirementId() : "Not Specified"));
LOG.info("Metallic Level: " + (request.getMetallicLevel().length() > 0 ? request.getMetallicLevel() : "Not Specified"));
LOG.info("Capability: " + (request.getCapability().length() > 0 ? request.getCapability() : "Not Specified"));
LOG.info("Web API Reference: " + (request.getWebApiReference().length() > 0 ? request.getWebApiReference() : "Not Specified"));
if (request.getRequestId() != null && request.getRequestId().length() > 0) {
LOG.info("Request Id: " + request.getRequestId());
}
resolvedUrl = Settings.resolveParameters(request, settings).getUrl();
LOG.info("Resolved URL: " + resolvedUrl);
STATS.startRequest(request);
LOG.info("Resolved URL: " + resolvedUrl);
//only run tests if they have URLs that resolve
if (resolvedUrl != null && resolvedUrl.length() > 0) {
if (resolvedUrl != null && resolvedUrl.length() > 0 && request.getOutputFile() != null && request.getOutputFile().length() > 0) {
outputFilePath = directoryName + outputPath + File.separator + request.getOutputFile();
LOG.info("Output File: " + outputFilePath);
//get the response code from the request
responseCode = commander.saveGetRequest(resolvedUrl, outputFilePath);
request.setHttpResponseCode(responseCode);
LOG.info("Response Code: " + responseCode);
if (responseCode == HttpStatus.SC_OK) {
STATS.updateRequest(request, Request.Status.SUCCEEDED);
} else {
STATS.updateRequest(request, Request.Status.FAILED);
}
if (request.getOutputFile().toLowerCase().contains(EDMX_EXTENSION.toLowerCase())) {
//Main.main(new String[]{"-g", "org.reso.certification.stepdefs#WebAPIServer_1_0_2", "/home/jdarnell/work/reso/github/web-api-commander/src/main/java/org/reso/certification/features/web-api-server-1.0.2.feature"});
if (validateMetadata(commander, outputFilePath)) {
metadata = commander.readEdm(outputFilePath);
} else {
LOG.error("Error: Invalid metadata retrieved. Cannot continue!!");
System.exit(NOT_OK);
}
}
} else {
LOG.info("Request " + request.getRequirementId() + " has an empty URL. Skipping...");
STATS.updateRequest(request, Request.Status.SKIPPED);
LOG.info("Request " + request.getRequestId() + " has an empty URL. Skipping...");
}
} catch (Exception ex) {
STATS.updateRequest(request, Request.Status.FAILED, ex);
LOG.error("Exception thrown in RUN_RESOSCRIPT Action. Exception is: \n" + ex.toString());
LOG.error("Stack trace:");
Arrays.stream(ex.getStackTrace()).forEach(stackTraceElement -> LOG.error(stackTraceElement.toString()));
} finally {
if (resolvedUrl != null && resolvedUrl.length() > 0) {
LOG.info("Elapsed Time: " + String.format("%.2f", (STATS.getRequests().get(request).getElapsedTimeMillis() / 1000.0)) + "s");
}
}
LOG.info("\n\n");
LOG.info("\n ");
}
//stop global timer
STATS.stopTimer();
LOG.info(DIVIDER);
LOG.info("RESOScript Complete!");
LOG.info(DIVIDER + "\n");
LOG.info(generateReport(STATS, metadata, directoryName + outputPath));
System.exit(OK); //terminate the program after the batch completes
}
@ -349,7 +306,6 @@ public class App {
new HelpFormatter().printHelp("java -jar web-api-commander", options);
}
/**
* Generates totals report from aggregates.
* @param totalRequestCount total request count
@ -414,80 +370,6 @@ public class App {
return reportBuilder.toString();
}
private static String generateReport(Stats stats, Edm metadata, String outputPath) {
StringBuilder reportBuilder = new StringBuilder();
int numSucceeded, numFailed, numSkipped, numIncomplete, requestCount;
Set<String> metallicLevels = new HashSet<>();
Set<String> capabilityNames = new HashSet<>();
for(Request req : stats.getRequests().values()) {
metallicLevels.add(req.getMetallicLevel());
capabilityNames.add(req.getCapability());
}
numSucceeded = stats.getRequestCount(Request.Status.SUCCEEDED);
numFailed = stats.getRequestCount(Request.Status.FAILED);
numSkipped = stats.getRequestCount(Request.Status.SKIPPED);
numIncomplete = stats.getRequestCount(Request.Status.STARTED);
reportBuilder.append("\n\n" + DIVIDER);
reportBuilder.append("\nRequest Statistics");
reportBuilder.append("\n" + DIVIDER);
reportBuilder.append(generateTotalsReport(stats.totalRequestCount(), numSucceeded, numFailed, numSkipped, numIncomplete));
reportBuilder.append("\n" + "Total Time Taken: ").append(String.format("%.2f", (stats.getElapsedTimeMillis() / 1000.0))).append("s");
reportBuilder.append("\n" + "Average Time Taken: ").append(String.format("%.2f", (stats.getElapsedTimeMillis() / 1000.0) / stats.totalRequestCount())).append("s");
// Generate Metallic Certification Report
reportBuilder.append("\n\n" + DIVIDER);
reportBuilder.append("\nMetallic Certification Report");
reportBuilder.append("\n" + DIVIDER);
for (String metallicKey : metallicLevels) {
requestCount = stats.filterByMetallicCertification(metallicKey).size();
numSucceeded = stats.filterByMetallicCertification(metallicKey, stats.filterByStatus(Request.Status.SUCCEEDED)).size();
numFailed = stats.filterByMetallicCertification(metallicKey, stats.filterByStatus(Request.Status.FAILED)).size();
numSkipped = stats.filterByMetallicCertification(metallicKey, stats.filterByStatus(Request.Status.SKIPPED)).size();
numIncomplete = stats.filterByMetallicCertification(metallicKey, stats.filterByStatus(Request.Status.STARTED)).size();
reportBuilder.append("\n\n").append(metallicKey).append(numSucceeded > 0 && numSucceeded == (requestCount - numSkipped) ? " - ALL REQUESTS SUCCEEDED!" : "");
reportBuilder.append(generateTotalsReport(requestCount, numSucceeded, numFailed, numSkipped, numIncomplete));
}
// Generate Capabilities Report
reportBuilder.append("\n\n" + DIVIDER);
reportBuilder.append("\nCapabilities Certification Report");
reportBuilder.append("\n" + DIVIDER);
for (String capabilityKey : capabilityNames) {
requestCount = stats.filterByCapability(capabilityKey).size();
numSucceeded = stats.filterByCapability(capabilityKey, stats.filterByStatus(Request.Status.SUCCEEDED)).size();
numFailed = stats.filterByCapability(capabilityKey, stats.filterByStatus(Request.Status.FAILED)).size();
numSkipped = stats.filterByCapability(capabilityKey, stats.filterByStatus(Request.Status.SKIPPED)).size();
numIncomplete = stats.filterByCapability(capabilityKey, stats.filterByStatus(Request.Status.STARTED)).size();
reportBuilder.append("\n\n").append(capabilityKey).append(numSucceeded > 0 && numSucceeded == (requestCount - numSkipped) ? " - ALL REQUESTS SUCCEEDED!" : "");
reportBuilder.append(generateTotalsReport(requestCount, numSucceeded, numFailed, numSkipped, numIncomplete));
}
reportBuilder.append("\n" + DIVIDER + "\n");
String reportContent = reportBuilder.toString();
try {
FileWriter writer = new FileWriter(outputPath + File.separator + "CertificationReport.txt" );
writer.write(reportContent);
writer.write(getMetadataReport(metadata));
writer.flush();
writer.close();
} catch (Exception ex) {
LOG.error("Could not create Certification Report!");
LOG.error(ex.toString());
}
return reportBuilder.toString();
}
/**
* Helps with various app options used by the main application when processing input from the command line.
*/

View File

@ -1,87 +0,0 @@
package org.reso.commander;
import org.reso.models.Request;
import java.util.*;
import java.util.stream.Collectors;
/**
* The Stats class keeps information about a Commander run.
*/
public class Stats {
Date startDate, endDate;
private Map<Request, Request> requests = new HashMap<>();
public Stats () { /* */ }
public void startRequest(Request request) {
if (request != null) {
requests.put(request, request.setStatus(Request.Status.STARTED).startTimer());
}
}
public void updateRequest(Request request, Request.Status status) {
// only affects existing requestStatuses, use startRequest to register a Request
requests.get(request).stopTimer().setStatus(status);
}
public void updateRequest(Request request, Request.Status status, Exception ex) {
requests.get(request).setFailedRequestException(ex);
updateRequest(request, status);
}
public Map<Request, Request> getRequests() {
return requests;
}
public int totalRequestCount() {
return requests.size();
}
public int getRequestCount(Request.Status status) {
return filterByStatus(status, requests.values()).size();
}
public Collection<Request> filterByStatus(Request.Status status) {
return filterByStatus(status, requests.values());
}
public Collection<Request> filterByStatus(Request.Status status, Collection<Request> collection) {
return collection.stream()
.filter(requestStatus -> requestStatus.getStatus().compareTo(status) == 0).collect(Collectors.toList());
}
public Collection<Request> filterByMetallicCertification(String metallicName) {
return filterByMetallicCertification(metallicName, requests.values());
}
public Collection<Request> filterByMetallicCertification(String metallicName, Collection<Request> collection) {
return collection.stream()
.filter(request -> request.getMetallicLevel().compareTo(metallicName) == 0).collect(Collectors.toList());
}
public Collection<Request> filterByCapability(String capabilityName) {
return filterByCapability(capabilityName, requests.values());
}
public Collection<Request> filterByCapability(String capabilityName, Collection<Request> collection) {
return collection.stream()
.filter(request -> request.getCapability().compareTo(capabilityName) == 0).collect(Collectors.toList());
}
public HashMap<String, Integer> metallicStats;
public HashMap<String, Integer> capabilitiesStats;
public void startTimer() {
startDate = new Date();
}
public void stopTimer() {
endDate = new Date();
}
public long getElapsedTimeMillis() {
return endDate.getTime() - startDate.getTime();
}
}

View File

@ -21,7 +21,6 @@ public class Parameters {
parameters = new LinkedHashMap<>();
}
public static Parameters loadFromRESOScript(File file) {
final String PARAMETERS_KEY = "Parameters";
final String NAME_FIELD = "Name";

View File

@ -16,14 +16,9 @@ import java.util.Date;
import java.util.List;
public class Request {
private String requirementId;
private String name;
private String requestId;
private String outputFile;
private String url;
private String testDescription;
private String metallicLevel;
private String capability;
private String webApiReference;
private Request request;
private Status status;
@ -39,55 +34,84 @@ public class Request {
* @param outputFile
* @param url
*/
public Request(String requirementId, String outputFile, String url, String testDescription, String metallicLevel,
String capability, String webApiReference) {
//TODO: add Builder
setRequirementId(requirementId);
setOutputFile(outputFile);
public Request(String url, String outputFile, String requestId) {
setUrl(url);
setTestDescription(testDescription);
setMetallicLevel(metallicLevel);
setCapability(capability);
setWebApiReference(webApiReference);
setOutputFile(outputFile);
setRequestId(requestId);
}
/**
* Gets the status of the given request
* @return the status of the request
*/
public Status getStatus() {
return status;
}
/**
* Sets the status for the give request
* @param status the status to set
* @return the current instance of the request
*/
public Request setStatus(Status status) {
this.status = status;
return this;
}
/**
* Starts request timer
* @return the current request
*/
public Request startTimer() {
startDate = new Date();
return this;
}
/**
* Stops request timer
* @return the current request
*/
public Request stopTimer() {
endDate = new Date();
return this;
}
/**
* Gets the elapsed time the request took to run
* @return the elapsed time of the request in milliseconds
*/
public long getElapsedTimeMillis() {
return endDate != null && startDate != null ? endDate.getTime() - startDate.getTime() : 0L;
}
/**
* Sets the exception for a given request
* @param failedRequestException the exception that was thrown when the request was executed
*/
public void setFailedRequestException(Exception failedRequestException) {
this.failedRequestException = failedRequestException;
}
/**
* HTTP Response code getter
* @return an Integer representing the response code
*/
public Integer getHttpResponseCode() {
return httpResponseCode;
}
/**
* HTTP Response code setter
* @param httpResponseCode an Integer representing the HTTP Response code
*/
public void setHttpResponseCode(Integer httpResponseCode) {
this.httpResponseCode = httpResponseCode;
}
/**
* An enumeration of request status options
*/
public enum Status {
STARTED, SUCCEEDED, FAILED, SKIPPED
}
@ -121,7 +145,7 @@ public class Request {
String expression = "/OutputScript/" + REQUESTS_KEY + "/node()";
NodeList nodes = (NodeList) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODESET);
Node node;
String name, outputFile, url, testDescription, requirementId, metallicLevel, capability, webApiReference;
String outputFile, url, requestId;
Request request;
for (int i = 0; i < nodes.getLength(); i++) {
@ -130,17 +154,9 @@ public class Request {
if (node.getNodeType() == Node.ELEMENT_NODE) {
outputFile = safeGetNamedItem(FIELDS.OUTPUT_FILE, node);
url = safeGetNamedItem(FIELDS.URL, node);
testDescription = safeGetNamedItem(FIELDS.TEST_DESCRIPTION, node);
requirementId = safeGetNamedItem(FIELDS.REQUIREMENT_ID, node);
metallicLevel = safeGetNamedItem(FIELDS.METALLIC_LEVEL, node);
capability = safeGetNamedItem(FIELDS.CAPABILITY, node);
webApiReference = safeGetNamedItem(FIELDS.WEB_API_REFERENCE, node);
request = new Request(requirementId, outputFile, url, testDescription, metallicLevel, capability, webApiReference);
name = safeGetNamedItem(FIELDS.NAME, node);
request.setName(name == null ? outputFile : name);
requestId = safeGetNamedItem(FIELDS.REQUEST_ID, node);
request = new Request(url, outputFile, requestId);
requests.add(request);
}
}
@ -150,35 +166,20 @@ public class Request {
return requests;
}
private int deserializeTests(Node node) {
int numTests = 0;
return numTests;
}
public String getRequirementId() {
return requirementId;
}
public void setRequirementId(String requirementId) {
this.requirementId = requirementId;
/**
* Gets the given request by Id, if present.
* @return either the request Id or null if none was passed. May be null.
*/
public String getRequestId() {
return requestId;
}
/**
* Name getter
* @return the name of the request
* Sets the given request Id, if present.
* @param requestId the request Id to set.
*/
public String getName() {
return name;
}
/**
* Name setter
* @param name the name of the request
*/
private void setName(String name) {
this.name = name;
public void setRequestId(String requestId) {
this.requestId = requestId;
}
/**
@ -213,46 +214,12 @@ public class Request {
this.url = url;
}
public String getTestDescription() {
return testDescription;
}
public void setTestDescription(String testDescription) {
this.testDescription = testDescription;
}
public String getMetallicLevel() {
return metallicLevel;
}
public void setMetallicLevel(String metallicLevel) {
this.metallicLevel = metallicLevel;
}
public String getCapability() {
return capability;
}
public void setCapability(String capability) {
this.capability = capability;
}
public String getWebApiReference() {
return webApiReference;
}
public void setWebApiReference(String webApiReference) {
this.webApiReference = webApiReference;
}
/**
* Represents the known fields that can be in a serialized Request
*/
private static final class FIELDS {
static final String NAME = "Name";
static final String OUTPUT_FILE = "OutputFile";
static final String URL = "Url";
static final String TEST_DESCRIPTION = "TestDescription";
static final String REQUIREMENT_ID = "RequirementId";
static final String METALLIC_LEVEL = "MetallicLevel";
static final String CAPABILITY = "Capability";
static final String WEB_API_REFERENCE = "WebAPIReference";
static final String REQUEST_ID = "RequestId";
}
}

View File

@ -12,7 +12,7 @@ import java.util.*;
public class Settings {
private ClientSettings clientSettings;
private Parameters parameters;
private Map<String, Request> requests;
private Map<Request, Request> requests;
public Settings() {
clientSettings = new ClientSettings();
@ -57,9 +57,7 @@ public class Settings {
* @return a copy of the request with the URL resolved.
*/
public static Request resolveParameters(Request request, Settings settings) {
//calls to resolve nested parameters
return new Request(request.getRequirementId(), request.getOutputFile(), resolveParametersString(request.getUrl(), settings), request.getTestDescription(),
request.getMetallicLevel(), request.getCapability(), request.getWebApiReference());
return new Request(resolveParametersString(request.getUrl(), settings), request.getOutputFile(), request.getRequestId());
}
/**
@ -132,10 +130,27 @@ public class Settings {
* Requests getter.
* @return The request map that was loaded, indexed by request name.
*/
public Map<String, Request> getRequests() {
public Map<Request, Request> getRequests() {
return requests;
}
/**
* Requests getter.
* @return The request map that was loaded, indexed by request name.
*/
public Request getRequestById(String requestId) {
Request found = null;
for (Map.Entry<Request, Request> entry : getRequests().entrySet()) {
Request key = entry.getKey();
Request value = entry.getValue();
if (key.getRequestId().contentEquals(requestId)) {
found = value;
break;
}
}
return found;
}
/**
* Requests getter.
*
@ -151,7 +166,7 @@ public class Settings {
* @param requests a list of requests to create the request map from
*/
private void setRequests(List<Request> requests) {
this.requests = new LinkedHashMap<String, Request>();
requests.forEach(request -> this.requests.put(request.getRequirementId(), request));
this.requests = new LinkedHashMap<Request, Request>();
requests.forEach(request -> this.requests.put(request, request));
}
}