Skip to content

Commit 38d140a

Browse files
committed
feat: AJDA-2680 add detailSubscription() to SubscriptionClient
1 parent a1c9e71 commit 38d140a

3 files changed

Lines changed: 62 additions & 0 deletions

File tree

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,9 @@ foreach ($subscriptions as $subscription) {
6969
echo $subscription->getId() . ': ' . $subscription->getEvent() . "\n";
7070
}
7171

72+
// fetch a single subscription by ID
73+
$detail = $subscriptionClient->detailSubscription($created->getId());
74+
7275
// delete a subscription
7376
$subscriptionClient->deleteSubscription($created->getId());
7477
```

src/SubscriptionClient.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,15 @@ public function deleteSubscription(string $id): void
5151
$this->sendRequest($request);
5252
}
5353

54+
public function detailSubscription(string $id): ResponseSubscription
55+
{
56+
$request = new Request(
57+
'GET',
58+
'project-subscriptions/' . rawurlencode($id),
59+
);
60+
return new ResponseSubscription($this->sendRequest($request));
61+
}
62+
5463
/**
5564
* @return array<ResponseSubscription>
5665
*/

tests/SubscriptionClientFunctionalTest.php

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,51 @@ public function testDeleteSubscriptionHeaders(): void
146146
);
147147
}
148148

149+
public function testDetailSubscriptionHeaders(): void
150+
{
151+
$mock = new MockHandler([
152+
new Response(
153+
200,
154+
['Content-Type' => 'application/json'],
155+
(string) json_encode([
156+
'id' => 'subscription-123',
157+
'event' => 'job-failed',
158+
'filters' => [
159+
['field' => 'project.id', 'value' => '123'],
160+
],
161+
'recipient' => ['channel' => 'email', 'address' => 'a@example.com'],
162+
]),
163+
),
164+
]);
165+
$requestHistory = [];
166+
$history = Middleware::history($requestHistory);
167+
$stack = HandlerStack::create($mock);
168+
$stack->push($history);
169+
$client = new SubscriptionClient(
170+
'https://example.com/',
171+
'testToken',
172+
['handler' => $stack, 'backoffMaxTries' => 3, 'userAgent' => 'Test'],
173+
);
174+
175+
$result = $client->detailSubscription('subscription-123');
176+
177+
/** @var Request $request */
178+
$request = $requestHistory[0]['request'];
179+
self::assertSame('GET', $request->getMethod());
180+
self::assertSame('https://example.com/project-subscriptions/subscription-123', (string) $request->getUri());
181+
self::assertSame(
182+
['User-Agent', 'X-StorageApi-Token', 'Host'],
183+
array_keys($request->getHeaders()),
184+
);
185+
186+
self::assertSame('subscription-123', $result->getId());
187+
self::assertSame('job-failed', $result->getEvent());
188+
self::assertSame('project.id', $result->getFilters()[0]->getField());
189+
self::assertSame('123', $result->getFilters()[0]->getValue());
190+
self::assertSame('email', $result->getRecipientChannel());
191+
self::assertSame('a@example.com', $result->getRecipientAddress());
192+
}
193+
149194
public function testListSubscriptionsHeaders(): void
150195
{
151196
$responseBody = json_encode([
@@ -217,6 +262,11 @@ public function testListAndDeleteSubscriptionLifecycle(): void
217262
));
218263
self::assertNotEmpty($created->getId());
219264

265+
// detail — must return the same subscription
266+
$detail = $client->detailSubscription($created->getId());
267+
self::assertSame($created->getId(), $detail->getId());
268+
self::assertSame('job-failed', $detail->getEvent());
269+
220270
// list — must contain the new subscription
221271
$beforeDelete = $client->listSubscriptions();
222272
self::assertContainsOnlyInstancesOf(

0 commit comments

Comments
 (0)