Переглянути джерело

fixed issue #ZF-9547: removed explicit typecast in Zend_Service_Amazon_Item::__construct() and added a null and DOMElement check at the beginning of the constructor

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@21883 44c647ce-9c0f-0410-b52a-842ac1e357ba
dragonbe 16 роки тому
батько
коміт
b9d943b705

+ 13 - 2
library/Zend/Service/Amazon/Item.php

@@ -112,11 +112,22 @@ class Zend_Service_Amazon_Item
     /**
      * Parse the given <Item> element
      *
-     * @param  DOMElement $dom
+     * @param  null|DOMElement $dom
      * @return void
+     * @throws	Zend_Service_Amazon_Exception
+     * 
+     * @group ZF-9547
      */
-    public function __construct(DOMElement $dom)
+    public function __construct($dom)
     {
+    	if (null === $dom) {
+    		require_once 'Zend/Service/Amazon/Exception.php';
+    		throw new Zend_Service_Amazon_Exception('Item element is empty');
+    	}
+    	if (!$dom instanceof DOMElement) {
+    		require_once 'Zend/Service/Amazon/Exception.php';
+    		throw new Zend_Service_Amazon_Exception('Item is not a valid DOM element');
+    	}
         $xpath = new DOMXPath($dom->ownerDocument);
         $xpath->registerNamespace('az', 'http://webservices.amazon.com/AWSECommerceService/2005-10-05');
         $this->ASIN = $xpath->query('./az:ASIN/text()', $dom)->item(0)->data;

+ 46 - 0
tests/Zend/Service/Amazon/OfflineTest.php

@@ -328,4 +328,50 @@ class Zend_Service_Amazon_OfflineTest extends PHPUnit_Framework_TestCase
             ))
         );
     }
+    
+	/**
+     * Testing if Amazon service component can handle return values where the
+     * item-list is not empty
+     * 
+     * @group ZF-9547
+     */
+    public function testAmazonComponentHandlesValidBookResults()
+    {
+    	$xml = file_get_contents(dirname(__FILE__)."/_files/amazon-response-valid.xml");
+        $dom = new DOMDocument();
+        $dom->loadXML($xml);
+        
+    	$result = new Zend_Service_Amazon_ResultSet($dom);
+
+    	$currentItem = null;
+    	try {
+    		$currentItem = $result->current();
+    	} catch (Zend_Service_Amazon_Exception $e) {
+    		$this->fail('Unexpected exception was triggered');
+    	}
+    	$this->assertType('Zend_Service_Amazon_Item', $currentItem);
+    	$this->assertEquals('0754512673', $currentItem->ASIN);
+    }
+    
+    /**
+     * Testing if Amazon service component can handle return values where the
+     * item-list is empty (no results found)
+     * 
+     * @group ZF-9547
+     */
+    public function testAmazonComponentHandlesEmptyBookResults()
+    {
+    	$xml = file_get_contents(dirname(__FILE__)."/_files/amazon-response-invalid.xml");
+        $dom = new DOMDocument();
+        $dom->loadXML($xml);
+        
+    	$result = new Zend_Service_Amazon_ResultSet($dom);
+
+    	try {
+    		$result->current();
+    		$this->fail('Expected exception was not triggered');
+    	} catch (Zend_Service_Amazon_Exception $e) {
+			return;
+    	}
+    }
 }

+ 1 - 0
tests/Zend/Service/Amazon/_files/amazon-response-invalid.xml

@@ -0,0 +1 @@
+<?xml version="1.0" ?><ItemSearchResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2005-10-05"><OperationRequest><HTTPHeaders><Header Name="UserAgent" Value="Zend_Http_Client"></Header></HTTPHeaders><RequestId>ae1b57b9-ac1c-4408-87f2-942e72630361</RequestId><Arguments><Argument Name="Operation" Value="ItemSearch"></Argument><Argument Name="Service" Value="AWSECommerceService"></Argument><Argument Name="Power" Value="isbn:0750640162"></Argument><Argument Name="AWSAccessKeyId" Value="API_KEY"></Argument><Argument Name="Timestamp" Value="2010-03-26T19:26:31Z"></Argument><Argument Name="Signature" Value="A0ThHMQTqYixyc6aDFO6bdbRUEXc77E/k8nEKgfqY70="></Argument><Argument Name="ResponseGroup" Value="Large,ItemAttributes,Images,EditorialReview,Request"></Argument><Argument Name="SearchIndex" Value="Books"></Argument><Argument Name="Version" Value="2005-10-05"></Argument></Arguments><RequestProcessingTime>0.0410670000000000</RequestProcessingTime></OperationRequest><Items><Request><IsValid>True</IsValid><ItemSearchRequest><Condition>New</Condition><DeliveryMethod>Ship</DeliveryMethod><MerchantId>Amazon</MerchantId><Power>isbn:0750640162</Power><ResponseGroup>Large</ResponseGroup><ResponseGroup>ItemAttributes</ResponseGroup><ResponseGroup>Images</ResponseGroup><ResponseGroup>EditorialReview</ResponseGroup><ResponseGroup>Request</ResponseGroup><SearchIndex>Books</SearchIndex></ItemSearchRequest></Request><TotalResults>1</TotalResults><TotalPages>1</TotalPages></Items></ItemSearchResponse>

Різницю між файлами не показано, бо вона завелика
+ 0 - 0
tests/Zend/Service/Amazon/_files/amazon-response-valid.xml


Деякі файли не було показано, через те що забагато файлів було змінено