From 3a2d7c7e63010f303eb334f9e8712976e7d5bad7 Mon Sep 17 00:00:00 2001 From: ErickSkrauch Date: Wed, 27 Apr 2016 10:22:44 +0300 Subject: [PATCH] Implemented TempMailBuster class and his tests. Extended tests for Storage class --- src/TempMailBuster.php | 70 ++++++++++++++++++++++++++++++++++++ tests/StorageTest.php | 6 ++-- tests/TempMailBusterTest.php | 54 ++++++++++++++++++++++++++++ 3 files changed, 127 insertions(+), 3 deletions(-) create mode 100644 src/TempMailBuster.php create mode 100644 tests/TempMailBusterTest.php diff --git a/src/TempMailBuster.php b/src/TempMailBuster.php new file mode 100644 index 0000000..a291088 --- /dev/null +++ b/src/TempMailBuster.php @@ -0,0 +1,70 @@ +storage; + } + + /** + * Validate passed email over all storage domains and return true if domain not found + * in lists. False otherwise. + * @see TempMailBuster::getDomain() for info about accepted $email formats + * + * @param string $email + * @return bool + */ + public function validate($email) + { + $domain = $this->getDomain($email); + $tempMailsRegex = $this->buildRegex($this->getStorage()->getBlacklist()); + $match = preg_match($tempMailsRegex, $domain); + + // TODO: add support for whitelists + + return !$match; + } + + /** + * Catches the domain part of passed E-mail address. Expected values is: + * - full E-mail: erickskrauch@ely.by + * - domain, starting with @: @ely.by + * - domain itself: ely.by + * + * @param string $email + * @return string + */ + protected function getDomain($email) + { + $parts = explode('@', $email); + return array_pop($parts); + } + + /** + * @param array $list + * + * @return string + */ + protected function buildRegex(array $list) + { + return '/^(' . implode('|', $list) . ')$/'; + } + + /** + * @param Storage $storage + */ + public function __construct(Storage $storage) + { + $this->storage = $storage; + } +} diff --git a/tests/StorageTest.php b/tests/StorageTest.php index f38dc27..30fa9e9 100644 --- a/tests/StorageTest.php +++ b/tests/StorageTest.php @@ -12,18 +12,18 @@ class StorageTest extends \PHPUnit_Framework_TestCase public function testAppendToBlacklist() { $storage = new Storage(['item1']); - $storage->appendToBlacklist(['item2']); + $this->assertEquals($storage, $storage->appendToBlacklist(['item2'])); $this->assertEquals(['item1', 'item2'], $storage->getBlacklist()); $storage = new Storage(['item1']); - $storage->appendToBlacklist('item2'); + $this->assertEquals($storage, $storage->appendToBlacklist('item2')); $this->assertEquals(['item1', 'item2'], $storage->getBlacklist()); } public function testSetBlacklist() { $storage = new Storage(['item1']); - $storage->setBlacklist(['item2']); + $this->assertEquals($storage, $storage->setBlacklist(['item2'])); $this->assertEquals(['item2'], $storage->getBlacklist()); } } diff --git a/tests/TempMailBusterTest.php b/tests/TempMailBusterTest.php new file mode 100644 index 0000000..54355e4 --- /dev/null +++ b/tests/TempMailBusterTest.php @@ -0,0 +1,54 @@ +assertEquals($storage, $object->getStorage()); + } + + public function testGetDomain() + { + $object = new TempMailBuster(new Storage()); + $this->assertEquals('ely.by', $this->callGetDomain($object, 'erickskrauch@ely.by')); + $this->assertEquals('ely.by', $this->callGetDomain($object, '@ely.by')); + $this->assertEquals('ely.by', $this->callGetDomain($object, 'ely.by')); + } + + public function testBuildRegex() + { + $object = new TempMailBuster(new Storage()); + $this->assertEquals('/^(simple)$/', $this->callBuildRegex($object, ['simple'])); + $this->assertEquals('/^(simple|another)$/', $this->callBuildRegex($object, ['simple', 'another'])); + } + + public function testValidate() + { + $storage = new Storage(['mojang\.com']); + $object = new TempMailBuster($storage); + $this->assertFalse($object->validate('notch@mojang.com')); + $this->assertTrue($object->validate('jeb@mojang1.com')); + $this->assertTrue($object->validate('erickskrauch@ely.by')); + } + + private function callGetDomain($object, $email) + { + $class = new \ReflectionClass($object); + $method = $class->getMethod('getDomain'); + $method->setAccessible(true); + + return $method->invokeArgs($object, [$email]); + } + + private function callBuildRegex($object, array $list) + { + $class = new \ReflectionClass($object); + $method = $class->getMethod('buildRegex'); + $method->setAccessible(true); + + return $method->invokeArgs($object, [$list]); + } +}