diff --git a/src/Extensions/InternetExtension.php b/src/Extensions/InternetExtension.php index 4bb88e7..a743c8f 100644 --- a/src/Extensions/InternetExtension.php +++ b/src/Extensions/InternetExtension.php @@ -48,4 +48,29 @@ public function email() return sprintf('%s@%s', $letters, $this->domain()); } + + /** + * Generating a random URL. + * + * @param bool $secure + */ + public function url($secure = true): string + { + $generateLetter = function (): string { + return $this->randomizer->getBytesFromString( + implode(range('a', 'z')), + rand(4, 15) + ); + }; + + $route = ''; + + for ($i = 0; $i < 3; $i++) { + if (rand(0, 1)) { + $route .= '/'.$generateLetter(); + } + } + + return sprintf('http%s://%s%s', $secure ? 's' : '', $this->domain(), $route); + } } diff --git a/tests/Unit/Extensions/InternetExtensionTest.php b/tests/Unit/Extensions/InternetExtensionTest.php index cd6e1f5..47fd8f5 100644 --- a/tests/Unit/Extensions/InternetExtensionTest.php +++ b/tests/Unit/Extensions/InternetExtensionTest.php @@ -120,4 +120,18 @@ public function testEmail(): void $this->assertMatchesRegularExpression('/^(?!(?:(?:\x22?\x5C[\x00-\x7E]\x22?)|(?:\x22?[^\x5C\x22]\x22?)){255,})(?!(?:(?:\x22?\x5C[\x00-\x7E]\x22?)|(?:\x22?[^\x5C\x22]\x22?)){65,}@)(?:(?:[\x21\x23-\x27\x2A\x2B\x2D\x2F-\x39\x3D\x3F\x5E-\x7E]+)|(?:\x22(?:[\x01-\x08\x0B\x0C\x0E-\x1F\x21\x23-\x5B\x5D-\x7F]|(?:\x5C[\x00-\x7F]))*\x22))(?:\.(?:(?:[\x21\x23-\x27\x2A\x2B\x2D\x2F-\x39\x3D\x3F\x5E-\x7E]+)|(?:\x22(?:[\x01-\x08\x0B\x0C\x0E-\x1F\x21\x23-\x5B\x5D-\x7F]|(?:\x5C[\x00-\x7F]))*\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-[a-z0-9]+)*\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-[a-z0-9]+)*)|(?:\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\]))$/iD', $result); } } + + public function testUnsecureUrl(): void + { + for ($i = 0; $i < 100; $i++) { + $this->assertMatchesRegularExpression('/^http:\/\/[a-zA-Z0-9]+\.[a-zA-Z]+(?:\/[a-zA-Z0-9]+){0,3}$/', $this->faker->unique()->url(false)); + } + } + + public function testSecureUrl(): void + { + for ($i = 0; $i < 100; $i++) { + $this->assertMatchesRegularExpression('/^https:\/\/[a-zA-Z0-9]+\.[a-zA-Z]+(?:\/[a-zA-Z0-9]+){0,3}$/', $this->faker->unique()->url()); + } + } }