diff --git a/src/Client/ScheduleClient.php b/src/Client/ScheduleClient.php index 923809774..aebeb5a31 100644 --- a/src/Client/ScheduleClient.php +++ b/src/Client/ScheduleClient.php @@ -144,11 +144,13 @@ public function getHandle(string $scheduleID, ?string $namespace = null): Schedu public function listSchedules( ?string $namespace = null, int $pageSize = 0, + string $query = '', ): Paginator { // Build request $request = (new ListSchedulesRequest()) ->setNamespace($namespace ?? $this->clientOptions->namespace) - ->setMaximumPageSize($pageSize); + ->setMaximumPageSize($pageSize) + ->setQuery($query); $loader = function (ListSchedulesRequest $request): \Generator { do { diff --git a/src/Client/ScheduleClientInterface.php b/src/Client/ScheduleClientInterface.php index 00a999bdc..db7241dff 100644 --- a/src/Client/ScheduleClientInterface.php +++ b/src/Client/ScheduleClientInterface.php @@ -46,8 +46,9 @@ public function getHandle(string $scheduleID, ?string $namespace = null): Schedu * * @param non-empty-string|null $namespace If null, the preconfigured namespace will be used. * @param int<0, max> $pageSize Maximum number of Schedule info per page. + * @param string $query Temporal Visibility Query. {@link https://docs.temporal.io/visibility#list-filter} * * @return Paginator */ - public function listSchedules(?string $namespace = null, int $pageSize = 0): Paginator; + public function listSchedules(?string $namespace = null, int $pageSize = 0, string $query = ''): Paginator; } diff --git a/tests/Acceptance/Extra/Schedule/ScheduleClientTest.php b/tests/Acceptance/Extra/Schedule/ScheduleClientTest.php new file mode 100644 index 000000000..a11cbdb5a --- /dev/null +++ b/tests/Acceptance/Extra/Schedule/ScheduleClientTest.php @@ -0,0 +1,60 @@ + $handle */ + $handle = []; + // Create a new schedules + for ($i = 0; $i < 12; $i++) { + $handle[] = $client->createSchedule( + Schedule::new() + ->withAction(StartWorkflowAction::new('TestWorkflow')) + ->withSpec(ScheduleSpec::new()->withStartTime('+1 hour')) + ->withState(ScheduleState::new()->withPaused(true)), + ScheduleOptions::new() + ->withSearchAttributes( + EncodedCollection::fromValues([ + 'bar' => $i % 2 === 0 ? 4242 : 24, + ]) + ) + ); + } + + try { + $paginator = $client->listSchedules( + pageSize: 5, + query: 'bar = 4242' + ); + + $this->assertCount(5, $paginator->getPageItems()); + + $next = $paginator->getNextPage(); + $this->assertNotNull($next); + $this->assertCount(1, $next->getPageItems()); + } finally { + foreach ($handle as $h) { + $h->delete(); + } + } + } +} diff --git a/tests/Acceptance/Extra/Schedule/ScheduleUpdateTest.php b/tests/Acceptance/Extra/Schedule/ScheduleUpdateTest.php index 33ee56fc6..118947516 100644 --- a/tests/Acceptance/Extra/Schedule/ScheduleUpdateTest.php +++ b/tests/Acceptance/Extra/Schedule/ScheduleUpdateTest.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Temporal\Tests\Acceptance\Extra\Update\DynamicUpdate; +namespace Temporal\Tests\Acceptance\Extra\Update\ScheduleUpdate; use PHPUnit\Framework\Attributes\Test; use Temporal\Client\Schedule\Action\StartWorkflowAction;