Skip to content

Commit 1417d4a

Browse files
committed
fix: drop laminas-mail dev dep for PHP 8.4, clarify README testing
- Replace Laminas test MIME builder with TestMimeMessage helper - Restructure README Testing/Changelog out from under Herd section - Note zbateson/mail-mime-parser as inbound parser in Testing section Made-with: Cursor
1 parent 651f19b commit 1417d4a

5 files changed

Lines changed: 75 additions & 16 deletions

File tree

README.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,15 @@ The email service organizes emails into distinct inboxes for each application, e
3636

3737
![image](https://github.com/user-attachments/assets/6417907c-119d-43ac-9cf6-5638bafae24f)
3838

39+
## Testing
3940

40-
### Testing
41+
Inbound messages are parsed with [zbateson/mail-mime-parser](https://mail-mime-parser.org) (see the docs on [handling inbound email](https://docs.beyondco.de/laravel-mailbox/basic-usage/handling)). Run the package test suite with:
4142

42-
``` bash
43+
```bash
4344
composer test
4445
```
4546

46-
### Changelog
47+
## Changelog
4748

4849
Please see [CHANGELOG](CHANGELOG.md) for more information what has changed recently.
4950

composer.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
"zbateson/mail-mime-parser": "^2.4|^3.0|^4.0"
2727
},
2828
"require-dev": {
29-
"laminas/laminas-mail": "^2.13",
3029
"mockery/mockery": "^1.2",
3130
"orchestra/testbench": "^8.0|^9.0|^10.0|^11.0",
3231
"phpunit/phpunit": "^10.5|^11.0|^12.0"

tests/MailboxRouteCollectionTest.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
use BeyondCode\Mailbox\InboundEmail;
66
use BeyondCode\Mailbox\Routing\Route;
77
use BeyondCode\Mailbox\Routing\RouteCollection;
8-
use Laminas\Mail\Message as TestMail;
98
use PHPUnit\Framework\Attributes\Test;
109

1110
class MailboxRouteCollectionTest extends TestCase
@@ -19,7 +18,7 @@ public function it_returns_all_matching_mailbox_routes()
1918
$collection->add(new Route(Route::FROM, '{from}@beyondco.de', ''));
2019
$collection->add(new Route(Route::FROM, 'different@laravel.com', ''));
2120

22-
$testMail = (new TestMail())
21+
$testMail = (new TestMimeMessage())
2322
->setFrom('hello@beyondco.de');
2423

2524
$message = new InboundEmail(['message' => $testMail->toString()]);

tests/MailboxRouteTest.php

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

55
use BeyondCode\Mailbox\InboundEmail;
66
use BeyondCode\Mailbox\Routing\Route;
7-
use Laminas\Mail\Message as TestMail;
87
use PHPUnit\Framework\Attributes\DataProvider;
98
use PHPUnit\Framework\Attributes\Test;
109

@@ -22,7 +21,7 @@ public static function emailDataProvider()
2221
#[DataProvider('emailDataProvider')]
2322
public function it_matches_from_mails($fromMail, $successfulPattern, $failingPattern)
2423
{
25-
$testMail = (new TestMail())
24+
$testMail = (new TestMimeMessage())
2625
->setFrom($fromMail);
2726

2827
$message = new InboundEmail(['message' => $testMail->toString()]);
@@ -38,7 +37,7 @@ public function it_matches_from_mails($fromMail, $successfulPattern, $failingPat
3837
#[DataProvider('emailDataProvider')]
3938
public function it_matches_to_mails($toMail, $successfulPattern, $failingPattern)
4039
{
41-
$testMail = (new TestMail())
40+
$testMail = (new TestMimeMessage())
4241
->setTo($toMail);
4342

4443
$message = new InboundEmail(['message' => $testMail->toString()]);
@@ -54,7 +53,7 @@ public function it_matches_to_mails($toMail, $successfulPattern, $failingPattern
5453
#[DataProvider('emailDataProvider')]
5554
public function it_matches_cc_mails($ccMail, $successfulPattern, $failingPattern)
5655
{
57-
$testMail = (new TestMail())
56+
$testMail = (new TestMimeMessage())
5857
->setCc($ccMail);
5958

6059
$message = new InboundEmail(['message' => $testMail->toString()]);
@@ -70,7 +69,7 @@ public function it_matches_cc_mails($ccMail, $successfulPattern, $failingPattern
7069
#[DataProvider('emailDataProvider')]
7170
public function it_matches_bcc_mails($bccMail, $successfulPattern, $failingPattern)
7271
{
73-
$testMail = (new TestMail())
72+
$testMail = (new TestMimeMessage())
7473
->setBcc($bccMail);
7574

7675
$message = new InboundEmail(['message' => $testMail->toString()]);
@@ -86,7 +85,7 @@ public function it_matches_bcc_mails($bccMail, $successfulPattern, $failingPatte
8685
#[DataProvider('subjectDataProvider')]
8786
public function it_matches_subjects($subject, $successfulPattern, $failingPattern)
8887
{
89-
$testMail = (new TestMail())
88+
$testMail = (new TestMimeMessage())
9089
->setSubject($subject);
9190

9291
$message = new InboundEmail(['message' => $testMail->toString()]);
@@ -101,7 +100,7 @@ public function it_matches_subjects($subject, $successfulPattern, $failingPatter
101100
#[Test]
102101
public function it_matches_requirements()
103102
{
104-
$testMail = (new TestMail())
103+
$testMail = (new TestMimeMessage())
105104
->setFrom('abc@domain.com');
106105

107106
$message = new InboundEmail(['message' => $testMail->toString()]);
@@ -150,7 +149,7 @@ public function it_returns_parameter_names()
150149
#[Test]
151150
public function it_returns_parameter_values()
152151
{
153-
$testMail = (new TestMail())
152+
$testMail = (new TestMimeMessage())
154153
->setFrom('my-email@foo.com')
155154
->setSubject('ABC/DEF/GEH');
156155

@@ -190,7 +189,7 @@ public function it_returns_parameter_values()
190189
#[Test]
191190
public function it_runs_callables()
192191
{
193-
$testMail = (new TestMail())
192+
$testMail = (new TestMimeMessage())
194193
->setFrom('marcel@beyondco.de');
195194

196195
$message = new InboundEmail(['message' => $testMail->toString()]);
@@ -207,7 +206,7 @@ public function it_runs_callables()
207206
#[Test]
208207
public function it_passes_parameters_to_callables()
209208
{
210-
$testMail = (new TestMail())
209+
$testMail = (new TestMimeMessage())
211210
->setFrom('marcel@beyondco.de');
212211

213212
$message = new InboundEmail(['message' => $testMail->toString()]);

tests/TestMimeMessage.php

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
<?php
2+
3+
namespace BeyondCode\Mailbox\Tests;
4+
5+
/** Builds minimal MIME strings for route tests (inbound parsing uses zbateson/mail-mime-parser). */
6+
final class TestMimeMessage
7+
{
8+
/** @var array<string, string> */
9+
private array $headers = [];
10+
11+
public function setFrom(string $email): self
12+
{
13+
$this->headers['From'] = $email;
14+
15+
return $this;
16+
}
17+
18+
public function setTo(string $email): self
19+
{
20+
$this->headers['To'] = $email;
21+
22+
return $this;
23+
}
24+
25+
public function setCc(string $email): self
26+
{
27+
$this->headers['Cc'] = $email;
28+
29+
return $this;
30+
}
31+
32+
public function setBcc(string $email): self
33+
{
34+
$this->headers['Bcc'] = $email;
35+
36+
return $this;
37+
}
38+
39+
public function setSubject(string $subject): self
40+
{
41+
$this->headers['Subject'] = $subject;
42+
43+
return $this;
44+
}
45+
46+
public function toString(): string
47+
{
48+
$lines = [];
49+
foreach (['From', 'To', 'Cc', 'Bcc', 'Subject'] as $name) {
50+
if (isset($this->headers[$name])) {
51+
$lines[] = $name.': '.$this->headers[$name];
52+
}
53+
}
54+
$lines[] = 'MIME-Version: 1.0';
55+
$lines[] = 'Content-Type: text/plain; charset=UTF-8';
56+
$lines[] = '';
57+
$lines[] = '';
58+
59+
return implode("\r\n", $lines);
60+
}
61+
}

0 commit comments

Comments
 (0)