More complete, more straightforward JobQueueMemoryTest
authorThiemo Mättig <thiemo.maettig@wikimedia.de>
Fri, 15 Jan 2016 09:28:30 +0000 (10:28 +0100)
committerThiemo Mättig <thiemo.maettig@wikimedia.de>
Fri, 15 Jan 2016 09:28:30 +0000 (10:28 +0100)
I created a basic test yesterday to cover two bugs. Now the test covers
all public methods. I was also able to get rid of the test double.

Change-Id: I53110280e3ef7b7a72d175b11b7fc4ccf1d648b3

includes/jobqueue/JobQueueMemory.php
tests/phpunit/includes/jobqueue/JobQueueMemoryTest.php

index d9b30c7..7dad748 100644 (file)
@@ -33,10 +33,15 @@ class JobQueueMemory extends JobQueue {
        /** @var array[] */
        protected static $data = array();
 
+       /**
+        * @see JobQueue::doBatchPush
+        *
+        * @param IJobSpecification[] $jobs
+        * @param int $flags
+        */
        protected function doBatchPush( array $jobs, $flags ) {
                $unclaimed =& $this->getQueueData( 'unclaimed', array() );
 
-               /** @var IJobSpecification[] $jobs */
                foreach ( $jobs as $job ) {
                        if ( $job->ignoreDuplicates() ) {
                                $sha1 = Wikimedia\base_convert(
@@ -52,30 +57,60 @@ class JobQueueMemory extends JobQueue {
                }
        }
 
+       /**
+        * @see JobQueue::supportedOrders
+        *
+        * @return string[]
+        */
        protected function supportedOrders() {
                return array( 'random', 'timestamp', 'fifo' );
        }
 
+       /**
+        * @see JobQueue::optimalOrder
+        *
+        * @return string
+        */
        protected function optimalOrder() {
                return 'fifo';
        }
 
+       /**
+        * @see JobQueue::doIsEmpty
+        *
+        * @return bool
+        */
        protected function doIsEmpty() {
                return ( $this->doGetSize() == 0 );
        }
 
+       /**
+        * @see JobQueue::doGetSize
+        *
+        * @return int
+        */
        protected function doGetSize() {
                $unclaimed = $this->getQueueData( 'unclaimed' );
 
                return $unclaimed ? count( $unclaimed ) : 0;
        }
 
+       /**
+        * @see JobQueue::doGetAcquiredCount
+        *
+        * @return int
+        */
        protected function doGetAcquiredCount() {
                $claimed = $this->getQueueData( 'claimed' );
 
                return $claimed ? count( $claimed ) : 0;
        }
 
+       /**
+        * @see JobQueue::doPop
+        *
+        * @return Job|bool
+        */
        protected function doPop() {
                if ( $this->doGetSize() == 0 ) {
                        return false;
@@ -103,6 +138,11 @@ class JobQueueMemory extends JobQueue {
                return $job;
        }
 
+       /**
+        * @see JobQueue::doAck
+        *
+        * @param Job $job
+        */
        protected function doAck( Job $job ) {
                if ( $this->getAcquiredCount() == 0 ) {
                        return;
@@ -112,6 +152,9 @@ class JobQueueMemory extends JobQueue {
                unset( $claimed[$job->metadata['claimId']] );
        }
 
+       /**
+        * @see JobQueue::doDelete
+        */
        protected function doDelete() {
                if ( isset( self::$data[$this->type][$this->wiki] ) ) {
                        unset( self::$data[$this->type][$this->wiki] );
@@ -121,6 +164,11 @@ class JobQueueMemory extends JobQueue {
                }
        }
 
+       /**
+        * @see JobQueue::getAllQueuedJobs
+        *
+        * @return Iterator of Job objects.
+        */
        public function getAllQueuedJobs() {
                $unclaimed = $this->getQueueData( 'unclaimed' );
                if ( !$unclaimed ) {
@@ -136,6 +184,11 @@ class JobQueueMemory extends JobQueue {
                );
        }
 
+       /**
+        * @see JobQueue::getAllAcquiredJobs
+        *
+        * @return Iterator of Job objects.
+        */
        public function getAllAcquiredJobs() {
                $claimed = $this->getQueueData( 'claimed' );
                if ( !$claimed ) {
@@ -151,10 +204,21 @@ class JobQueueMemory extends JobQueue {
                );
        }
 
+       /**
+        * @param IJobSpecification $spec
+        *
+        * @return Job
+        */
        public function jobFromSpecInternal( IJobSpecification $spec ) {
                return Job::factory( $spec->getType(), $spec->getTitle(), $spec->getParams() );
        }
 
+       /**
+        * @param string $field
+        * @param mixed $init
+        *
+        * @return mixed
+        */
        private function &getQueueData( $field, $init = null ) {
                if ( !isset( self::$data[$this->type][$this->wiki][$field] ) ) {
                        if ( $init !== null ) {
index a9f7e0e..178a6a6 100644 (file)
  */
 class JobQueueMemoryTest extends PHPUnit_Framework_TestCase {
 
-       public function testGetAllQueuedJobs() {
-               $instance = JobQueueMemoryDouble::newInstance( array(
-                       'wiki' => null,
-                       'type' => null,
+       /**
+        * @return JobQueueMemory
+        */
+       private function newJobQueue() {
+               return JobQueue::factory( array(
+                       'class' => 'JobQueueMemory',
+                       'wiki' => wfWikiID(),
+                       'type' => 'null',
                ) );
-               $actual = $instance->getAllQueuedJobs();
-               $this->assertEquals( new ArrayIterator(), $actual );
        }
 
-}
+       private function newJobSpecification() {
+               return new JobSpecification(
+                       'null',
+                       array( 'customParameter' => null ),
+                       array(),
+                       Title::newFromText( 'Custom title' )
+               );
+       }
+
+       public function testGetAllQueuedJobs() {
+               $queue = $this->newJobQueue();
+               $this->assertCount( 0, $queue->getAllQueuedJobs() );
 
-class JobQueueMemoryDouble extends JobQueueMemory {
+               $queue->push( $this->newJobSpecification() );
+               $this->assertCount( 1, $queue->getAllQueuedJobs() );
+       }
+
+       public function testGetAllAcquiredJobs() {
+               $queue = $this->newJobQueue();
+               $this->assertCount( 0, $queue->getAllAcquiredJobs() );
+
+               $queue->push( $this->newJobSpecification() );
+               $this->assertCount( 0, $queue->getAllAcquiredJobs() );
+
+               $queue->pop();
+               $this->assertCount( 1, $queue->getAllAcquiredJobs() );
+       }
 
-       public static function newInstance( array $params ) {
-               return new self( $params );
+       public function testJobFromSpecInternal() {
+               $queue = $this->newJobQueue();
+               $job = $queue->jobFromSpecInternal( $this->newJobSpecification() );
+               $this->assertInstanceOf( 'Job', $job );
+               $this->assertSame( 'null', $job->getType() );
+               $this->assertArrayHasKey( 'customParameter', $job->getParams() );
+               $this->assertSame( 'Custom title', $job->getTitle()->getText() );
        }
 
 }