diff --git a/lib/Models/ScheduledTaskSubscriber.php b/lib/Models/ScheduledTaskSubscriber.php index c0a9debb89..a967b22876 100644 --- a/lib/Models/ScheduledTaskSubscriber.php +++ b/lib/Models/ScheduledTaskSubscriber.php @@ -21,7 +21,7 @@ class ScheduledTaskSubscriber extends Model { $task_subscriber->task_id = $data['task_id']; $task_subscriber->subscriber_id = $data['subscriber_id']; - $task_subscriber->processed = self::STATUS_TO_PROCESS; + $task_subscriber->processed = !empty($data['processed']) ? self::STATUS_PROCESSED : self::STATUS_TO_PROCESS; $task_subscriber->save(); return $task_subscriber; diff --git a/tests/unit/Models/ScheduledTaskSubscriberTest.php b/tests/unit/Models/ScheduledTaskSubscriberTest.php new file mode 100644 index 0000000000..8c9ce081b6 --- /dev/null +++ b/tests/unit/Models/ScheduledTaskSubscriberTest.php @@ -0,0 +1,75 @@ +task_id = 123; + $this->subscriber_id = 456; + $this->task_subscriber = ScheduledTaskSubscriber::createOrUpdate(array( + 'task_id' => $this->task_id, + 'subscriber_id' => $this->subscriber_id + )); + } + + function testItCanBeCreated() { + expect($this->task_subscriber->task_id)->equals($this->task_id); + expect($this->task_subscriber->subscriber_id)->equals($this->subscriber_id); + expect($this->task_subscriber->processed)->equals(ScheduledTaskSubscriber::STATUS_TO_PROCESS); + } + + function testItCanBeUpdated() { + $task_subscriber = ScheduledTaskSubscriber::createOrUpdate(array( + 'task_id' => $this->task_id, + 'subscriber_id' => $this->subscriber_id, + 'processed' => ScheduledTaskSubscriber::STATUS_PROCESSED + )); + expect($task_subscriber->processed)->equals(ScheduledTaskSubscriber::STATUS_PROCESSED); + } + + function testItCanAddMultipleSubscribers() { + ScheduledTaskSubscriber::deleteMany(); + $subscriber_ids = array(321, 654, 987); + ScheduledTaskSubscriber::addSubscribers($this->task_id, $subscriber_ids); + $task_subscribers = ScheduledTaskSubscriber::where('task_id', $this->task_id) + ->orderByAsc('subscriber_id') + ->findMany(); + expect(count($task_subscribers))->equals(count($subscriber_ids)); + expect($task_subscribers[0]->subscriber_id)->equals($subscriber_ids[0]); + expect($task_subscribers[1]->subscriber_id)->equals($subscriber_ids[1]); + expect($task_subscribers[2]->subscriber_id)->equals($subscriber_ids[2]); + } + + function testItCanGetToProcessCount() { + $count = ScheduledTaskSubscriber::getToProcessCount($this->task_id); + expect($count)->equals(1); + $this->task_subscriber->processed = ScheduledTaskSubscriber::STATUS_PROCESSED; + $this->task_subscriber->save(); + $count = ScheduledTaskSubscriber::getToProcessCount($this->task_id); + expect($count)->equals(0); + } + + function testItCanGetProcessedCount() { + $count = ScheduledTaskSubscriber::getProcessedCount($this->task_id); + expect($count)->equals(0); + $this->task_subscriber->processed = ScheduledTaskSubscriber::STATUS_PROCESSED; + $this->task_subscriber->save(); + $count = ScheduledTaskSubscriber::getProcessedCount($this->task_id); + expect($count)->equals(1); + } + + function testItCanGetTotalCount() { + ScheduledTaskSubscriber::createOrUpdate(array( + 'task_id' => $this->task_id, + 'subscriber_id' => 555, + 'processed' => ScheduledTaskSubscriber::STATUS_PROCESSED + )); + $count = ScheduledTaskSubscriber::getTotalCount($this->task_id); + expect($count)->equals(2); + } + + function _after() { + \ORM::raw_execute('TRUNCATE ' . ScheduledTaskSubscriber::$_table); + } +} diff --git a/tests/unit/Models/ScheduledTaskTest.php b/tests/unit/Models/ScheduledTaskTest.php new file mode 100644 index 0000000000..ddc5f71f01 --- /dev/null +++ b/tests/unit/Models/ScheduledTaskTest.php @@ -0,0 +1,27 @@ +task = ScheduledTask::create(); + $this->task->hydrate(array( + 'status' => ScheduledTask::STATUS_SCHEDULED + )); + $this->task->save(); + } + + function testItCanBeCompleted() { + $this->task->complete(); + expect($this->task->status)->equals(ScheduledTask::STATUS_COMPLETED); + } + + function testItSetsDefaultPriority() { + expect($this->task->priority)->equals(ScheduledTask::PRIORITY_MEDIUM); + } + + function _after() { + \ORM::raw_execute('TRUNCATE ' . ScheduledTask::$_table); + } +} diff --git a/tests/unit/Tasks/Subscribers/BatchIteratorTest.php b/tests/unit/Tasks/Subscribers/BatchIteratorTest.php new file mode 100644 index 0000000000..a087be70ce --- /dev/null +++ b/tests/unit/Tasks/Subscribers/BatchIteratorTest.php @@ -0,0 +1,56 @@ +task_id = 123; + $this->batch_size = 2; + $this->subscriber_count = 5; + for($i = 0; $i < $this->subscriber_count; $i++) { + ScheduledTaskSubscriber::createOrUpdate(array( + 'task_id' => $this->task_id, + 'subscriber_id' => $i + 1, + )); + } + $this->iterator = new BatchIterator($this->task_id, $this->batch_size); + } + + function testItFailsToConstructWithWrongArguments() { + try { + $iterator = new BatchIterator(0, 0); + $this->fail('Exception was not thrown'); + } catch(\Exception $e) { + // No exception handling necessary + } + } + + function testItConstructs() { + $iterator = new BatchIterator(123, 456); + expect_that($iterator instanceof BatchIterator); + } + + function testItIterates() { + $iterations = ceil($this->subscriber_count / $this->batch_size); + $i = 0; + foreach($this->iterator as $batch) { + $i++; + if($i < $iterations) { + expect(count($batch))->equals($this->batch_size); + } else { + expect(count($batch))->lessOrEquals($this->batch_size); + } + } + expect($i)->equals($iterations); + } + + function testItCanBeCounted() { + expect(count($this->iterator))->equals($this->subscriber_count); + } + + function _after() { + \ORM::raw_execute('TRUNCATE ' . ScheduledTaskSubscriber::$_table); + } +}