Conversation
larowlan
commented
Jul 18, 2024
- SpinTrait for retrying in a test
- Extra random methods (url, email, location, address)
- Constraint violation asserts
mstrelan
left a comment
There was a problem hiding this comment.
Looks good, just a few nits. Also the other existing traits have README entries. It's a hassle though, do we think it's worthwhile?
| /** | ||
| * Generates a random URL. | ||
| * | ||
| * @return string | ||
| * Random URL. | ||
| */ | ||
| protected function randomUrl(): string { | ||
| $random = new Random(); | ||
| return \sprintf('https://%s.com/%s', $random->name(), $random->name()); | ||
| } |
There was a problem hiding this comment.
I've always felt we should use example.com as the domain name. Turns out there is now a reserved .example TLD.
| /** | |
| * Generates a random URL. | |
| * | |
| * @return string | |
| * Random URL. | |
| */ | |
| protected function randomUrl(): string { | |
| $random = new Random(); | |
| return \sprintf('https://%s.com/%s', $random->name(), $random->name()); | |
| } | |
| /** | |
| * Generates a random URL. | |
| * | |
| * @return string | |
| * Random URL. | |
| */ | |
| protected function randomUrl(): string { | |
| $random = new Random(); | |
| return \sprintf('https://%s.example/%s', $random->name(), $random->name()); | |
| } |
| */ | ||
| protected function randomEmail(): string { | ||
| $random = new Random(); | ||
| return \sprintf('%s@%s.com', $random->name(), $random->name()); |
There was a problem hiding this comment.
| return \sprintf('%s@%s.com', $random->name(), $random->name()); | |
| return \sprintf('%s@%s.example', $random->name(), $random->name()); |
| protected function randomLatLonPair(): string { | ||
| $lon = $this->randomPoint(-180, 180); | ||
| $lat = $this->randomPoint(-84, 84); | ||
| return \sprintf('POINT(%s %s)', $lon, $lat); |
There was a problem hiding this comment.
Nit: floats are not strings
| return \sprintf('POINT(%s %s)', $lon, $lat); | |
| return \sprintf('POINT(%.05n %.05n)', $lon, $lat); |
| * Executes a callable until it returns TRUE. | ||
| * | ||
| * Executes executing a task until a condition is met. |
There was a problem hiding this comment.
| * Executes a callable until it returns TRUE. | |
| * | |
| * Executes executing a task until a condition is met. | |
| * Executes a callable until it returns TRUE. |
| * @param int $count | ||
| * (optional) Number of times to try, defaults to 10. | ||
| * @param bool $throw | ||
| * (optional) Throw, TRUE to throw if the condition is not met. | ||
| * | ||
| * @return bool | ||
| * TRUE if lambda evaluated true. | ||
| * | ||
| * @throws \Exception | ||
| * When the condition is not met. | ||
| */ | ||
| protected function spin(callable $lambda, $count = 10, $throw = TRUE): bool { |
There was a problem hiding this comment.
Nit:
| * @param int $count | |
| * (optional) Number of times to try, defaults to 10. | |
| * @param bool $throw | |
| * (optional) Throw, TRUE to throw if the condition is not met. | |
| * | |
| * @return bool | |
| * TRUE if lambda evaluated true. | |
| * | |
| * @throws \Exception | |
| * When the condition is not met. | |
| */ | |
| protected function spin(callable $lambda, $count = 10, $throw = TRUE): bool { | |
| * @param non-negative-int $count | |
| * (optional) Number of times to try, defaults to 10. | |
| * @param bool $throw | |
| * (optional) Throw, TRUE to throw if the condition is not met. | |
| * | |
| * @return bool | |
| * TRUE if lambda evaluated true. | |
| * | |
| * @throws \Exception | |
| * When the condition is not met. | |
| */ | |
| protected function spin(callable $lambda, int $count = 10, bool $throw = TRUE): bool { |
| catch (\Exception $e) { | ||
| // Do nothing. | ||
| } |
There was a problem hiding this comment.
Non-capturing catch:
| catch (\Exception $e) { | |
| // Do nothing. | |
| } | |
| catch (\Exception) { | |
| // Do nothing. | |
| } |
| } | ||
| // Max reached. | ||
| if ($throw) { | ||
| throw new \Exception(\sprintf('Condition was not met after %d attempts', $count)); |
There was a problem hiding this comment.
It would be nice to have a more specific exception, maybe \Behat\Mink\Exception\ExpectationException.
| /** | ||
| * Generates a random lat/lon point. | ||
| */ | ||
| private function randomPoint(int $min, int $max): float { | ||
| $number = \mt_rand($min, $max); | ||
| $decimals = \mt_rand(1, \pow(10, 5)) / \pow(10, 5); | ||
| return \round($number + $decimals, 5); | ||
| } |
There was a problem hiding this comment.
We could also require PHP 8.3 and use Randomizer::getFloat.