1   package org.controlhaus.amazon;
2   
3   import java.io.File;
4   import java.lang.reflect.Method;
5   
6   import org.apache.beehive.controls.api.bean.Control;
7   import org.apache.beehive.controls.api.context.ControlBeanContext;
8   import org.apache.beehive.controls.runtime.bean.ControlContainerContext;
9   import org.apache.beehive.controls.api.events.EventHandler;
10  import org.apache.xmlbeans.XmlObject;
11  import org.codehaus.xfire.fault.XFireFault;
12  import org.controlhaus.amazon.AmazonClientControl;
13  import org.controlhaus.xfire.client.XFireClientControl;
14  
15  import com.amazon.webservices.awseCommerceService.x20041019.ItemLookupDocument;
16  import com.amazon.webservices.awseCommerceService.x20041019.ItemLookupRequest;
17  import com.amazon.webservices.awseCommerceService.x20041019.ItemLookupResponseDocument;
18  import com.amazon.webservices.awseCommerceService.x20041019.ItemLookupDocument.ItemLookup;
19  import com.amazon.webservices.awseCommerceService.x20041019.ItemsDocument.Items;
20  
21  import junit.framework.TestCase;
22  
23  /***
24   * @author <a href="mailto:dan@envoisolutions.com">Dan Diephouse</a>
25   * @since Nov 2, 2004
26   */
27  public class AmazonClientTest 
28      extends AbstractControlTest
29  {
30      @Control AmazonClientControl amazon;
31  
32      private boolean receivedResponse;
33      private ItemLookupResponseDocument response;
34      
35      public void testControl() 
36          throws Exception
37      {
38          assertNotNull(amazon);
39          
40          ItemLookupDocument doc = ItemLookupDocument.Factory.newInstance();
41          ItemLookup lookup = doc.addNewItemLookup();
42          lookup.setAssociateTag("dandiephosblo-20");
43          lookup.setSubscriptionId("1E5AY4ZG53H4AMC8QH82");
44          
45          ItemLookupRequest request = lookup.addNewRequest();
46          request.addItemId("0486411214");
47          request.setIdType(ItemLookupRequest.IdType.ASIN);
48          
49          response = amazon.ItemLookup(doc);
50          
51          Items[] itemsArr = response.getItemLookupResponse().getItemsArray();
52          assertEquals(1, itemsArr.length);
53          System.out.println(response.xmlText());
54          assertEquals("0486411214", itemsArr[0].getItemArray()[0].getASIN());
55      }
56      
57      public void testAsyncControl() 
58  	    throws Exception
59  	{
60  	    assertNotNull(amazon);
61  	    
62  	    ItemLookupDocument doc = ItemLookupDocument.Factory.newInstance();
63  	    ItemLookup lookup = doc.addNewItemLookup();
64  	    lookup.setAssociateTag("dandiephosblo-20");
65  	    lookup.setSubscriptionId("1E5AY4ZG53H4AMC8QH82");
66  	    
67  	    ItemLookupRequest request = lookup.addNewRequest();
68  	    request.addItemId("0486411214");
69  	    request.setIdType(ItemLookupRequest.IdType.ASIN);
70  	    
71  	    amazon.beginItemLookup(doc);
72  	    
73  	    for ( int i = 0; i < 60; i++ )
74  	    {
75  	        if ( !receivedResponse )
76  	            wait(500);
77  	        else
78  	            break;
79  	    }
80  	    
81  	    if ( !receivedResponse )
82  	        fail("Didn't receive async response.");
83  	    
84  	    Items[] itemsArr = response.getItemLookupResponse().getItemsArray();
85          assertEquals(1, itemsArr.length);
86          System.out.println(response.xmlText());
87          assertEquals("0486411214", itemsArr[0].getItemArray()[0].getASIN());
88  	}
89      
90      @EventHandler(field="amazon",
91                    eventSet=XFireClientControl.EndInvokeCallback.class,
92                    eventName="endInvoke")
93      public void endInvoke( XmlObject[] response, XmlObject[] responseHeaders )
94      {
95          receivedResponse = true;
96          this.response = (ItemLookupResponseDocument) response[0];
97      }
98      
99      @EventHandler(field="amazon",
100                   eventSet=XFireClientControl.EndInvokeCallback.class,
101                   eventName="handleFault")
102     public void handleFault( XFireFault fault )
103     {
104         receivedResponse = true;
105     }
106 }