Skip to content

Commit d4979f7

Browse files
committed
Add test coverage for unrecognised push ticket/receipt error codes
See #70
1 parent e1f3f2d commit d4979f7

2 files changed

Lines changed: 73 additions & 0 deletions

File tree

tests/Unit/Request/GetReceiptsRequestTest.php

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
namespace Dru1x\ExpoPush\Tests\Unit\Request;
66

77
use Dru1x\ExpoPush\ExpoPushConnector;
8+
use Dru1x\ExpoPush\PushReceipt\FailedPushReceipt;
9+
use Dru1x\ExpoPush\PushReceipt\PushReceiptErrorCode;
810
use Dru1x\ExpoPush\PushReceipt\PushReceiptIdCollection;
911
use Dru1x\ExpoPush\Request\GetReceiptsRequest;
1012
use OverflowException;
@@ -131,6 +133,40 @@ public function create_dto_from_response_returns_push_receipt_collection(): void
131133
$this->assertEquals('ZZZZZZZZ-ZZZZ-ZZZZ-ZZZZ-ZZZZZZZZZZZZ', $dto->get(2)->id);
132134
}
133135

136+
#[Test]
137+
public function create_dto_from_response_maps_unrecognized_error_code_to_unknown(): void
138+
{
139+
$request = new GetReceiptsRequest(
140+
new PushReceiptIdCollection()
141+
);
142+
143+
$this->mockClient->addResponses([
144+
GetReceiptsRequest::class => MockResponse::make(
145+
body: [
146+
'data' => [
147+
'ZZZZZZZZ-ZZZZ-ZZZZ-ZZZZ-ZZZZZZZZZZZZ' => [
148+
'status' => 'error',
149+
'message' => '"ExponentPushToken[zzzzzzzzzzzzzzzzzzzzzz]" is not a registered push notification recipient',
150+
'details' => [
151+
'error' => 'SomeBrandNewErrorCode',
152+
'expoPushToken' => 'ExponentPushToken[zzzzzzzzzzzzzzzzzzzzzz]',
153+
],
154+
],
155+
],
156+
],
157+
headers: ['Content-Type' => 'application/json']
158+
),
159+
]);
160+
161+
$dto = $request->createDtoFromResponse(
162+
$this->connector->send($request)
163+
);
164+
165+
$receipt = $dto->get(0);
166+
$this->assertInstanceOf(FailedPushReceipt::class, $receipt);
167+
$this->assertEquals(PushReceiptErrorCode::Unknown, $receipt->details->error);
168+
}
169+
134170
#[Test]
135171
public function create_dto_from_response_throws_exception_when_body_cannot_be_decoded(): void
136172
{

tests/Unit/Request/SendNotificationsRequestTest.php

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use Dru1x\ExpoPush\PushMessage\PushMessage;
99
use Dru1x\ExpoPush\PushMessage\PushMessageCollection;
1010
use Dru1x\ExpoPush\PushTicket\FailedPushTicket;
11+
use Dru1x\ExpoPush\PushTicket\PushTicketErrorCode;
1112
use Dru1x\ExpoPush\PushTicket\SuccessfulPushTicket;
1213
use Dru1x\ExpoPush\PushToken\PushToken;
1314
use Dru1x\ExpoPush\Request\SendNotificationsRequest;
@@ -166,6 +167,42 @@ public function create_dto_from_response_returns_push_ticket_collection(): void
166167
$this->assertInstanceOf(FailedPushTicket::class, $ticket3);
167168
}
168169

170+
#[Test]
171+
public function create_dto_from_response_maps_unrecognized_error_code_to_unknown(): void
172+
{
173+
$request = new SendNotificationsRequest(
174+
new PushMessageCollection(
175+
new PushMessage(to: new PushToken('ExponentPushToken[zzzzzzzzzzzzzzzzzzzzzz]')),
176+
)
177+
);
178+
179+
$this->mockClient->addResponses([
180+
SendNotificationsRequest::class => MockResponse::make(
181+
body: [
182+
'data' => [
183+
[
184+
'status' => 'error',
185+
'message' => '"ExponentPushToken[zzzzzzzzzzzzzzzzzzzzzz]" is not a registered push notification recipient',
186+
'details' => [
187+
'error' => 'SomeBrandNewErrorCode',
188+
'expoPushToken' => 'ExponentPushToken[zzzzzzzzzzzzzzzzzzzzzz]',
189+
],
190+
],
191+
],
192+
],
193+
headers: ['Content-Type' => 'application/json']
194+
),
195+
]);
196+
197+
$dto = $request->createDtoFromResponse(
198+
$this->connector->send($request)
199+
);
200+
201+
$ticket = $dto->get(0);
202+
$this->assertInstanceOf(FailedPushTicket::class, $ticket);
203+
$this->assertEquals(PushTicketErrorCode::Unknown, $ticket->details->error);
204+
}
205+
169206
#[Test]
170207
public function create_dto_from_response_throws_exception_when_body_cannot_be_decoded(): void
171208
{

0 commit comments

Comments
 (0)