diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 381746f2d..f02a508da 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -27,7 +27,7 @@ Test Instructions ### To run unit tests: ```bash -phpunit +vendor/bin/phpunit ``` ### To run the full suite of acceptance tests: diff --git a/composer.json b/composer.json index c149f3f33..eed385e82 100644 --- a/composer.json +++ b/composer.json @@ -26,6 +26,7 @@ "psr/log": "~1.0" }, "require-dev" : { + "phpunit/phpunit": "4.3.*", "guzzle/guzzle": "~3.8", "satooshi/php-coveralls": "0.6.*@dev", "jakub-onderka/php-parallel-lint": "0.*", diff --git a/lib/OpenCloud/Queues/Collection/MessageIterator.php b/lib/OpenCloud/Queues/Collection/MessageIterator.php new file mode 100644 index 000000000..0f4140936 --- /dev/null +++ b/lib/OpenCloud/Queues/Collection/MessageIterator.php @@ -0,0 +1,29 @@ +nextUrl || + ($this->position % $this->getOption('limit.page') == 0); + } +} diff --git a/lib/OpenCloud/Queues/Resource/Queue.php b/lib/OpenCloud/Queues/Resource/Queue.php index 0a65723e9..b6817e0d6 100644 --- a/lib/OpenCloud/Queues/Resource/Queue.php +++ b/lib/OpenCloud/Queues/Resource/Queue.php @@ -22,6 +22,7 @@ use OpenCloud\Common\Http\Message\Formatter; use OpenCloud\Common\Resource\PersistentResource; use OpenCloud\Queues\Exception; +use OpenCloud\Queues\Collection\MessageIterator; use OpenCloud\Common\Metadata; /** @@ -250,7 +251,7 @@ public function createMessages(array $messages) * messages as well as unclaimed messages. If not specified, defaults * to FALSE (i.e. only unclaimed messages are returned). * - * @return Collection + * @return \OpenCloud\Queues\Collection\MessageIterator */ public function listMessages(array $options = array()) { @@ -276,7 +277,7 @@ public function listMessages(array $options = array()) 'limit.page' => 10 ); - return PaginatedIterator::factory($this, $options); + return MessageIterator::factory($this, $options); } /** diff --git a/tests/OpenCloud/Smoke/Unit/AbstractUnit.php b/tests/OpenCloud/Smoke/Unit/AbstractUnit.php index bdf9d2e58..08896aefc 100644 --- a/tests/OpenCloud/Smoke/Unit/AbstractUnit.php +++ b/tests/OpenCloud/Smoke/Unit/AbstractUnit.php @@ -28,7 +28,7 @@ * * @link */ -abstract class AbstractUnit +abstract class AbstractUnit extends \PHPUnit_Framework_TestCase { /** * The credentials cache filename. diff --git a/tests/OpenCloud/Smoke/Unit/Queues.php b/tests/OpenCloud/Smoke/Unit/Queues.php index 5079ed2cc..326e726ae 100644 --- a/tests/OpenCloud/Smoke/Unit/Queues.php +++ b/tests/OpenCloud/Smoke/Unit/Queues.php @@ -17,6 +17,8 @@ namespace OpenCloud\Smoke\Unit; +use OpenCloud\Queues\Resource\Queue; + class Queues extends AbstractUnit implements UnitInterface { const QUEUE_NAME = 'test_queue'; @@ -71,6 +73,7 @@ public function doMessageBlock() $this->step('Messages'); // post + $numMessagesCreated = 0; $this->stepInfo('Create messages for queue %s', $this->queue->getName()); $this->queue->createMessage(array( 'body' => (object) array( @@ -78,26 +81,37 @@ public function doMessageBlock() ), 'ttl' => 300 )); + ++$numMessagesCreated; + + for ($creationBatch = 0; $creationBatch < 3; ++$creationBatch) { + $messages = array(); + for ($messageIndex = 0; $messageIndex < Queue::MAX_POST_MESSAGES; ++$messageIndex) { + $messages[] = array( + 'body' => (object) array('message_number' => ($creationBatch * Queue::MAX_POST_MESSAGES) + $messageIndex + 1), + 'ttl' => mt_rand(300, 600) + ); + ++$numMessagesCreated; + } + $this->queue->createMessages($messages); + } - $this->queue->createMessages(array( - array( - 'body' => (object) array('foo' => 'bar'), - 'ttl' => 700 - ), - array( - 'body' => (object) array('baz' => 'lol'), - 'ttl' => 600 - ) - )); - - // list + // list ( 'echo' => true is needed to list client's own messages) $step = $this->stepInfo('List messages for queue %s', $this->queue->getName()); - $messages = $this->queue->listMessages(); + $messages = $this->queue->listMessages(array( + 'echo' => true + )); $ids = array(); + $numMessagesListed = 0; + $step->stepInfo("%-30s | %-40s", "Message ID", "Message body"); + $step->stepInfo("%-30s | %-40s", str_repeat("-", 30), str_repeat("-", 40)); foreach ($messages as $message) { - $step->stepInfo($message->getId()); + $step->stepInfo("%-30s | %-40s", $message->getId(), json_encode($message->getBody())); $ids[] = $message->getId(); + ++$numMessagesListed; } + $this->stepInfo("Number of messages to be listed: " . $numMessagesCreated); + $this->stepInfo("Number of messages actually listed: " . $numMessagesListed); + $this->assertEquals($numMessagesCreated, $numMessagesListed); array_pop($ids); } diff --git a/tests/OpenCloud/Tests/Queues/Resource/QueueTest.php b/tests/OpenCloud/Tests/Queues/Resource/QueueTest.php index 5237d48a9..5f8e4206d 100644 --- a/tests/OpenCloud/Tests/Queues/Resource/QueueTest.php +++ b/tests/OpenCloud/Tests/Queues/Resource/QueueTest.php @@ -122,7 +122,7 @@ public function test_Get_Message() public function test_List_Message() { $this->assertInstanceOf( - self::COLLECTION_CLASS, + 'OpenCloud\Queues\Collection\MessageIterator', $this->queue->setName('foo')->listMessages(array( 'ids' => array(100, 901, 58) ))