| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| package xquery.quote; |
| |
| import java.util.List; |
| |
| import junit.framework.TestCase; |
| |
| import org.apache.tuscany.sca.host.embedded.SCADomain; |
| import org.apache.tuscany.sca.host.embedded.SCATestCaseRunner; |
| import org.example.avail.AvailQuote; |
| import org.example.avail.AvailRequest; |
| import org.example.price.PriceQuote; |
| import org.example.price.PriceRequest; |
| import org.example.price.ShipAddress; |
| import org.example.quote.Quote; |
| import org.example.quote.QuoteResponse; |
| import org.junit.After; |
| import org.junit.Before; |
| import org.junit.Test; |
| |
| import commonj.sdo.DataObject; |
| |
| /** |
| * Integration test for the XQuery implementation type |
| * @version $Rev$ $Date$ |
| * This test covers the most important integration scenarios for the xquery |
| * implementation type and its corresponding saxon data bindings: |
| * |
| * 1. There is a central component for invoking the different |
| * scenarios: QuoteJoinLocalComponent |
| * 2. It provides the following tests: |
| * - invoke XQuery component in the current assembly, by providing all needed |
| * information as input parameters |
| * - invoke XQuery component in external assembly, which is exposed as a web |
| * service |
| * - invoke XQuery component in the current assembly, which retrieves the needed |
| * information from the component properties |
| * - invoke XQuery component in the current assembly, which retrieves the needed |
| * information from its references to other components: |
| * - one of the components is in the current assembly |
| * - the other component is in anther assembly and it is exposed (and accessed) |
| * as web service |
| * |
| * 3. All of the XQuery components have reference to a component for calculation of the |
| * total price |
| * 4. SDO is used for data interchange |
| */ |
| public class XQueryQuoteClientTestCase { |
| |
| public static boolean SHOW_DEBUG_MSG = false; |
| |
| private SCADomain scaDomain; |
| private SCATestCaseRunner server; |
| |
| private QuoteJoinLocal quoteJoinLocal; |
| |
| @Before |
| public void startClient() throws Exception { |
| try { |
| scaDomain = SCADomain.newInstance("xqueryquotewsclient.composite"); |
| |
| quoteJoinLocal = scaDomain.getService(QuoteJoinLocal.class, "QuoteJoinLocalComponent"); |
| |
| server = new SCATestCaseRunner(XQueryQuoteTestServer.class); |
| server.before(); |
| } catch (Throwable t) { |
| t.printStackTrace(); |
| } |
| } |
| |
| @Test |
| public void testQuoteJoin() { |
| AvailQuote availQuote = QuoteDataUtil.buildAvailQuoteData(); |
| PriceQuote priceQuote = QuoteDataUtil.buildPriceQuoteData(); |
| |
| if (SHOW_DEBUG_MSG) { |
| System.out.println("Input quote for the price list:"); |
| QuoteDataUtil.serializeToSystemOut((DataObject)priceQuote, "priceQuote"); |
| System.out.println(); |
| System.out.println("Input quote for the availability:"); |
| QuoteDataUtil.serializeToSystemOut((DataObject)availQuote, "availQuote"); |
| System.out.println(); |
| } |
| |
| Quote quote = quoteJoinLocal.joinPriceAndAvailQuotes(priceQuote, availQuote, 0.1f); |
| if (SHOW_DEBUG_MSG) { |
| System.out.println(); |
| System.out.println("Output quote from local join:"); |
| QuoteDataUtil.serializeToSystemOut((DataObject)quote, "quote"); |
| System.out.println(); |
| } |
| XQueryQuoteClientTestCase.assertQuote(availQuote, priceQuote, quote, 0.1f); |
| |
| quote = quoteJoinLocal.joinPriceAndAvailQuotes(priceQuote, availQuote, 0.2f); |
| if (SHOW_DEBUG_MSG) { |
| System.out.println(); |
| System.out.println("Output quote from local join (second invokation):"); |
| QuoteDataUtil.serializeToSystemOut((DataObject)quote, "quote"); |
| System.out.println(); |
| } |
| XQueryQuoteClientTestCase.assertQuote(availQuote, priceQuote, quote, 0.2f); |
| |
| quote = quoteJoinLocal.joinPriceAndAvailQuotesWs(priceQuote, availQuote, 0.1f); |
| if (SHOW_DEBUG_MSG) { |
| System.out.println(); |
| System.out.println("Output quote from web service join:"); |
| QuoteDataUtil.serializeToSystemOut((DataObject)quote, "quote"); |
| System.out.println(); |
| } |
| XQueryQuoteClientTestCase.assertQuote(availQuote, priceQuote, quote, 0.1f); |
| |
| quote = quoteJoinLocal.joinPriceAndAvailQuotes(); |
| if (SHOW_DEBUG_MSG) { |
| System.out.println(); |
| System.out.println("Output quote from properties join:"); |
| QuoteDataUtil.serializeToSystemOut((DataObject)quote, "quote"); |
| System.out.println(); |
| } |
| XQueryQuoteClientTestCase.assertQuote(availQuote, priceQuote, quote, 0.1f); |
| |
| quote = quoteJoinLocal.joinPriceAndAvailQuotes(0.1f); |
| if (SHOW_DEBUG_MSG) { |
| System.out.println(); |
| System.out.println("Output quote from external references join:"); |
| QuoteDataUtil.serializeToSystemOut((DataObject)quote, "quote"); |
| System.out.println(); |
| } |
| XQueryQuoteClientTestCase.assertQuote(availQuote, priceQuote, quote, 0.1f); |
| } |
| |
| @After |
| public void stopClient() throws Exception { |
| server.after(); |
| scaDomain.close(); |
| } |
| |
| public static void assertQuote(AvailQuote availQuote, PriceQuote priceQuote, Quote quote, float taxRate) { |
| QuoteCalculatorImpl quoteCalculatorImpl = new QuoteCalculatorImpl(); |
| |
| TestCase.assertEquals(priceQuote.getCustomerName(), quote.getName()); |
| ShipAddress shipAddress = priceQuote.getShipAddress(); |
| TestCase.assertEquals(shipAddress.getStreet() + "," |
| + shipAddress.getCity() |
| + "," |
| + shipAddress.getState().toUpperCase() |
| + "," |
| + shipAddress.getZip(), quote.getAddress()); |
| List availRequests = availQuote.getAvailRequest(); |
| List priceRequests = priceQuote.getPriceRequests().getPriceRequest(); |
| List quoteResponses = quote.getQuoteResponse(); |
| TestCase.assertEquals(availRequests.size(), priceRequests.size()); |
| TestCase.assertEquals(availRequests.size(), quoteResponses.size()); |
| |
| for (int i = 0; i < availRequests.size(); i++) { |
| AvailRequest availRequest = (AvailRequest)availRequests.get(i); |
| PriceRequest priceRequest = (PriceRequest)priceRequests.get(i); |
| QuoteResponse quoteResponse = (QuoteResponse)quoteResponses.get(i); |
| TestCase.assertEquals(availRequest.getWidgetId(), quoteResponse.getWidgetId()); |
| TestCase.assertEquals(priceRequest.getPrice(), quoteResponse.getUnitPrice()); |
| TestCase.assertEquals(availRequest.getRequestedQuantity(), quoteResponse.getRequestedQuantity()); |
| TestCase.assertEquals(availRequest.isQuantityAvail(), quoteResponse.isFillOrder()); |
| if (availRequest.getShipDate() == null) { |
| TestCase.assertNull(quoteResponse.getShipDate()); |
| } else { |
| TestCase.assertEquals(availRequest.getShipDate(), quoteResponse.getShipDate()); |
| } |
| TestCase.assertEquals(taxRate, quoteResponse.getTaxRate()); |
| TestCase.assertEquals(quoteCalculatorImpl.calculateTotalPrice(taxRate, |
| availRequest.getRequestedQuantity(), |
| priceRequest.getPrice(), |
| availRequest.isQuantityAvail()), |
| quoteResponse.getTotalCost()); |
| } |
| } |
| } |