Skip to content

Commit 1f16a24

Browse files
committed
add email assertions
1 parent a967ce1 commit 1f16a24

File tree

3 files changed

+92
-1
lines changed

3 files changed

+92
-1
lines changed

composer.json

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
"phpunit/phpunit": "^9.1"
2121
},
2222
"require-dev": {
23+
"egulias/email-validator": "^2.1 || ^3.0",
2324
"giggsey/libphonenumber-for-php": "^8.12",
2425
"hashids/hashids": "^4.0",
2526
"league/iso3166": "^2.1 || ^3.0",
@@ -28,6 +29,7 @@
2829
"vinkla/hashids": "^9.0"
2930
},
3031
"suggest": {
32+
"egulias/email-validator": "\\Astrotomic\\PhpunitAssertions\\EmailAssertions (^2.1 || ^3.0)",
3133
"giggsey/libphonenumber-for-php": "\\Astrotomic\\PhpunitAssertions\\PhoneNumberAssertions (^8.12)",
3234
"hashids/hashids": "\\Astrotomic\\PhpunitAssertions\\HashidAssertions (^4.0)",
3335
"league/iso3166": "\\Astrotomic\\PhpunitAssertions\\CountryAssertions (^2.1 || ^3.0)",
@@ -48,5 +50,12 @@
4850
}
4951
},
5052
"minimum-stability": "dev",
51-
"prefer-stable": true
53+
"prefer-stable": true,
54+
"scripts": {
55+
"post-autoload-dump": [
56+
"@composer validate --strict --ansi --no-interaction --quiet",
57+
"@composer normalize --ansi --no-interaction --quiet",
58+
"@composer thanks --ansi --no-interaction --quiet"
59+
]
60+
}
5261
}

src/EmailAssertions.php

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
3+
namespace Astrotomic\PhpunitAssertions;
4+
5+
use Egulias\EmailValidator\EmailValidator;
6+
use Egulias\EmailValidator\Validation\RFCValidation;
7+
use PHPUnit\Framework\Assert as PHPUnit;
8+
9+
trait EmailAssertions
10+
{
11+
public static function assertValidLoose($actual): void
12+
{
13+
PHPUnit::assertIsString($actual);
14+
PHPUnit::assertNotFalse(filter_var($actual, FILTER_VALIDATE_EMAIL));
15+
}
16+
17+
public static function assertValidStrict($actual): void
18+
{
19+
PHPUnit::assertIsString($actual);
20+
PHPUnit::assertTrue((new EmailValidator())->isValid($actual, new RFCValidation()));
21+
}
22+
23+
public static function assertSameDomain(string $expected, $actual): void
24+
{
25+
PHPUnit::assertIsString($actual);
26+
[, $domain] = explode('@', $actual, 2);
27+
PHPUnit::assertSame($expected, $domain);
28+
}
29+
30+
public static function assertSameLocalPart(string $expected, $actual): void
31+
{
32+
PHPUnit::assertIsString($actual);
33+
[$localPart] = explode('@', $actual, 2);
34+
PHPUnit::assertSame($expected, $localPart);
35+
}
36+
}

tests/EmailAssertionsTest.php

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<?php
2+
3+
namespace Astrotomic\PhpunitAssertions\Tests;
4+
5+
use Astrotomic\PhpunitAssertions\EmailAssertions;
6+
7+
final class EmailAssertionsTest extends TestCase
8+
{
9+
/**
10+
* @test
11+
* @dataProvider hundredTimes
12+
*/
13+
public static function it_can_validate_loose(): void
14+
{
15+
EmailAssertions::assertValidLoose(self::randomString().'@email.com');
16+
}
17+
18+
/**
19+
* @test
20+
* @dataProvider hundredTimes
21+
*/
22+
public static function it_can_validate_strict(): void
23+
{
24+
EmailAssertions::assertValidStrict(self::randomString().'@email.com');
25+
}
26+
27+
/**
28+
* @test
29+
* @dataProvider hundredTimes
30+
*/
31+
public static function it_can_validate_same_domain(): void
32+
{
33+
EmailAssertions::assertSameDomain('email.com', self::randomString().'@email.com');
34+
}
35+
36+
/**
37+
* @test
38+
* @dataProvider hundredTimes
39+
*/
40+
public static function it_can_validate_same_local_part(): void
41+
{
42+
$localPart = self::randomString();
43+
44+
EmailAssertions::assertSameLocalPart($localPart, $localPart.'@email.com');
45+
}
46+
}

0 commit comments

Comments
 (0)