From 12321654968acc648618ff5a438094d117b3b172 Mon Sep 17 00:00:00 2001 From: Alexander Tebiev Date: Wed, 29 May 2024 18:01:22 +0200 Subject: [PATCH] add-last-updated-timestamp --- .php-cs-fixer.dist.php | 1 + phpunit.xml.dist | 3 + tests/Feature/MainFunctionalityTest.php | 112 ++++++++++++++++++ .../DisposableEmailDomainsTest.php | 2 +- 4 files changed, 117 insertions(+), 1 deletion(-) create mode 100644 tests/Feature/MainFunctionalityTest.php diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php index 2d4fc31..6758581 100644 --- a/.php-cs-fixer.dist.php +++ b/.php-cs-fixer.dist.php @@ -62,6 +62,7 @@ PhpCsFixerCustomFixers\Fixer\PhpdocSelfAccessorFixer::name() => true, // Calls to `PHPUnit\Framework\TestCase` static methods must all be of the same type, either `$this->`, `self::` or `static::`. 'php_unit_test_case_static_method_calls' => ['call_type' => 'self'], + 'php_unit_strict' => false, ]) ->setFinder( PhpCsFixer\Finder::create() diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 2280165..9b9a163 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -17,6 +17,9 @@ ./tests/Unit/ + + ./tests/Feature/ + diff --git a/tests/Feature/MainFunctionalityTest.php b/tests/Feature/MainFunctionalityTest.php new file mode 100644 index 0000000..3882990 --- /dev/null +++ b/tests/Feature/MainFunctionalityTest.php @@ -0,0 +1,112 @@ +randomBlackListedEmail = 'abc@' . $this->getRandomDomain(Config::LOCAL_BLACKLIST_PATH); + $this->randomWhitelistedEmail = 'abc@' . $this->getRandomDomain(Config::WHITELIST_PATH); + $this->randomDisposableEmail = 'abc@' . $this->getRandomDomain(Config::TXT_BLACKLIST_PATH); + + $this->disposableEmailFilter = new DisposableEmailFilter(); + } + + public function testWhitelistedDomain(): void + { + $result = $this->disposableEmailFilter->isDisposableEmailAddress($this->randomWhitelistedEmail); + + self::assertFalse($result); + } + + public function testBlacklistedDomain(): void + { + $result = $this->disposableEmailFilter->isDisposableEmailAddress($this->randomBlackListedEmail); + + self::assertTrue($result); + } + + public function testDisposableDomainIsDisposable(): void + { + $result = $this->disposableEmailFilter->isDisposableEmailAddress($this->randomDisposableEmail); + + self::assertTrue($result); + } + + public function testNonDisposableDomain(): void + { + $result = $this->disposableEmailFilter->isDisposableEmailAddress('abc@gmail.com'); + + self::assertFalse($result); + } + + /** + * @param non-empty-string $filePath + * + * @return non-empty-string + */ + private function getRandomDomain(string $filePath): string + { + $fileContents = $this->loafFirstLinesOfFile($filePath, 50); + $domains = DomainsExtractor::toArray($fileContents); + + $result = $domains[array_rand($domains)]; + assert(is_string($result) && $result !== ''); + + return $result; + } + + /** + * @param non-empty-string $filePath + * @param positive-int $linesCount + * + * @return non-empty-string + */ + private function loafFirstLinesOfFile(string $filePath, int $linesCount): string + { + $lines = []; + $fh = fopen($filePath, 'r'); + assert($fh !== false, 'Could not open file: ' . $filePath); + + for ($i = 0; $i < $linesCount; ++$i) { + $line = fgets($fh); + if ($line === false) { + break; + } + + $lines[] = str_replace(["\r", "\n"], '', $line); + } + + if (fclose($fh) === false) { + throw new \RuntimeException('Could not close file: ' . $filePath); + } + + assert(count($lines) > 0); + + return implode(PHP_EOL, $lines); + } +} diff --git a/tests/Unit/Src/DisposableEmailDomains/DisposableEmailDomainsTest.php b/tests/Unit/Src/DisposableEmailDomains/DisposableEmailDomainsTest.php index 010463d..daddc6f 100644 --- a/tests/Unit/Src/DisposableEmailDomains/DisposableEmailDomainsTest.php +++ b/tests/Unit/Src/DisposableEmailDomains/DisposableEmailDomainsTest.php @@ -22,7 +22,7 @@ public function testUpdatedDateTimeCanBeRetrieved(): void $disposableEmailDomains = new DisposableEmailDomains(self::DISPOSABLE_EMAIL_DOMAINS_FILE_PATH); $currentDateTime = new \DateTimeImmutable('2024-05-29 12:24:39.562100', new \DateTimeZone('UTC')); - self::assertSame($currentDateTime, $disposableEmailDomains->getUpdatedDateTime()); + self::assertEquals($currentDateTime, $disposableEmailDomains->getUpdatedDateTime()); self::assertSame('UTC', $disposableEmailDomains->getUpdatedDateTime()->getTimezone()->getName()); }