Skip to content

Commit 40f4f71

Browse files
Ozzrellf3l1x
authored andcommitted
DataSource: improve getData
1 parent bf2a405 commit 40f4f71

File tree

2 files changed

+40
-1
lines changed

2 files changed

+40
-1
lines changed

src/NetteDatabaseDataSource.php

+5-1
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,11 @@ public function getCount(): int
127127
*/
128128
public function getData(): array
129129
{
130-
return $this->data ?? $this->query($this->sql)->fetchAll();
130+
if ($this->data === []) {
131+
$this->data = $this->query($this->sql)->fetchAll();
132+
}
133+
134+
return $this->data;
131135
}
132136

133137

tests/Cases/NetteDatabaseDataSourceTest.phpt

+35
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,13 @@ declare(strict_types=1);
44

55
namespace Tests\Cases;
66

7+
use Mockery;
78
use Nette\Caching\Storages\DevNullStorage;
89
use Nette\Database\Connection;
910
use Nette\Database\Context;
11+
use Nette\Database\ResultSet;
1012
use Nette\Database\Structure;
13+
use ReflectionClass;
1114
use Tester\Assert;
1215
use Tester\TestCase;
1316
use Ublaboo;
@@ -159,6 +162,38 @@ final class NetteDatabaseDataSourceTest extends TestCase
159162
Assert::same(['text with space', 'text with space'], $q[1]);
160163
}
161164

165+
public function testGetDataFromDatabase(): void
166+
{
167+
$data = ['foo', 'bar'];
168+
169+
$resultSet = Mockery::mock(ResultSet::class);
170+
$resultSet->shouldReceive('fetchAll')
171+
->once()
172+
->andReturn($data);
173+
174+
$connection = Mockery::mock(Context::class);
175+
$connection->shouldReceive('query')
176+
->once()
177+
->andReturn($resultSet);
178+
179+
$s = new NetteDatabaseDataSource($connection, 'SELECT * FROM user');
180+
181+
Assert::same($data, $s->getData());
182+
}
183+
184+
public function testGetDataAlreadyStored(): void
185+
{
186+
$data = ['foo', 'bar'];
187+
188+
$s = new NetteDatabaseDataSource($this->db, 'SELECT * FROM user');
189+
$rc = new ReflectionClass(get_class($s));
190+
$rp = $rc->getProperty('data');
191+
$rp->setAccessible(true);
192+
$rp->setValue($s, $data);
193+
194+
Assert::same($data, $s->getData());
195+
}
196+
162197
public function testComplexQuery(): void
163198
{
164199
$q =

0 commit comments

Comments
 (0)