Skip to content

Commit 34e49ca

Browse files
authored
Use namespace from ClientOptions on creating of a Schedule (#549)
1 parent bf33938 commit 34e49ca

File tree

5 files changed

+78
-6
lines changed

5 files changed

+78
-6
lines changed

psalm-baseline.xml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,12 +109,23 @@
109109
<code><![CDATA[$workflowType]]></code>
110110
</PropertyNotSetInConstructor>
111111
</file>
112+
<file src="src/Client/Schedule/ScheduleOptions.php">
113+
<DeprecatedProperty>
114+
<code><![CDATA[$this->namespace]]></code>
115+
</DeprecatedProperty>
116+
</file>
112117
<file src="src/Client/Schedule/Spec/ScheduleSpec.php">
113118
<DeprecatedProperty>
114119
<code><![CDATA[$this->excludeCalendarList]]></code>
115120
<code><![CDATA[$this->excludeCalendarList]]></code>
116121
</DeprecatedProperty>
117122
</file>
123+
<file src="src/Client/ScheduleClient.php">
124+
<DeprecatedProperty>
125+
<code><![CDATA[$options->namespace]]></code>
126+
<code><![CDATA[$options->namespace]]></code>
127+
</DeprecatedProperty>
128+
</file>
118129
<file src="src/Client/Update/UpdateHandle.php">
119130
<PossiblyNullArgument>
120131
<code><![CDATA[$result->getSuccess()]]></code>

src/Client/Schedule/ScheduleOptions.php

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,23 @@ final class ScheduleOptions
1616
{
1717
use CloneWith;
1818

19-
public readonly string $namespace;
20-
public readonly bool $triggerImmediately;
19+
/**
20+
* @deprecated will be removed in the next major version.
21+
*/
22+
public readonly ?string $namespace;
2123

2224
/**
2325
* @var list<BackfillPeriod>
2426
*/
2527
public readonly array $backfills;
2628

29+
public readonly bool $triggerImmediately;
2730
public readonly EncodedCollection $memo;
2831
public readonly EncodedCollection $searchAttributes;
2932

3033
private function __construct()
3134
{
32-
$this->namespace = 'default';
35+
$this->namespace = null;
3336
$this->triggerImmediately = false;
3437
$this->backfills = [];
3538
$this->memo = EncodedCollection::empty();
@@ -41,6 +44,10 @@ public static function new(): self
4144
return new self();
4245
}
4346

47+
/**
48+
* @deprecated Configure the namespace on the {@see \Temporal\Client\ClientOptions} instead
49+
* when creating the {@see \Temporal\Client\ScheduleClient}.
50+
*/
4451
public function withNamespace(string $namespace): self
4552
{
4653
/** @see self::$namespace */

src/Client/ScheduleClient.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ public function createSchedule(
8181
$request = new CreateScheduleRequest();
8282
$request
8383
->setRequestId(Uuid::v4())
84-
->setNamespace($options->namespace)
84+
->setNamespace($options->namespace ?? $this->clientOptions->namespace)
8585
->setScheduleId($scheduleId)
8686
->setIdentity($this->clientOptions->identity);
8787

@@ -123,7 +123,7 @@ public function createSchedule(
123123
$this->converter,
124124
$this->marshaller,
125125
$this->protoConverter,
126-
$options->namespace,
126+
$options->namespace ?? $this->clientOptions->namespace,
127127
$scheduleId,
128128
);
129129
}

tests/Unit/Schedule/ScheduleClientTestCase.php

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use Temporal\Client\Schedule\Policy\ScheduleOverlapPolicy;
1818
use Temporal\Client\Schedule\Policy\SchedulePolicies;
1919
use Temporal\Client\Schedule\Schedule;
20+
use Temporal\Client\Schedule\ScheduleOptions;
2021
use Temporal\Client\Schedule\Spec\CalendarSpec;
2122
use Temporal\Client\Schedule\Spec\Range;
2223
use Temporal\Client\Schedule\Spec\ScheduleSpec;
@@ -63,6 +64,59 @@ public function testCreateSchedule(): void
6364
);
6465
}
6566

67+
public function testCreateScheduleNamespaceFromOptions(): void
68+
{
69+
$testContext = new class {
70+
public CreateScheduleRequest $request;
71+
};
72+
// Prepare mocks
73+
$clientMock = $this->createMock(ServiceClientInterface::class);
74+
$clientMock->expects($this->once())
75+
->method('CreateSchedule')
76+
->with($this->callback(fn(CreateScheduleRequest $request) => $testContext->request = $request or true))
77+
->willReturn((new CreateScheduleResponse())->setConflictToken('test-conflict-token'));
78+
$scheduleClient = $this->createScheduleClient(
79+
client: $clientMock,
80+
);
81+
$scheduleDto = $this->getScheduleDto();
82+
83+
$scheduleClient->createSchedule(
84+
$scheduleDto,
85+
options: ScheduleOptions::new()->withNamespace('test-namespace'),
86+
scheduleId: 'test-id',
87+
);
88+
89+
$this->assertTrue(isset($testContext->request));
90+
$this->assertSame('test-namespace', $testContext->request->getNamespace());
91+
}
92+
93+
public function testCreateScheduleNamespaceFromServiceClient(): void
94+
{
95+
$testContext = new class {
96+
public CreateScheduleRequest $request;
97+
};
98+
// Prepare mocks
99+
$clientMock = $this->createMock(ServiceClientInterface::class);
100+
$clientMock->expects($this->once())
101+
->method('CreateSchedule')
102+
->with($this->callback(fn(CreateScheduleRequest $request) => $testContext->request = $request or true))
103+
->willReturn((new CreateScheduleResponse())->setConflictToken('test-conflict-token'));
104+
$scheduleClient = $this->createScheduleClient(
105+
client: $clientMock,
106+
clientOptions: (new ClientOptions())->withNamespace('test-namespace'),
107+
);
108+
$scheduleDto = $this->getScheduleDto();
109+
110+
$scheduleClient->createSchedule(
111+
$scheduleDto,
112+
options: ScheduleOptions::new(),
113+
scheduleId: 'test-id',
114+
);
115+
116+
$this->assertTrue(isset($testContext->request));
117+
$this->assertSame('test-namespace', $testContext->request->getNamespace());
118+
}
119+
66120
public function testCreateScheduleWithoutWorkflowId(): void
67121
{
68122
$testContext = new class {

tests/Unit/Schedule/ScheduleOptionsTestCase.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public function testWithNamespace(): void
2222
$new = $init->withNamespace('foo');
2323

2424
$this->assertNotSame($init, $new, 'immutable method clones object');
25-
$this->assertSame('default', $init->namespace, 'default value was not changed');
25+
$this->assertNull($init->namespace, 'default value was not changed');
2626
$this->assertSame('foo', $new->namespace);
2727
}
2828

0 commit comments

Comments
 (0)