feat: custom eventually assertion
This commit is contained in:
parent
5bc6018c7c
commit
b3fc8eb510
14
tests/extensions/Async.php
Normal file
14
tests/extensions/Async.php
Normal file
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
namespace Appwrite\Tests;
|
||||
|
||||
use PHPUnit\Framework\Assert;
|
||||
use Appwrite\Tests\Async\Eventually;
|
||||
|
||||
trait Async
|
||||
{
|
||||
public static function assertEventually(callable $probe, int $timeoutMilliseconds = 10000, int $waitMilliseconds = 500): void
|
||||
{
|
||||
Assert::assertThat($probe, new Eventually($timeoutMilliseconds, $waitMilliseconds));
|
||||
}
|
||||
}
|
54
tests/extensions/Async/Eventually.php
Normal file
54
tests/extensions/Async/Eventually.php
Normal file
|
@ -0,0 +1,54 @@
|
|||
<?php
|
||||
|
||||
namespace Appwrite\Tests\Async;
|
||||
|
||||
use PHPUnit\Framework\Constraint\Constraint;
|
||||
|
||||
final class Eventually extends Constraint
|
||||
{
|
||||
private int $timeoutMs;
|
||||
private int $waitMs;
|
||||
|
||||
public function __construct(int $timeoutMs = 10000, int $waitMs = 500)
|
||||
{
|
||||
$this->timeoutMs = $timeoutMs;
|
||||
$this->waitMs = $waitMs;
|
||||
}
|
||||
|
||||
public function evaluate(mixed $probe, string $description = '', bool $returnResult = false): ?bool
|
||||
{
|
||||
if (!is_callable($probe)) {
|
||||
throw new \Exception('Probe must be a callable');
|
||||
}
|
||||
|
||||
$start = microtime(true);
|
||||
$lastException = null;
|
||||
|
||||
do {
|
||||
try {
|
||||
$probe();
|
||||
return true;
|
||||
} catch (\Exception $exception) {
|
||||
$lastException = $exception;
|
||||
}
|
||||
|
||||
usleep($this->waitMs * 1000);
|
||||
} while (microtime(true) - $start < $this->timeoutMs / 1000);
|
||||
|
||||
if ($returnResult) {
|
||||
return false;
|
||||
}
|
||||
|
||||
throw $lastException;
|
||||
}
|
||||
|
||||
protected function failureDescription(mixed $other): string
|
||||
{
|
||||
return 'the given probe was satisfied within the provided timeout';
|
||||
}
|
||||
|
||||
public function toString(): string
|
||||
{
|
||||
return 'Eventually';
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue