Skip to content

Commit

Permalink
Update tests
Browse files Browse the repository at this point in the history
  • Loading branch information
trowski committed Dec 13, 2023
1 parent 70ac3e1 commit 732790d
Show file tree
Hide file tree
Showing 4 changed files with 81 additions and 36 deletions.
10 changes: 2 additions & 8 deletions test/ConnectionPoolTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
use Amp\PHPUnit\AsyncTestCase;
use Amp\Sql\Common\ConnectionPool;
use Amp\Sql\Common\PooledResult;
use Amp\Sql\Common\Test\Stub\StubPooledResult;
use Amp\Sql\Connection;
use Amp\Sql\Result;
use Amp\Sql\SqlConfig;
Expand Down Expand Up @@ -67,14 +68,7 @@ private function createPool(SqlConnector $connector, int $maxConnections = 100,
->getMockForAbstractClass();

$pool->method('createResult')
->willReturnCallback(function (Result $result, \Closure $release): PooledResult {
return new class($result, $release) extends PooledResult {
protected function newInstanceFrom(Result $result, \Closure $release): PooledResult
{
return new self($result, $release);
}
};
});
->willReturnCallback(fn (Result $result, \Closure $release) => new StubPooledResult($result, $release));

return $pool;
}
Expand Down
41 changes: 13 additions & 28 deletions test/PooledResultTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

use Amp\PHPUnit\AsyncTestCase;
use Amp\Sql\Common\PooledResult;
use Amp\Sql\Common\Test\Stub\StubPooledResult;
use Amp\Sql\Common\Test\Stub\StubResult;
use Amp\Sql\Result;
use function Amp\delay;

Expand All @@ -17,33 +19,16 @@ public function testIdleConnectionsRemovedAfterTimeout()
$invoked = true;
};

$secondResult = $this->createMock(PooledResult::class);
$secondResult->method('getIterator')
->willReturn(new \ArrayIterator([['column' => 'value']]));
$secondResult->method('getNextResult')
->willReturn(null);
$row = ['column' => 'value'];
$stubResult = new StubResult([$row]);

$firstResult = $this->createMock(PooledResult::class);
$firstResult->method('getIterator')
->willReturn(new \ArrayIterator([['column' => 'value']]));
$firstResult->method('getNextResult')
->willReturn($secondResult);
$secondResult = new StubPooledResult($stubResult);
$firstResult = new StubPooledResult($stubResult, next: $secondResult);
$pooledResult = new StubPooledResult($stubResult, $release, $firstResult);

$result = $this->getMockBuilder(PooledResult::class)
->setConstructorArgs([$firstResult, $release])
->getMockForAbstractClass();
$iterator = $pooledResult->getIterator();

$result->expects(self::once())
->method('newInstanceFrom')
->willReturnCallback(function (Result $result, \Closure $release): PooledResult {
return $this->getMockBuilder(PooledResult::class)
->setConstructorArgs([$result, $release])
->getMockForAbstractClass();
});

$iterator = $result->getIterator();

$this->assertSame(['column' => 'value'], $iterator->current());
$this->assertSame($row, $iterator->current());

$this->assertFalse($invoked);

Expand All @@ -52,15 +37,15 @@ public function testIdleConnectionsRemovedAfterTimeout()

$this->assertFalse($invoked); // Next result set available.

$result = $result->getNextResult();
$iterator = $result->getIterator();
$pooledResult = $pooledResult->getNextResult();
$iterator = $pooledResult->getIterator();

$this->assertSame(['column' => 'value'], $iterator->current());
$this->assertSame($row, $iterator->current());

$iterator->next();
$this->assertFalse($iterator->valid());

$result->getNextResult();
$pooledResult->getNextResult();

delay(0); // Tick event loop to dispose of result set.

Expand Down
24 changes: 24 additions & 0 deletions test/Stub/StubPooledResult.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?php

namespace Amp\Sql\Common\Test\Stub;

use Amp\Sql\Common\PooledResult;
use Amp\Sql\Result;

final class StubPooledResult extends PooledResult
{
public function __construct(Result $result, ?\Closure $release = null, private readonly ?Result $next = null)
{
parent::__construct($result, $release ?? fn () => null);
}

public function getNextResult(): ?Result
{
return $this->next;
}

protected static function newInstanceFrom(Result $result, \Closure $release): Result
{
return new self($result, $release);
}
}
42 changes: 42 additions & 0 deletions test/Stub/StubResult.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<?php

namespace Amp\Sql\Common\Test\Stub;

use Amp\Sql\Result;

final class StubResult implements Result, \IteratorAggregate
{
private readonly array $rows;

private int $current = 0;

public function __construct(array $rows, private readonly ?Result $next = null)
{
$this->rows = array_values($rows);
}

public function getIterator(): \Iterator
{
yield from $this->rows;
}

public function fetchRow(): ?array
{
return $this->rows[$this->current++] ?? null;
}

public function getNextResult(): ?Result
{
return $this->next;
}

public function getRowCount(): ?int
{
return count($this->rows);
}

public function getColumnCount(): ?int
{
return null;
}
}

0 comments on commit 732790d

Please sign in to comment.