diff --git a/psalm-baseline.xml b/psalm-baseline.xml
index 73bbf9d6..365428c8 100644
--- a/psalm-baseline.xml
+++ b/psalm-baseline.xml
@@ -109,12 +109,23 @@
+
+
+ namespace]]>
+
+
excludeCalendarList]]>
excludeCalendarList]]>
+
+
+ namespace]]>
+ namespace]]>
+
+
getSuccess()]]>
diff --git a/src/Client/Schedule/ScheduleOptions.php b/src/Client/Schedule/ScheduleOptions.php
index ffdbb0d2..247b8a9f 100644
--- a/src/Client/Schedule/ScheduleOptions.php
+++ b/src/Client/Schedule/ScheduleOptions.php
@@ -16,20 +16,23 @@ final class ScheduleOptions
{
use CloneWith;
- public readonly string $namespace;
- public readonly bool $triggerImmediately;
+ /**
+ * @deprecated will be removed in the next major version.
+ */
+ public readonly ?string $namespace;
/**
* @var list
*/
public readonly array $backfills;
+ public readonly bool $triggerImmediately;
public readonly EncodedCollection $memo;
public readonly EncodedCollection $searchAttributes;
private function __construct()
{
- $this->namespace = 'default';
+ $this->namespace = null;
$this->triggerImmediately = false;
$this->backfills = [];
$this->memo = EncodedCollection::empty();
@@ -41,6 +44,10 @@ public static function new(): self
return new self();
}
+ /**
+ * @deprecated Configure the namespace on the {@see \Temporal\Client\ClientOptions} instead
+ * when creating the {@see \Temporal\Client\ScheduleClient}.
+ */
public function withNamespace(string $namespace): self
{
/** @see self::$namespace */
diff --git a/src/Client/ScheduleClient.php b/src/Client/ScheduleClient.php
index aebeb5a3..94c2a9d1 100644
--- a/src/Client/ScheduleClient.php
+++ b/src/Client/ScheduleClient.php
@@ -81,7 +81,7 @@ public function createSchedule(
$request = new CreateScheduleRequest();
$request
->setRequestId(Uuid::v4())
- ->setNamespace($options->namespace)
+ ->setNamespace($options->namespace ?? $this->clientOptions->namespace)
->setScheduleId($scheduleId)
->setIdentity($this->clientOptions->identity);
@@ -123,7 +123,7 @@ public function createSchedule(
$this->converter,
$this->marshaller,
$this->protoConverter,
- $options->namespace,
+ $options->namespace ?? $this->clientOptions->namespace,
$scheduleId,
);
}
diff --git a/tests/Unit/Schedule/ScheduleClientTestCase.php b/tests/Unit/Schedule/ScheduleClientTestCase.php
index 66cfbd55..af692a6b 100644
--- a/tests/Unit/Schedule/ScheduleClientTestCase.php
+++ b/tests/Unit/Schedule/ScheduleClientTestCase.php
@@ -17,6 +17,7 @@
use Temporal\Client\Schedule\Policy\ScheduleOverlapPolicy;
use Temporal\Client\Schedule\Policy\SchedulePolicies;
use Temporal\Client\Schedule\Schedule;
+use Temporal\Client\Schedule\ScheduleOptions;
use Temporal\Client\Schedule\Spec\CalendarSpec;
use Temporal\Client\Schedule\Spec\Range;
use Temporal\Client\Schedule\Spec\ScheduleSpec;
@@ -63,6 +64,59 @@ public function testCreateSchedule(): void
);
}
+ public function testCreateScheduleNamespaceFromOptions(): void
+ {
+ $testContext = new class {
+ public CreateScheduleRequest $request;
+ };
+ // Prepare mocks
+ $clientMock = $this->createMock(ServiceClientInterface::class);
+ $clientMock->expects($this->once())
+ ->method('CreateSchedule')
+ ->with($this->callback(fn(CreateScheduleRequest $request) => $testContext->request = $request or true))
+ ->willReturn((new CreateScheduleResponse())->setConflictToken('test-conflict-token'));
+ $scheduleClient = $this->createScheduleClient(
+ client: $clientMock,
+ );
+ $scheduleDto = $this->getScheduleDto();
+
+ $scheduleClient->createSchedule(
+ $scheduleDto,
+ options: ScheduleOptions::new()->withNamespace('test-namespace'),
+ scheduleId: 'test-id',
+ );
+
+ $this->assertTrue(isset($testContext->request));
+ $this->assertSame('test-namespace', $testContext->request->getNamespace());
+ }
+
+ public function testCreateScheduleNamespaceFromServiceClient(): void
+ {
+ $testContext = new class {
+ public CreateScheduleRequest $request;
+ };
+ // Prepare mocks
+ $clientMock = $this->createMock(ServiceClientInterface::class);
+ $clientMock->expects($this->once())
+ ->method('CreateSchedule')
+ ->with($this->callback(fn(CreateScheduleRequest $request) => $testContext->request = $request or true))
+ ->willReturn((new CreateScheduleResponse())->setConflictToken('test-conflict-token'));
+ $scheduleClient = $this->createScheduleClient(
+ client: $clientMock,
+ clientOptions: (new ClientOptions())->withNamespace('test-namespace'),
+ );
+ $scheduleDto = $this->getScheduleDto();
+
+ $scheduleClient->createSchedule(
+ $scheduleDto,
+ options: ScheduleOptions::new(),
+ scheduleId: 'test-id',
+ );
+
+ $this->assertTrue(isset($testContext->request));
+ $this->assertSame('test-namespace', $testContext->request->getNamespace());
+ }
+
public function testCreateScheduleWithoutWorkflowId(): void
{
$testContext = new class {
diff --git a/tests/Unit/Schedule/ScheduleOptionsTestCase.php b/tests/Unit/Schedule/ScheduleOptionsTestCase.php
index 923e75f6..cbb59e11 100644
--- a/tests/Unit/Schedule/ScheduleOptionsTestCase.php
+++ b/tests/Unit/Schedule/ScheduleOptionsTestCase.php
@@ -22,7 +22,7 @@ public function testWithNamespace(): void
$new = $init->withNamespace('foo');
$this->assertNotSame($init, $new, 'immutable method clones object');
- $this->assertSame('default', $init->namespace, 'default value was not changed');
+ $this->assertNull($init->namespace, 'default value was not changed');
$this->assertSame('foo', $new->namespace);
}