diff --git a/README.md b/README.md index 01ed70b..5d3eb5a 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,8 @@ This will prevent any method name conflicts with core, your custom or other trai \Astrotomic\PhpunitAssertions\EmailAssertions::assertValidStrict('gummibeer@astrotomic.info'); \Astrotomic\PhpunitAssertions\EmailAssertions::assertDomain('astrotomic.info', 'gummibeer@astrotomic.info'); \Astrotomic\PhpunitAssertions\EmailAssertions::assertLocalPart('gummibeer', 'gummibeer@astrotomic.info'); +\Astrotomic\PhpunitAssertions\EmailAssertions::assertPlusMailbox('gummibeer', 'gummibeer+news@astrotomic.info'); +\Astrotomic\PhpunitAssertions\EmailAssertions::assertPlusAlias('news', 'gummibeer+news@astrotomic.info'); ``` ### Geographic diff --git a/src/EmailAssertions.php b/src/EmailAssertions.php index 4a2780c..50b2cb9 100644 --- a/src/EmailAssertions.php +++ b/src/EmailAssertions.php @@ -33,4 +33,20 @@ public static function assertLocalPart(string $expected, $actual): void [$localPart] = explode('@', $actual, 2); PHPUnit::assertSame($expected, $localPart); } + + public static function assertPlusMailbox(string $expected, $actual): void + { + PHPUnit::assertIsString($actual); + [$localPart] = explode('@', $actual, 2); + [$mailbox] = explode('+', $localPart, 2); + PHPUnit::assertSame($expected, $mailbox); + } + + public static function assertPlusAlias(string $expected, $actual): void + { + PHPUnit::assertIsString($actual); + [$localPart] = explode('@', $actual, 2); + [$mailbox, $alias] = explode('+', $localPart, 2); + PHPUnit::assertSame($expected, $alias); + } } diff --git a/tests/EmailAssertionsTest.php b/tests/EmailAssertionsTest.php index 8658b7b..d6f373d 100644 --- a/tests/EmailAssertionsTest.php +++ b/tests/EmailAssertionsTest.php @@ -43,4 +43,30 @@ public static function it_can_validate_local_part(): void EmailAssertions::assertLocalPart($localPart, $localPart.'@email.com'); } + + /** + * @test + * @dataProvider hundredTimes + */ + public static function it_can_validate_plus_mailbox(): void + { + $mailbox = self::randomString(); + $alias = self::randomBool(); + $email = $mailbox.'+'.$alias.'@email.com'; + + EmailAssertions::assertPlusMailbox($mailbox, $email); + } + + /** + * @test + * @dataProvider hundredTimes + */ + public static function it_can_validate_plus_alias(): void + { + $mailbox = self::randomString(); + $alias = self::randomBool(); + $email = $mailbox.'+'.$alias.'@email.com'; + + EmailAssertions::assertPlusAlias($alias, $email); + } }