Skip to content

Commit 3c2c848

Browse files
ewood-acashgibsonEli Wood
authored
Issue 129 (#130)
This addresses issue #129. --------- Co-authored-by: Ash <1744544+ashgibson@users.noreply.github.com> Co-authored-by: Eli Wood <ewood@PC26VM7WKL.local>
1 parent 610d78a commit 3c2c848

5 files changed

Lines changed: 132 additions & 5 deletions

File tree

src/Postmark/Models/PostmarkBounce.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
class PostmarkBounce
66
{
7+
public string $RecordType;
78
public int $ID;
89
public string $Type;
910
public int $TypeCode;
@@ -25,6 +26,7 @@ class PostmarkBounce
2526

2627
public function __construct(array $values)
2728
{
29+
$this->RecordType = !empty($values['RecordType']) ? $values['RecordType'] : '';
2830
$this->ID = !empty($values['ID']) ? $values['ID'] : 0;
2931
$this->Type = !empty($values['Type']) ? $values['Type'] : 0;
3032
$this->TypeCode = !empty($values['TypeCode']) ? $values['TypeCode'] : '';
@@ -45,6 +47,17 @@ public function __construct(array $values)
4547
$this->Content = !empty($values['Content']) ? $values['Content'] : '';
4648
}
4749

50+
public function getRecordType(): mixed
51+
{
52+
return $this->RecordType;
53+
}
54+
55+
public function setRecordType(mixed $RecordType): PostmarkBounce
56+
{
57+
$this->RecordType = $RecordType;
58+
return $this;
59+
}
60+
4861
public function getID(): int
4962
{
5063
return $this->ID;

src/Postmark/Models/PostmarkBounceActivation.php

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ class PostmarkBounceActivation
1010
public function __construct(array $values)
1111
{
1212
$this->Message = !empty($values['Message']) ? $values['Message'] : '';
13-
$this->Bounce = !empty($values['Bounce']) ? $values['Bounce'] : new PostmarkBounce([]);
13+
$this->setBounce(!empty($values['Bounce']) ? $values['Bounce'] : array());
1414
}
1515

1616
/**
@@ -40,11 +40,12 @@ public function getBounce(): mixed
4040
}
4141

4242
/**
43-
* @param mixed|PostmarkBounce $Bounce
43+
* @param array $Bounce
44+
* @return PostmarkBounceActivation
4445
*/
45-
public function setBounce(mixed $Bounce): PostmarkBounceActivation
46+
public function setBounce(array $Bounce): PostmarkBounceActivation
4647
{
47-
$this->Bounce = $Bounce;
48+
$this->Bounce = new PostmarkBounce($Bounce);
4849

4950
return $this;
5051
}

tests/PostmarkClientBounceTest.php

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44

55
require_once __DIR__ . '/PostmarkClientBaseTest.php';
66

7+
use Postmark\Models;
78
use Postmark\PostmarkClient;
9+
use Postmark\tests;
810

911
/**
1012
* @internal
@@ -13,6 +15,11 @@
1315
*/
1416
class PostmarkClientBounceTest extends PostmarkClientBaseTest
1517
{
18+
public static function setUpBeforeClass(): void
19+
{
20+
PostmarkClientSuppressionsTest::tearDownAfterClass();
21+
}
22+
1623
public function testClientCanGetDeliveryStatistics()
1724
{
1825
$tk = parent::$testKeys;
@@ -41,6 +48,7 @@ public function testClientCanGetBounce()
4148
$id = $bounces->getBounces()[0]->getID();
4249
$bounce = $client->getBounce($id);
4350
$this->assertNotEmpty($bounce);
51+
$this->assertEquals($id, $bounce->getID());
4452
}
4553

4654
public function testClientCanGetBounceDump()
@@ -51,5 +59,71 @@ public function testClientCanGetBounceDump()
5159
$id = $bounces->Bounces[0]->getID();
5260
$dump = $client->getBounceDump($id);
5361
$this->assertNotEmpty($dump);
62+
$this->assertNotEmpty($dump->getBody());
63+
}
64+
65+
public function testClientCanActivateBounce()
66+
{
67+
$tk = parent::$testKeys;
68+
$client = new PostmarkClient($tk->WRITE_TEST_SERVER_TOKEN, $tk->TEST_TIMEOUT);
69+
70+
// make sure that this email is not suppressed
71+
// generate a bounces
72+
$fromEmail = $tk->WRITE_TEST_SENDER_EMAIL_ADDRESS;
73+
$toEmail = "hardbounce@bounce-testing.postmarkapp.com"; // special email to generate bounce
74+
$subject = "Hello from Postmark!";
75+
$htmlBody = "<strong>Hello</strong> dear Postmark user.";
76+
$textBody = "Hello dear Postmark user.";
77+
$tag = "example-email-tag";
78+
$trackOpens = true;
79+
$trackLinks = "None";
80+
81+
$sendResult = $client->sendEmail(
82+
$fromEmail,
83+
$toEmail,
84+
$subject,
85+
$htmlBody,
86+
$textBody,
87+
$tag,
88+
$trackOpens,
89+
NULL, // Reply To
90+
NULL, // CC
91+
NULL, // BCC
92+
NULL, // Header array
93+
NULL, // Attachment array
94+
$trackLinks,
95+
NULL // Metadata array
96+
);
97+
98+
// make sure there is enough time for the bounce to take place.
99+
sleep(180);
100+
101+
$bounceList = $client->getBounces(20, 0);
102+
$id = 0;
103+
$sentId = $sendResult->getMessageID();
104+
$bounces = $bounceList->getBounces();
105+
106+
$this->assertNotEmpty($bounces);
107+
$this->assertNotEmpty($sentId);
108+
109+
foreach ($bounces as $bounce)
110+
{
111+
$bmid = $bounce->getMessageID();
112+
echo "\n Bounce ID: $bmid Sent id: $sentId";
113+
if ($sentId === $bmid)
114+
{
115+
$id = $bounce->getID();
116+
echo "Made it!! $id";
117+
break;
118+
}
119+
}
120+
121+
$this->assertGreaterThan(0, $id);
122+
123+
$bounceActivation = $client->activateBounce($id);
124+
$actBounce = $bounceActivation->getBounce();
125+
126+
$this->assertNotEmpty($actBounce);
127+
$this->assertEquals($id, $actBounce->getID());
54128
}
55129
}

tests/PostmarkClientSuppressionsTest.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,15 @@ public static function tearDownAfterClass(): void
1919
{
2020
$tk = parent::$testKeys;
2121
$client = new PostmarkClient($tk->WRITE_TEST_SERVER_TOKEN, $tk->TEST_TIMEOUT);
22+
23+
// remove all suppressions on the default stream
24+
$sups = $client->getSuppressions();
25+
foreach ($sups->getSuppressions() as $sup)
26+
{
27+
$suppressionChanges = [new SuppressionChangeRequest($sup->getEmailAddress())];
28+
$messageStream = 'outbound';
29+
$client->deleteSuppressions($suppressionChanges, $messageStream);
30+
}
2231
}
2332

2433
// create suppression

tests/PostmarkClientTemplatesTest.php

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
require_once __DIR__ . '/PostmarkClientBaseTest.php';
66

7+
use Postmark\Models\MessageStream\PostmarkMessageStream;
78
use Postmark\Models\PostmarkAttachment;
89
use Postmark\Models\TemplatedPostmarkMessage;
910
use Postmark\PostmarkClient;
@@ -156,12 +157,41 @@ public function testClientCanSendMailWithTemplate()
156157
{
157158
$tk = parent::$testKeys;
158159
$client = new PostmarkClient($tk->WRITE_TEST_SERVER_TOKEN, $tk->TEST_TIMEOUT);
160+
161+
// make sure the message stream exists
162+
$id = 'php-test';
163+
$messageStreamType = 'Transactional';
164+
$name = 'PHP Test';
165+
$description = 'Test Stream Description';
166+
$createdStream = new PostmarkMessageStream(array());
167+
try
168+
{
169+
$createdStream = $client->getMessageStream($id);
170+
}
171+
catch (\Exception $ex)
172+
{
173+
$createdStream = $client->createMessageStream($id, $messageStreamType, $name, $description);
174+
}
175+
176+
$this->assertEquals($id, $createdStream->getID());
177+
159178
$result = $client->createTemplate('test-php-template-' . date('c'), '{{subject}}', 'Hello <b>{{name}}</b>!', 'Hello {{name}}!');
160179
$emailResult = $client->sendEmailWithTemplate(
161180
$tk->WRITE_TEST_SENDER_EMAIL_ADDRESS,
162181
$tk->WRITE_TEST_EMAIL_RECIPIENT_ADDRESS,
163182
$result->getTemplateId(),
164-
['subjectValue' => 'Hello!']
183+
['subjectValue' => 'Hello!'],
184+
false,
185+
"TestTag",
186+
true,
187+
$tk->WRITE_TEST_SENDER_EMAIL_ADDRESS,
188+
null, //cc
189+
null, //bcc
190+
null, // headers
191+
null, // attachments
192+
null, // tracklinks
193+
null, // metadata
194+
"php-test" // stream name
165195
);
166196

167197
$this->assertEquals(0, $emailResult->getErrorCode());

0 commit comments

Comments
 (0)