// TEST CASE RESPONSE STORED IN VAR import groovy.io.FileType import groovy.xml.XmlUtil import groovy.xml.dom.DOMCategory import groovy.xml.QName def blankRequest = testRunner.testCase.getTestStepByName("Contract BLANK") def requestValue = blankRequest.getPropertyValue("Request") def newRequest = testRunner.testCase.getTestStepByName("Contract") def newRequestValue = newRequest.setPropertyValue("Request", requestValue) ns_dsi = "https://www.provexchnet.com/dsi" ns_pen = "http://schemas.datacontract.org/2004/07/PEN.Service.V4.ServiceTypes" ns_arr = "http://schemas.microsoft.com/2003/10/Serialization/Arrays" log.info("GetFilledForm cleared!") def getDataValue(value) { def result = "" value = Integer.parseInt(value) switch (value) { case 1: // Buyer First Name result = "TEST" break case 2: // Buyer Last Name result = "TEST" break case 3: // Buyer Suffix result = "" break case 4: // Buyer Middle Name result = "" break case 5: // Buyer Address 1 result = "123 Main" break case 6: // Buyer Adddress 2 result = "" break case 7: // Buyer City result = "Southfield" break case 8: // Buyer State result = "MI" break case 9: // Buyer Zip result = "48034" break case 10: // Buyer Phone Number result = "734-555-1212" break case 11: // Buyer Email result = "Tom@Jones.com" break case 12: // Buyer DOB result = "" break case 13: // Co Buyer First Name result = "TEST" break case 14: // Co Buyer Last Name result = "TEST" break case 15: // Co Buyer Suffix result = "" break case 16: // Co Buyer Middle Name result = "" break case 17: // Co Buyer Address 1 result = "123 CoApp" break case 18: // Co Buyer Address 2 result = "" break case 19: // Co Buyer City result = "" break case 20: // Co Buyer State result = "" break case 21: // Co Buyer Zip result = "" break case 22: // Co Buyer Phone Number result = "" break case 23: // Co Buyer Email result = "" break case 24: // Co Buyer DOB result = "" break case 25: // Lien Name result = "Chase" break case 26: // Lien Address 1 result = "123 Main St" break case 27: // Lien Address 2 result = "" break case 28: // Lien City result = "Southfield" break case 29: // Lien State result = "MI" break case 30: // Lien Zip result = "48034" break case 31: // Lien Phone Number result = "734-555-1212" break case 32: // Lien Fax Number result = "" break case 33: // VIN result = context.expand( '${PEN Rate Request - PROVIDER NAME Products#RawRequest#declare namespace pen=\''+ns_pen+'\'; declare namespace dsi=\''+ns_dsi+'\';//dsi:GetRates[1]/dsi:request[1]/pen:DealInfo[1]/pen:VIN[1]}' ) break case 34: // Make result = "Ford" break case 35: // Model result = "Focus" break case 36: // Model Year result = "2018" break case 37: // Mileage result = context.expand( '${PEN Rate Request - PROVIDER NAME Products#RawRequest#declare namespace pen=\''+ns_pen+'\'; declare namespace dsi=\''+ns_dsi+'\'; //dsi:GetRates[1]/dsi:request[1]/pen:DealInfo[1]/pen:Mileage[1]}' ) break case 38: // In Service Date result = context.expand( '${PEN Rate Request - PROVIDER NAME Products#RawRequest#declare namespace pen=\''+ns_pen+'\'; declare namespace dsi=\''+ns_dsi+'\'; //dsi:GetRates[1]/dsi:request[1]/pen:DealInfo[1]/pen:InServiceDate[1]}' ) break case 39: // Car Status result = context.expand( '${PEN Rate Request - PROVIDER NAME Products#RawRequest#declare namespace pen=\''+ns_pen+'\'; declare namespace dsi=\''+ns_dsi+'\'; //dsi:GetRates[1]/dsi:request[1]/pen:DealInfo[1]/pen:CarStatus[1]}' ) break case 40: // MSRP result = context.expand( '${PEN Rate Request - PROVIDER NAME Products#RawRequest#declare namespace pen=\''+ns_pen+'\'; declare namespace dsi=\''+ns_dsi+'\'; //dsi:GetRates[1]/dsi:request[1]/pen:DealInfo[1]/pen:VehicleMSRP[1]}' ) break case 41: // Purchase Price result = context.expand( '${PEN Rate Request - PROVIDER NAME Products#RawRequest#declare namespace pen=\''+ns_pen+'\'; declare namespace dsi=\''+ns_dsi+'\'; //dsi:GetRates[1]/dsi:request[1]/pen:DealInfo[1]/pen:VehiclePurchasePrice[1]}' ) break case 42: //EXTERIOR COLOR result = "" break case 43: // Stock Number result = "" break case 44: // Transaction Date result = new Date().format("MM/dd/YYYY") break case 45: // Effective Date result = context.expand( '${PEN Rate Request - PROVIDER NAME Products#RawRequest#declare namespace pen=\''+ns_pen+'\'; declare namespace dsi=\''+ns_dsi+'\'; //dsi:GetRates[1]/dsi:request[1]/pen:DealInfo[1]/pen:EffectiveDate[1]}' ) break case 46: // Financed Amount result = context.expand( '${PEN Rate Request - PROVIDER NAME Products#RawRequest#declare namespace pen=\''+ns_pen+'\'; declare namespace dsi=\''+ns_dsi+'\'; //dsi:GetRates[1]/dsi:request[1]/pen:DealInfo[1]/pen:FinancedAmount[1]}' ) break case 47: // Finance Term result = context.expand( '${PEN Rate Request - PROVIDER NAME Products#RawRequest#declare namespace arr=\''+ns_arr+'\'; declare namespace pen=\''+ns_pen+'\'; declare namespace dsi=\''+ns_dsi+'\'; //dsi:GetRates[1]/dsi:request[1]/pen:DealInfo[1]/pen:FinanceTerms[1]/arr:int[1]}' ) break case 48: // APR result = context.expand( '${PEN Rate Request - PROVIDER NAME Products#RawRequest#declare namespace pen=\''+ns_pen+'\'; declare namespace dsi=\''+ns_dsi+'\'; //dsi:GetRates[1]/dsi:request[1]/pen:DealInfo[1]/pen:APR[1]}' ) break case 49: // Cash Down result = "" break case 50: // Monthly Payment result = "500" break case 51: // Deal Type result = context.expand( '${PEN Rate Request - PROVIDER NAME Products#RawRequest#declare namespace pen=\''+ns_pen+'\'; declare namespace dsi=\''+ns_dsi+'\'; //dsi:GetRates[1]/dsi:request[1]/pen:DealInfo[1]/pen:DealType[1]}' ) break case 52: // FI Manager Name result = "TEST TEST" break case 53: // Contract Number result = "" break case 54: // Coverage Name result = "" break case 55: // Term Months result = context.expand( '${PEN Rate Request - PROVIDER NAME Products#RawRequest#declare namespace arr=\''+ns_arr+'\'; declare namespace pen=\''+ns_pen+'\'; declare namespace dsi=\''+ns_dsi+'\'; //dsi:GetRates[1]/dsi:request[1]/pen:DealInfo[1]/pen:FinanceTerms[1]/arr:int[1]}' ) break case 56: // Term Miles result = context.expand( '${PEN Rate Request - PROVIDER NAME Products#Response#declare namespace a=\''+ns_pen+'\'; declare namespace ns1=\''+ns_dsi+'\'; //ns1:GetRatesResponse[1]/ns1:GetRatesResult[1]/a:Rates[1]/a:Rate[1]/a:Coverages[1]/a:Coverage[1]/a:TermMiles[1]}' ) break case 57: // Deductible Amount result = context.expand( '${PEN Rate Request - PROVIDER NAME Products#Response#declare namespace a=\''+ns_pen+'\'; declare namespace ns1=\''+ns_dsi+'\'; //ns1:GetRatesResponse[1]/ns1:GetRatesResult[1]/a:Rates[1]/a:Rate[1]/a:Coverages[1]/a:Coverage[1]/a:Deductibles[1]/a:Deductible[1]/a:Amount[1]}' ) break case 58: // Retail Price result = context.expand( '${PEN Rate Request - PROVIDER NAME Products#Response#declare namespace a=\''+ns_pen+'\'; declare namespace ns1=\''+ns_dsi+'\'; //ns1:GetRatesResponse[1]/ns1:GetRatesResult[1]/a:Rates[1]/a:Rate[1]/a:Coverages[1]/a:Coverage[1]/a:Deductibles[1]/a:Deductible[1]/a:RetailPrice[1]}' ) break case 59: // Dealer Cost result = context.expand( '${PEN Rate Request - PROVIDER NAME Products#Response#declare namespace a=\''+ns_pen+'\'; declare namespace ns1=\''+ns_dsi+'\'; //ns1:GetRatesResponse[1]/ns1:GetRatesResult[1]/a:Rates[1]/a:Rate[1]/a:Coverages[1]/a:Coverage[1]/a:Deductibles[1]/a:Deductible[1]/a:DealerCost[1]}' ) break case 60: // FI Manager ID result = "" break case 61: // Financed Separately result = "true" break case 62: // Etch Number result = "12345678" break case 63: // Days to First Payment result = "" break case 64: // Balloon Amount result = "" break case 65: // Number Of Keys result = "3" break case 66: // Tire Description result = "" break case 67: // Tire Size result = "15r30l" break case 68: // Tire Make result = "" break case 69: // Number of Wheels result = "" break case 70: // Easy Care Key Number result = "" break case 71: // USER.DUPLICATEVIN - Do you wish to create this product if a contract with this VIN already exists? result = "Not Implemented" break case 72: // Tracking Code result = "" break case 73: // NOT IMPLEMENTED result = "Not Implemented" break case 74: // NOT IMPLEMENTED result = "Not Implemented" break case 75: // Payment Plan Provider Name result = "" break case 76: // SRP result = "" break case 77: // Residual Value result = "" break case 78: // Buyer Business Phone Number result = "" break case 79: // Co Buyer Business Phone Number result = "" break case 80: // Lease Allowable Mileage result = "" break case 81: // Maint Term Months result = "" break case 82: // Maint Term Miles result = "" break case 83: // FI Manager ID List result = "" break case 84: // Oil And Filter Maint Interval result = "" break case 85: // Tire Rotation Maint Interval result = "" break case 86: // Sales Tax result = "" break case 87: // Tire Dot Number 0 result = "" break case 88: // Tire Dot Number result = "" break case 89: // Tire Dot Number result = "" break case 90: // Tire Dot Number result = "" break case 91: // Tire Dot Number result = "" break case 92: // Tire Dot Number result = "" break case 93: // Tire Dot Number result = "" break case 94: // Tire Dot Number result = "" break case 95: // Tire Dot Number result = "" break case 96:// Tire Dot Number 9 result = "" break case 97: // Tax Rate result = "" break case 98: // Buyer Customer Number result = "" break case 99: // Base Finance Amount result = "" break case 100: // Vehicle License Plate Number result = "" break case 101: // Product Device Number result = "" break case 102: // Battery Manufacturer result = "" break default: // No Data Element Found result = 'No Data Element found' break } return result.trim() } def groovyUtils = new com.eviware.soapui.support.GroovyUtils( context ) def responseHolder = groovyUtils.getXmlHolder( "GetTemplate#Response" ) // GATHER THE DATA ELEMENT NODE INTO A LIST VAR List DataElements = responseHolder.getNodeValues("//a:FormDataElements[1]/a:FormDataElement/a:DataElementID") //log.info(DataElements.size()) //.sort() //COPY THE BLANK TO THE PREVIOUS RUN. //def BlankContractRequest = context.expand( "Contract - AFAS Maintenance BLANK#Request"’ ) //new File( "C:/Groovy/" + "_BlankContractRequest.txt" ).write( BlankContractRequest ) // GETFILLEDFORM REQUEST TEST CASE STORED IN VAR def requestHolder = groovyUtils.getXmlHolder("Contract#Request") // CREATE A DATABASE CONNECTION //def sql = Sql.newInstance("jdbc:sqlserver://10.150.5.49:1433;databaseName=QA_PEN;integratedSecurity=true") // GetFilledForm DealIdentifier node setup //def dealIdentifier = context.expand( '${DataSource#DealIdentifier}' ) def dealIdentifier = context.expand( '${ContractDealIdentifier#Response#declare namespace a=\''+ns_pen+'\'; declare namespace ns1=\''+ns_dsi+'\'; //ns1:GetDealIdentifierResponse[1]/ns1:GetDealIdentifierResult[1]/a:DealIdentifier[1]}' ).trim() requestHolder["//pen:DealIdentifier"] = dealIdentifier // GetFilledForm DealNumber node setup def DealNumber = context.expand( '${#TestCase#dealNo}' ).trim() if (DealNumber.equals("")) { DealNumber = "NoDealNumber" } requestHolder["//pen:DealNumber"] = DealNumber // GetFilledForm DealerID node setup def DealerID = context.expand( '${#Project#DealerID}' ).trim() requestHolder["//pen:DealerID"] = DealerID // GetFilledForm FormID node setup def formID = context.expand( '${PEN Rate Request - PROVIDER NAME Products#Response#declare namespace a=\''+ns_pen+'\'; declare namespace ns1=\''+ns_dsi+'\'; //ns1:GetRatesResponse[1]/ns1:GetRatesResult[1]/a:Rates[1]/a:Rate[1]/a:Coverages[1]/a:Coverage[1]/a:Form[1]/a:FormID[1]}' ).trim() requestHolder["//pen:FormID"] = formID // GetFilledForm ProductId node setup def ProductID = context.expand( '${ProductID DataSource#ProductID}' ).trim() requestHolder["//pen:DSIRateInfo/pen:ProductId"] = ProductID // GetFilledForm RateId node setup def RateID = context.expand( '${PEN Rate Request - PROVIDER NAME Products#Response#declare namespace a=\''+ns_pen+'\'; declare namespace ns1=\''+ns_dsi+'\'; //ns1:GetRatesResponse[1]/ns1:GetRatesResult[1]/a:Rates[1]/a:Rate[1]/a:Coverages[1]/a:Coverage[1]/a:Deductibles[1]/a:Deductible[1]/a:RateID[1]}' ).trim() requestHolder["//pen:RateId"] = RateID // GetFilledForm SessionId node setup def SessionID = context.expand( '${PEN Rate Request - PROVIDER NAME Products#Response#declare namespace a=\''+ns_pen+'\'; declare namespace ns1=\''+ns_dsi+'\'; //ns1:GetRatesResponse[1]/ns1:GetRatesResult[1]/a:Rates[1]/a:Rate[1]/a:SessionID[1]}' ).trim() requestHolder["//pen:SessionId"] = SessionID // GetFilledForm TestRequest node setup def TestRequest = context.expand( '${#TestSuite#TestRequest}' ).trim() requestHolder["//pen:TestRequest"] = TestRequest requestHolder.updateProperty() log.info("Template root values complete!") // LOOP THROUGH THE TEMPLATE DATA ELEMENT LIST AND APPEND TO THE XML for (i = 1; i <=DataElements.size(); i++) { // get parent node for new child requestHolder.namespaces[("a")] = ns_pen requestHolder.namespaces[("b")] = ns_arr def parentNode = requestHolder.getDomNode("//a:FormDataElements[1]") def CollectionType = responseHolder.getNodeValue("//a:FormDataElements[1]/a:FormDataElement[" +i+"]/a:CollectionType").trim() if (CollectionType == null) { log.info("Collection Type is NULL") CollectionType = "TEXT" } String DataElementID = responseHolder.getNodeValue("//a:FormDataElements[1]/a:FormDataElement[" +i+"]/a:DataElementID").trim() String DataMapping = responseHolder.getNodeValue("//a:FormDataElements[1]/a:FormDataElement[" +i+"]/a:DataMapping").trim() String DataType = responseHolder.getNodeValue("//a:FormDataElements[1]/a:FormDataElement[" +i+"]/a:DataType").trim() List ListItems = responseHolder.getNodeValues("//a:FormDataElements[1]/a:FormDataElement[" +i+"]/a:ListItems/b:string") String RProductID = responseHolder.getNodeValue("//a:FormDataElements[1]/a:FormDataElement[" +i+"]/a:ProductId").trim() String Required = responseHolder.getNodeValue("//a:FormDataElements[1]/a:FormDataElement[" +i+"]/a:Required").trim() String UserPrompt = responseHolder.getNodeValue("//a:FormDataElements[1]/a:FormDataElement[" +i+"]/a:UserPrompt").trim() String ValidatorPrompt = responseHolder.getNodeValue("//a:FormDataElements[1]/a:FormDataElement[" +i+"]/a:ValidatorPrompt").trim() log.info("i=" + i + " | " + CollectionType + " | "+ DataElementID + " | "+ DataMapping + " | "+ DataType + " | "+ ListItems + " | "+ ProductID + " | "+ Required + " | "+ UserPrompt + " | "+ ValidatorPrompt) String DataValue = "" DataValue = getDataValue(DataElementID) // THIS IS HOW WE APPEND CHILD NODES TO PARENT NODES use ( DOMCategory ) { // add new "FormDataElement" element.. def nodeFormDataElement = parentNode.appendNode( new QName( ns_pen, "FormDataElement", "pen")) // add new "CollectionType" element. nodeFormDataElement.appendNode( new QName( ns_pen, "CollectionType", "pen"), CollectionType ) // add new "DataElementID" element. nodeFormDataElement.appendNode( new QName( ns_pen, "DataElementID", "pen"), DataElementID ) // add new "DataMapping" element. nodeFormDataElement.appendNode( new QName( ns_pen, "DataMapping", "pen"), DataMapping ) // add new "DataType" element. nodeFormDataElement.appendNode( new QName( ns_pen, "DataType", "pen"), DataType ) // add new "DataValue" element. nodeFormDataElement.appendNode( new QName( ns_pen, "DataValue", "pen"), DataValue ) // // add new "ListItems" element. def nodeListItems = nodeFormDataElement.appendNode( new QName( ns_pen, "ListItems", "pen") ) if (ListItems.size()>0) { for (n =1; n<=ListItems.size(); n++) { nodeListItems.appendNode( new QName (ns_arr,"string","arr"),ListItems.get(n-1).trim()) } } // add new "ProductID" element. nodeFormDataElement.appendNode( new QName( ns_pen, "ProductId", "pen"), RProductID ) // add new "Required" element. nodeFormDataElement.appendNode( new QName( ns_pen, "Required", "pen"), Required ) // add new "UserPrompt" element. nodeFormDataElement.appendNode( new QName( ns_pen, "UserPrompt", "pen"), UserPrompt ) // add new "ValidatorPrompt" element. nodeFormDataElement.appendNode( new QName( ns_pen, "ValidatorPrompt", "pen"), ValidatorPrompt ) } // THIS IS THE MAIN PIECE THAT UPDATES THE CONTRACT REQUEST XML BUILDOUT. requestHolder.updateProperty() } // IF SURCHARGES: Only grab the surcharges if they exist in the rateID pulled from the GetRates Response. // log.info("Template Build Successful!")