From ce3c36d4669ca536ccd915150776b08ab1f1bc40 Mon Sep 17 00:00:00 2001 From: Tim Otten Date: Thu, 13 Oct 2022 23:32:46 +0100 Subject: [PATCH] ClaimItems API - Optionally return the "run as" (contact ID/domain ID) --- Civi/Api4/Action/Queue/ClaimItems.php | 4 ++++ tests/phpunit/api/v4/Entity/QueueTest.php | 17 +++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/Civi/Api4/Action/Queue/ClaimItems.php b/Civi/Api4/Action/Queue/ClaimItems.php index 2855c02f2c..fa8eadcf5f 100644 --- a/Civi/Api4/Action/Queue/ClaimItems.php +++ b/Civi/Api4/Action/Queue/ClaimItems.php @@ -71,6 +71,10 @@ class ClaimItems extends \Civi\Api4\Generic\AbstractAction { $array['data'] = (array) $item->data; break; + case 'run_as': + $array['run_as'] = ($item->data instanceof \CRM_Queue_Task) ? $item->data->runAs : NULL; + break; + case 'queue': $array['queue'] = $this->queue; break; diff --git a/tests/phpunit/api/v4/Entity/QueueTest.php b/tests/phpunit/api/v4/Entity/QueueTest.php index 9fcb94e924..4252c9617f 100644 --- a/tests/phpunit/api/v4/Entity/QueueTest.php +++ b/tests/phpunit/api/v4/Entity/QueueTest.php @@ -203,6 +203,23 @@ class QueueTest extends Api4TestBase { $this->assertTrue(is_numeric($first['id'])); $this->assertEquals($queueName, $first['queue']); $this->assertFalse(isset($first['data'])); + $this->assertFalse(isset($first['run_as'])); + } + + public function testSelectRunAs() { + $queueName = 'QueueTest_' . md5(random_bytes(32)) . '_select'; + $queue = \Civi::queue($queueName, ['type' => 'SqlParallel', 'runner' => 'task', 'error' => 'delete']); + $this->assertQueueStats(0, 0, 0, $queue); + + $task = new \CRM_Queue_Task([QueueTest::class, 'doSomething'], ['first']); + $task->runAs = ['contactId' => 99, 'domainId' => 1]; + \Civi::queue($queueName)->createItem($task); + + $first = Queue::claimItems()->setQueue($queueName)->setSelect(['id', 'queue', 'run_as'])->execute()->single(); + $this->assertTrue(is_numeric($first['id'])); + $this->assertEquals($queueName, $first['queue']); + $this->assertFalse(isset($first['data'])); + $this->assertEquals(['contactId' => 99, 'domainId' => 1], $first['run_as']); } public function testEmptyPoll() { -- 2.25.1