blob: 9555532b3e1ae115a7060900ad34b808970f2ba1 [file] [log] [blame]
/*
* 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());
}
}
}